Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 5
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())
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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)
Exemplo n.º 8
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
Exemplo n.º 9
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
Exemplo n.º 10
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
Exemplo n.º 11
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())
        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'])
Exemplo n.º 12
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(['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
Exemplo n.º 13
0
    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