#!/usr/bin/env python ''' Solves MIDACO's Toy Problem Using MIDACO's Parallelization min (x1-1.0)**2 + (x2-2.0)**2 + (x3-3.0)**2 + (x4-4.0)**2 + 1.23456789 s.t.: x1 - 1.0 = 0 1.333333333 - x2 <= 0 2.666666666 - x3 <= 0 1 <= xi <= 4, i = 1,...,4 x* = [, ] f* = ''' # ============================================================================= # Standard Python modules # ============================================================================= import os, sys, time # ============================================================================= # External Python modules # ============================================================================= try: from mpi4py import MPI comm = MPI.COMM_WORLD myrank = comm.Get_rank() except: raise ImportError('mpi4py is required for parallelization') #end # ============================================================================= # Extension modules # ============================================================================= #from pyOpt import * from pyOpt import Optimization from pyOpt import MIDACO # ============================================================================= # # ============================================================================= def objfunc(x): f = (x[0]-1.0)**2 + (x[1]-2.0)**2 + (x[2]-3.0)**2 + (x[3]-4.0)**2 + 1.23456789 g = [0.0]*3 g[0] = x[0] - 1.0 g[1] = 1.333333333 - x[1] g[2] = 2.666666666 - x[2] time.sleep(0.005) fail = 0 return f,g, fail # ============================================================================= # # ============================================================================= # Instantiate Optimization Problem opt_prob = Optimization('MIDACO Toy Problem',objfunc) opt_prob.addVar('x1','c',lower=1.0,upper=4.0,value=1.0) opt_prob.addVar('x2','c',lower=1.0,upper=4.0,value=1.0) opt_prob.addVar('x3','c',lower=1.0,upper=4.0,value=1.0) opt_prob.addVar('x4','c',lower=1.0,upper=4.0,value=1.0) opt_prob.addObj('f') opt_prob.addCon('g1','e') opt_prob.addCon('g2','i') opt_prob.addCon('g3','i') # Solve Problem (No-Parallelization) midaco_none = MIDACO() midaco_none.setOption('IPRINT',-1) midaco_none.setOption('MAXEVAL',50000) midaco_none(opt_prob) if myrank == 0: print opt_prob.solution(0) #end # Solve Problem (SPM-Parallelization) midaco_spm = MIDACO(pll_type='SPM') midaco_spm.setOption('IPRINT',-1) midaco_none.setOption('MAXEVAL',50000) midaco_spm(opt_prob) print opt_prob.solution(1)