def configure(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339 """ self.add('driver', FixedPointIterator()) # Inner Loop - Full Multidisciplinary Solve via fixed point iteration C1 = self.add('C1', sellar.Discipline1()) C2 = self.add('C2', sellar.Discipline2()) self.driver.workflow.add(['C1','C2']) #not relevant to the iteration. Just fixed constants C1.z1 = C2.z1 = 1.9776 C1.z2 = C2.z2 = 0 C1.x1 = 0 # Solver settings self.driver.max_iteration = 5 self.driver.tolerance = 1.e-15 self.driver.print_convergence = False
def __init__(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" # pylint: disable-msg=E1101 super(SellarMDF, self).__init__() # create Optimizer instance self.add('driver', CONMINdriver()) # Outer Loop - Global Optimization self.add('solver', BroydenSolver()) self.driver.workflow.add('solver') # Inner Loop - Full Multidisciplinary Solve via fixed point iteration self.add('dis1', sellar.Discipline1()) self.add('dis2', sellar.Discipline2()) self.solver.workflow.add(['dis1', 'dis2']) # Make all connections self.connect('dis1.y1','dis2.y1') # Iteration loop self.solver.add_parameter('dis1.y2', low=-9.e99, high=9.e99) self.solver.add_constraint('dis2.y2 = dis1.y2') # equivilent form # self.solver.add_constraint('dis2.y2 - dis1.y2 = 0') #Driver Settings self.solver.itmax = 10 self.solver.alpha = .4 self.solver.tol = .0000001 self.solver.algorithm = "broyden2" # Optimization parameters self.driver.add_objective('(dis1.x1)**2 + dis1.z2 + dis1.y1 + math.exp(-dis2.y2)') for param, low, high in zip([('dis1.z1','dis2.z1'), ('dis1.z2','dis2.z2'), 'dis1.x1'], [-10.0, 0.0, 0.0], [10.0, 10.0, 10.0]): self.driver.add_parameter(param, low=low, high=high) map(self.driver.add_constraint, ['3.16 < dis1.y1', 'dis2.y2 < 24.0' ]) self.driver.cons_is_linear = [1, 1] self.driver.iprint = 0 self.driver.itmax = 30 self.driver.fdch = .001 self.driver.fdchm = .001 self.driver.delfun = .0001 self.driver.dabfun = .000001 self.driver.ctlmin = 0.0001
def __init__(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" super(SellarMDF, self).__init__() # create Optimizer instance self.add('driver', CONMINdriver()) # Outer Loop - Global Optimization self.add('solver', FixedPointIterator()) self.driver.workflow.add(['solver']) # Inner Loop - Full Multidisciplinary Solve via fixed point iteration self.add('dis1', sellar.Discipline1()) self.add('dis2', sellar.Discipline2()) self.solver.workflow.add(['dis1', 'dis2']) # Add Parameters to optimizer self.driver.add_parameter(('dis1.z1','dis2.z1'), low = -10.0, high = 10.0) self.driver.add_parameter(('dis1.z2','dis2.z2'), low = 0.0, high = 10.0) self.driver.add_parameter('dis1.x1', low = 0.0, high = 10.0) # Make all connections self.connect('dis1.y1','dis2.y1') # Iteration loop self.solver.add_parameter('dis1.y2', low=-9.e99, high=9.e99) self.solver.add_constraint('dis2.y2 = dis1.y2') # equivilent form # self.solver.add_constraint('dis2.y2 - dis1.y2 = 0') #Driver settings self.solver.max_iteration = 1000 self.solver.tolerance = .0001 # Optimization parameters self.driver.add_objective('(dis1.x1)**2 + dis1.z2 + dis1.y1 + math.exp(-dis2.y2)') self.driver.add_constraint('3.16 < dis1.y1') self.driver.add_constraint('dis2.y2 < 24.0') self.driver.cons_is_linear = [1, 1] self.driver.iprint = 0 self.driver.itmax = 30 self.driver.fdch = .001 self.driver.fdchm = .001 self.driver.delfun = .0001 self.driver.dabfun = .000001 self.driver.ctlmin = 0.0001
def configure(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" # pylint: disable-msg=E1101 # create Optimizer instance self.add('driver', SLSQPdriver()) #Outer Loop - Global Optimization self.add('solver', BroydenSolver()) self.driver.workflow.add(['solver']) # Inner Loop - Full Multidisciplinary Solve via fixed point iteration self.add('dis1', sellar.Discipline1()) self.add('dis2', sellar.Discipline2()) self.solver.workflow.add(['dis1', 'dis2']) # Add Parameters to optimizer self.driver.add_parameter(('dis1.z1', 'dis2.z1'), low=-10.0, high=10.0) self.driver.add_parameter(('dis1.z2', 'dis2.z2'), low=0.0, high=10.0) self.driver.add_parameter('dis1.x1', low=0.0, high=10.0) # Make all connections self.connect('dis1.y1', 'dis2.y1') # Solver Iteration loop self.solver.add_parameter('dis1.y2') self.solver.add_constraint('dis2.y2 = dis1.y2') # equivilent form # self.solver.add_constraint('dis2.y2 - dis1.y2 = 0') #Driver Settings self.solver.itmax = 10 self.solver.alpha = .4 self.solver.tol = .0000001 self.solver.algorithm = "broyden2" # Optimization parameters self.driver.add_objective( '(dis1.x1)**2 + dis1.z2 + dis1.y1 + math.exp(-dis2.y2)') self.driver.add_constraint('3.16 < dis1.y1') self.driver.add_constraint('dis2.y2 < 24.0') self.driver.iprint = 0
def configure(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" # Disciplines self.add('dis1', sellar.Discipline1()) self.add('dis2', sellar.Discipline2()) objective = '(dis1.x1)**2 + dis1.z2 + dis1.y1 + exp(-dis2.y2)' constraint1 = 'dis1.y1 > 3.16' constraint2 = 'dis2.y2 < 24.0' # Top level is Fixed-Point Iteration self.add('driver', FixedPointIterator())
def __init__(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" super(SellarIDF, self).__init__() # create Optimizer instance self.add('driver', CONMINdriver()) # Disciplines self.add('dis1', sellar.Discipline1()) self.add('dis2', sellar.Discipline2()) # Driver process definition self.driver.workflow.add(['dis1', 'dis2']) # Optimization parameters self.driver.add_objective( '(dis1.x1)**2 + dis1.z2 + dis1.y1 + math.exp(-dis2.y2)') #Global Design Variables self.driver.add_parameter(('dis1.z1', 'dis2.z1'), low=-10.0, high=10.0) self.driver.add_parameter(('dis1.z2', 'dis2.z2'), low=0.0, high=10.0) #Local Design Variables and Coupling Variables self.driver.add_parameter('dis1.x1', low=0.0, high=10.0) self.driver.add_parameter('dis2.y1', low=3.16, high=10.0) self.driver.add_parameter('dis1.y2', low=-10.0, high=24.0) self.driver.add_constraint('(dis2.y1-dis1.y1)**3 <= 0') self.driver.add_constraint('(dis1.y1-dis2.y1)**3 <= 0') self.driver.add_constraint('(dis2.y2-dis1.y2)**3 <= 0') self.driver.add_constraint('(dis1.y2-dis2.y2)**3 <= 0') self.driver.iprint = 0 self.driver.itmax = 100 self.driver.fdch = .003 self.driver.fdchm = .003 self.driver.delfun = .0001 self.driver.dabfun = .00001 self.driver.ct = -.01 self.driver.ctlmin = 0.001
def configure(self): self.add("driver", DOEdriver()) self.recorders = [ListCaseRecorder()] self.driver.DOEgenerator = FullFactorial() # configure the specific DOE options self.driver.DOEgenerator.num_levels = 3 self.add("dis1", sellar.Discipline1()) self.add("dis2", sellar.Discipline2()) # setting some variables to fixed values self.dis1.y2 = 3.15 self.dis2.y1 = 3.78 # adding three parameters to the DOEDriver self.driver.add_parameter(("dis1.z1", "dis2.z1"), low=-10.0, high=10.0) self.driver.add_parameter(("dis1.z2", "dis2.z2"), low=0.0, high=10.0) self.driver.add_parameter("dis1.x1", low=0.0, high=10.0)
def configure(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" # create Optimizer instance self.add('driver', SLSQPdriver()) # Disciplines self.add('dis1', sellar.Discipline1()) self.add('dis2', sellar.Discipline2()) # Driver process definition self.driver.workflow.add(['dis1', 'dis2']) # Optimization parameters self.driver.add_objective( '(dis1.x1)**2 + dis1.z2 + dis1.y1 + math.exp(-dis2.y2)') #Global Design Variables self.driver.add_parameter(('dis1.z1', 'dis2.z1'), low=-10.0, high=10.0) self.driver.add_parameter(('dis1.z2', 'dis2.z2'), low=0.0, high=10.0) #Local Design Variables and Coupling Variables self.driver.add_parameter('dis1.x1', low=0.0, high=10.0) self.driver.add_parameter('dis2.y1', low=-1e99, high=1e99) self.driver.add_parameter('dis1.y2', low=-1e99, high=1e99) self.driver.add_constraint('3.16 < dis1.y1') self.driver.add_constraint('dis2.y2 < 24.0') self.driver.add_constraint('(dis2.y1-dis1.y1)**2 <= 0') self.driver.add_constraint('(dis2.y2-dis1.y2)**2 <= 0') self.driver.iprint = 0
def configure(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" # Sub assembly sub = self.add('sub', Assembly()) # Inner Loop - Full Multidisciplinary Solve via fixed point iteration sub.add('driver', FixedPointIterator()) sub.add('dis1', sellar.Discipline1()) sub.add('dis2', sellar.Discipline2()) sub.driver.workflow.add(['dis1', 'dis2']) # Make all connections sub.connect('dis1.y1', 'dis2.y1') sub.connect('dis1.z1', 'dis2.z1') # Iteration loop sub.driver.add_parameter('dis1.y2') sub.driver.add_constraint('dis2.y2 = dis1.y2') # Solver settings sub.driver.max_iteration = 100 sub.driver.tolerance = .00001 sub.driver.print_convergence = False # Subassy boundaries sub.add('globals', VarTree(Globals(), iotype='in')) sub.add('states', VarTree(States(), iotype='out')) sub.connect('globals.z1', 'dis1.z1') # Note, dis1.z2 is connected by input-input conn sub.connect('globals.z2', 'dis1.z2') sub.connect('globals.z2', 'dis2.z2') sub.create_passthrough('dis1.x1') sub.connect('dis1.y1', 'states.y[0]') sub.connect('dis2.y2', 'states.y[1]') # Global Optimization self.add('driver', SLSQPdriver()) self.driver.gradient_options.force_fd = True #self.driver.iprint = 3 # Extra comp self.add('half', Half()) self.connect('half.z2b', 'sub.globals.z2') self.driver.workflow.add(['half', 'sub']) # Add Parameters to optimizer self.driver.add_parameter('sub.globals.z1', low=-10.0, high=10.0) self.driver.add_parameter('half.z2a', low=0.0, high=10.0) self.driver.add_parameter('sub.x1', low=0.0, high=10.0) # Optimization parameters self.driver.add_objective( '(sub.x1)**2 + sub.globals.z2 + sub.states.y[0] + math.exp(-sub.states.y[1])' ) self.driver.add_constraint('3.16 < sub.states.y[0]') self.driver.add_constraint('sub.states.y[1] < 24.0') self.sub.globals.z1 = 5.0 self.half.z2a = 2.0 self.sub.x1 = 1.0
def configure(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" # Global Optimization self.add('driver', SLSQPdriver()) self.add('localopt1', SLSQPdriver()) self.add('localopt2', SLSQPdriver()) self.driver.workflow.add(['localopt1', 'localopt2']) # Local Optimization 1 self.add('dis1', sellar.Discipline1()) self.localopt1.workflow.add('dis1') # Local Optimization 2 self.add('dis2a', SellarDiscipline2a()) self.add('dis2b', SellarDiscipline2b()) self.add('dis2c', SellarDiscipline2c()) self.connect('dis2a.temp1', 'dis2b.temp1') self.connect('dis2b.temp2', 'dis2c.temp2') self.localopt2.workflow.add(['dis2a', 'dis2b', 'dis2c']) #Parameters - Global Optimization # using group parameters to 'broadcast' same data self.driver.add_objective('x1**2 + z2 + y1 + math.exp(-y2)') for param, low, high in zip(['z1', 'z2', 'x1', 'y1', 'y2'], [-10.0, 0.0, 0.0, 3.16, -10.0], [10.0, 10.0, 10.0, 10, 24.0]): self.driver.add_parameter(param, low=low, high=high) map(self.driver.add_constraint, [ '(z1-dis1.z1)**2 + (z2-dis1.z2)**2 + (x1-dis1.x1)**2 + ' '(y1-dis1.y1)**2 + (y2-dis1.y2)**2 < 0', '(z1-dis2b.z1)**2 + (z2-dis2c.z2)**2 + (y1-dis2a.y1)**2 + ' '(y2-dis2c.y2)**2 < 0']) self.driver.iprint = 0 self.driver.itmax = 100 self.driver.fdch = .003 self.driver.fdchm = .003 self.driver.delfun = .0001 self.driver.dabfun = .00001 self.driver.ct = -.0008 self.driver.ctlmin = 0.0008 #Parameters - Local Optimization 1 self.localopt1.add_objective('(z1-dis1.z1)**2 + ' '(z2-dis1.z2)**2 + ' '(x1-dis1.x1)**2 + ' '(y1-dis1.y1)**2 + ' '(y2-dis1.y2)**2') for param, low, high in zip(['dis1.z1', 'dis1.z2', 'dis1.x1', 'dis1.y2'], [-10.0, 0.0, 0.0, -10.0], [10.0, 10.0, 10.0, 24.0]): self.localopt1.add_parameter(param, low=low, high=high) self.localopt1.iprint = 0 self.localopt1.itmax = 100 self.localopt1.fdch = .003 self.localopt1.fdchm = .003 self.localopt1.delfun = .0001 self.localopt1.dabfun = .000001 #Parameters - Local Optimization 2 self.localopt2.add_objective('(z1-dis2b.z1)**2 + ' '(z2-dis2c.z2)**2 + ' '(y1-dis2a.y1)**2 + ' '(y2-dis2c.y2)**2') for param, low, high in zip(['dis2b.z1', 'dis2c.z2', 'dis2a.y1'], [-10.0, 0.0, 3.16], [10.0, 10.0, 10]): self.localopt2.add_parameter(param, low=low, high=high) self.localopt2.iprint = 0 self.localopt2.itmax = 100 self.localopt2.fdch = .003 self.localopt2.fdchm = .003 self.localopt2.delfun = .001 self.localopt2.dabfun = .00001
def configure(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" # Disciplines self.add('dis1', sellar.Discipline1()) self.add('dis2', sellar.Discipline2()) objective = '(dis1.x1)**2 + dis1.z2 + dis1.y1 + exp(-dis2.y2)' constraint1 = 'dis1.y1 > 3.16' constraint2 = 'dis2.y2 < 24.0' # Top level is Fixed-Point Iteration self.add('driver', FixedPointIterator()) self.driver.add_parameter('dis1.x1', low=0.0, high=10.0, start=1.0) self.driver.add_parameter(['dis1.z1', 'dis2.z1'], low=-10.0, high=10.0, start=5.0) self.driver.add_parameter(['dis1.z2', 'dis2.z2'], low=0.0, high=10.0, start=2.0) self.driver.add_constraint('x1_store = dis1.x1') self.driver.add_constraint('z_store[0] = dis1.z1') self.driver.add_constraint('z_store[1] = dis1.z2') self.driver.max_iteration = 50 self.driver.tolerance = .001 # Multidisciplinary Analysis self.add('mda', BroydenSolver()) self.mda.add_parameter('dis1.y2', low=-9.e99, high=9.e99, start=0.0) self.mda.add_constraint('dis2.y2 = dis1.y2') self.mda.add_parameter('dis2.y1', low=-9.e99, high=9.e99, start=3.16) self.mda.add_constraint('dis2.y1 = dis1.y1') # Discipline 1 Sensitivity Analysis self.add('sa_dis1', SensitivityDriver()) self.sa_dis1.workflow.add(['dis1']) self.sa_dis1.add_parameter('dis1.x1', low=0.0, high=10.0, fd_step=.001) self.sa_dis1.add_constraint(constraint1) self.sa_dis1.add_constraint(constraint2) self.sa_dis1.add_objective(objective, name='obj') # Discipline 2 Sensitivity Analysis # dis2 has no local parameter, so there is no need to treat it as # a subsystem. # System Level Sensitivity Analysis # Note, we cheat here and run an MDA instead of solving the # GSE equations. Have to put this on the TODO list. self.add('ssa', SensitivityDriver()) self.ssa.workflow.add(['mda']) self.ssa.add_parameter(['dis1.z1', 'dis2.z1'], low=-10.0, high=10.0) self.ssa.add_parameter(['dis1.z2', 'dis2.z2'], low=0.0, high=10.0) self.ssa.add_constraint(constraint1) self.ssa.add_constraint(constraint2) self.ssa.add_objective(objective, name='obj') # Discipline Optimization # (Only discipline1 has an optimization input) self.add('bbopt1', CONMINdriver()) self.bbopt1.add_parameter('x1_store', low=0.0, high=10.0, start=1.0) self.bbopt1.add_objective( 'sa_dis1.F[0] + sa_dis1.dF[0][0]*(x1_store-dis1.x1)') self.bbopt1.add_constraint( 'sa_dis1.G[0] + sa_dis1.dG[0][0]*(x1_store-dis1.x1) < 0') #this one is technically unncessary self.bbopt1.add_constraint( 'sa_dis1.G[1] + sa_dis1.dG[1][0]*(x1_store-dis1.x1) < 0') self.bbopt1.add_constraint('(x1_store-dis1.x1)<.5') self.bbopt1.add_constraint('(x1_store-dis1.x1)>-.5') self.bbopt1.iprint = 0 self.bbopt1.linobj = True # Global Optimization self.add('sysopt', CONMINdriver()) self.sysopt.add_parameter('z_store[0]', low=-10.0, high=10.0, start=5.0) self.sysopt.add_parameter('z_store[1]', low=0.0, high=10.0, start=2.0) self.sysopt.add_objective( 'ssa.F[0]+ ssa.dF[0][0]*(z_store[0]-dis1.z1) + ssa.dF[0][1]*(z_store[1]-dis1.z2)' ) self.sysopt.add_constraint( 'ssa.G[0] + ssa.dG[0][0]*(z_store[0]-dis1.z1) + ssa.dG[0][1]*(z_store[1]-dis1.z2) < 0' ) self.sysopt.add_constraint( 'ssa.G[1] + ssa.dG[1][0]*(z_store[0]-dis1.z1) + ssa.dG[1][1]*(z_store[1]-dis1.z2) < 0' ) self.sysopt.add_constraint('z_store[0]-dis1.z1<.5') self.sysopt.add_constraint('z_store[0]-dis1.z1>-.5') self.sysopt.add_constraint('z_store[1]-dis1.z2<.5') self.sysopt.add_constraint('z_store[1]-dis1.z2>-.5') self.sysopt.iprint = 0 self.sysopt.linobj = True self.driver.workflow.add(['ssa', 'sa_dis1', 'bbopt1', 'sysopt'])
def configure(self): """ Creates a new Assembly with this problem Optimal Design at (1.9776, 0, 0) Optimal Objective = 3.18339""" # Global Optimization self.add('driver', SLSQPdriver()) self.add('localopt1', SLSQPdriver()) self.add('localopt2', SLSQPdriver()) self.driver.workflow.add(['localopt2', 'localopt1']) # Local Optimization 1 self.add('dis1', sellar.Discipline1()) # Local Optimization 2 self.add('dis2', sellar.Discipline2()) #Parameters - Global Optimization self.driver.add_objective('(local_des_var_targets[0])**2 + ' 'global_des_var_targets[1] + ' 'coupling_var_targets[0] + ' 'math.exp(-coupling_var_targets[1])') self.driver.add_parameter('global_des_var_targets[0]', low=-10.0, high=10.0) self.driver.add_parameter('global_des_var_targets[1]', low=0.0, high=10.0) self.driver.add_parameter('local_des_var_targets[0]', low=0.0, high=10.0) self.driver.add_parameter('coupling_var_targets[0]', low=3.16, high=10.0) self.driver.add_parameter('coupling_var_targets[1]', low=-10.0, high=24.0) con1 = '(global_des_var_targets[0] - dis1.z1)**2 + ' \ '(global_des_var_targets[1] - dis1.z2)**2 + ' \ '(local_des_var_targets[0] - dis1.x1)**2 + ' \ '(coupling_var_targets[0] - dis1.y1)**2 + ' \ '(coupling_var_targets[1] - dis1.y2)**2 <= 0' con2 = '(global_des_var_targets[0] - dis2.z1)**2 + ' \ '(global_des_var_targets[1] - dis2.z2)**2 + ' \ '(coupling_var_targets[0] - dis2.y1)**2 + ' \ '(coupling_var_targets[1] - dis2.y2)**2 <= 0' self.driver.add_constraint(con1) self.driver.add_constraint(con2) self.driver.iprint = 0 #Parameters - Local Optimization 1 self.localopt1.add_objective( '(global_des_var_targets[0] - dis1.z1)**2 + ' '(global_des_var_targets[1] - dis1.z2)**2 + ' '(local_des_var_targets[0] - dis1.x1)**2 + ' '(coupling_var_targets[0] - dis1.y1)**2 + ' '(coupling_var_targets[1] - dis1.y2)**2') self.localopt1.add_parameter('dis1.x1', low=0.0, high=10.0) self.localopt1.add_parameter('dis1.z1', low=-10.0, high=10.0) self.localopt1.add_parameter('dis1.z2', low=0.0, high=10.0) self.localopt1.add_parameter('dis1.y2', low=-1e99, high=1e99) self.localopt1.add_constraint('dis1.y1 > 3.16') self.localopt1.iprint = 0 self.localopt1.accuracy = 1e-12 #Parameters - Local Optimization 2 self.localopt2.add_objective('(global_des_var_targets[0] - dis2.z1)**2 + ' \ '(global_des_var_targets[1] - dis2.z2)**2 + ' \ '(coupling_var_targets[0] - dis2.y1)**2 + ' \ '(coupling_var_targets[1] - dis2.y2)**2') self.localopt2.add_parameter('dis2.z1', low=-10.0, high=10.0) self.localopt2.add_parameter('dis2.z2', low=0.0, high=10.0) self.localopt2.add_parameter('dis2.y1', low=-1e99, high=1e99) self.localopt2.add_constraint('dis2.y2 < 24.0') self.localopt2.iprint = 0 self.localopt2.accuracy = 1e-12
def configure(self): # Global Optimization self.add('driver', SLSQPdriver()) self.add('localopt1', SLSQPdriver()) self.add('localopt2', SLSQPdriver()) self.driver.workflow.add(['localopt1', 'localopt2']) # Local Optimization 1 self.add('dis1', sellar.Discipline1()) self.localopt1.workflow.add(['dis1']) # Local Optimization 2 self.add('dis2', sellar.Discipline2()) self.localopt2.workflow.add(['dis2']) # Parameters - Global Optimization self.driver.add_objective( '(local_des_var_targets[0])**2 + global_des_var_targets[1] + coupling_var_targets[0] + math.exp(-coupling_var_targets[1])' ) self.driver.add_parameter('global_des_var_targets[0]', low=-10.0, high=10.0) self.driver.add_parameter('global_des_var_targets[1]', low=0.0, high=10.0) self.driver.add_parameter('coupling_var_targets[0]', low=-1e99, high=1e99) self.driver.add_parameter('coupling_var_targets[1]', low=-1e99, high=1e99) self.driver.add_parameter('local_des_var_targets[0]', low=0.0, high=10.0) con1 = '(local_des_var_targets[0]-dis1.x1)**2+' + \ '(global_des_var_targets[0]-dis1.z1)**2+' + \ '(global_des_var_targets[1]-dis1.z2)**2+' + \ '(coupling_var_targets[1]-dis1.y2)**2+' + \ '(coupling_var_targets[0]-dis1.y1)**2<=.001' con2 = '(global_des_var_targets[0]-dis2.z1)**2 +' + \ '(global_des_var_targets[1]-dis2.z2)**2 +' + \ '(coupling_var_targets[0]-dis2.y1)**2 +' + \ '(coupling_var_targets[1]-dis2.y2)**2 <= .001' self.driver.add_constraint(con1) self.driver.add_constraint(con2) self.driver.printvars = ['dis1.y1', 'dis2.y2'] self.driver.iprint = 1 # Parameters - Local Optimization 1 self.localopt1.add_objective('(local_des_var_targets[0]-dis1.x1)**2+' '(global_des_var_targets[0]-dis1.z1)**2+' '(global_des_var_targets[1]-dis1.z2)**2+' '(coupling_var_targets[1]-dis1.y2)**2+' '(coupling_var_targets[0]-dis1.y1)**2') self.localopt1.add_parameter('dis1.x1', low=0.0, high=10.0) self.localopt1.add_parameter('dis1.z1', low=-10.0, high=10.0) self.localopt1.add_parameter('dis1.z2', low=0.0, high=10.0) self.localopt1.add_parameter('dis1.y2', low=-1e99, high=1e99) self.localopt1.add_constraint('3.16 < dis1.y1') self.localopt1.iprint = 1 # Parameters - Local Optimization 2 self.localopt2.add_objective( '(global_des_var_targets[0]-dis2.z1)**2 + ' + '(global_des_var_targets[1]-dis2.z2)**2 + ' + '(coupling_var_targets[0]-dis2.y1)**2 + ' + '(coupling_var_targets[1]-dis2.y2)**2') self.localopt2.add_parameter('dis2.z1', low=-10.0, high=10.0) self.localopt2.add_parameter('dis2.z2', low=0.0, high=10.0) self.localopt2.add_parameter('dis2.y1', low=-1e99, high=1e99) self.localopt2.add_constraint('dis2.y2 < 24.0') self.localopt2.iprint = 1