def test_option_parallel(self): import openmdao.api as om from openmdao.test_suite.components.branin import Branin prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('xC', 7.5)) model.add_subsystem('p2', om.IndepVarComp('xI', 0.0)) model.add_subsystem('comp', Branin()) model.connect('p2.xI', 'comp.x0') model.connect('p1.xC', 'comp.x1') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.SimpleGADriver() prob.driver.options['bits'] = {'p1.xC': 8} prob.driver.options['max_gen'] = 10 prob.driver.options['run_parallel'] = True prob.setup() prob.run_driver() # Optimal solution print('comp.f', prob['comp.f']) print('p2.xI', prob['p2.xI']) print('p1.xC', prob['p1.xC'])
def test_option_parallel(self): prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('xC', 7.5)) model.add_subsystem('p2', om.IndepVarComp('xI', 0.0)) model.add_subsystem('comp', Branin()) model.connect('p2.xI', 'comp.x0') model.connect('p1.xC', 'comp.x1') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.DifferentialEvolutionDriver() prob.driver.options['max_gen'] = 10 prob.driver.options['run_parallel'] = True prob.setup() prob.run_driver() # Optimal solution if extra_prints: print('comp.f', prob['comp.f']) print('p2.xI', prob['p2.xI']) print('p1.xC', prob['p1.xC'])
def test_basic_with_assert(self): from openmdao.api import Problem, Group, IndepVarComp, SimpleGADriver from openmdao.test_suite.components.branin import Branin prob = Problem() model = prob.model = Group() model.add_subsystem('p1', IndepVarComp('xC', 7.5)) model.add_subsystem('p2', IndepVarComp('xI', 0.0)) model.add_subsystem('comp', Branin()) model.connect('p2.xI', 'comp.x0') model.connect('p1.xC', 'comp.x1') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = SimpleGADriver() prob.driver.options['bits'] = {'p1.xC': 8} prob.driver._randomstate = 1 prob.setup() prob.run_driver() # Optimal solution assert_rel_error(self, prob['comp.f'], 0.49399549, 1e-4)
def test_mixed_integer_branin(self): np.random.seed(1) prob = Problem() model = prob.model = Group() model.add_subsystem('p1', IndepVarComp('xC', 7.5)) model.add_subsystem('p2', IndepVarComp('xI', 0.0)) model.add_subsystem('comp', Branin()) model.connect('p2.xI', 'comp.x0') model.connect('p1.xC', 'comp.x1') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = SimpleGADriver(max_gen=75, pop_size=25) prob.driver.options['bits'] = {'p1.xC': 8} prob.driver._randomstate = 1 prob.setup(check=False) prob.run_driver() # Optimal solution assert_rel_error(self, prob['comp.f'], 0.49398, 1e-4) self.assertTrue(int(prob['p2.xI']) in [3, -3])
def test_option_parallel(self): prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('xC', 7.5)) model.add_subsystem('p2', om.IndepVarComp('xI', 0.0)) model.add_subsystem('comp', Branin()) model.connect('p2.xI', 'comp.x0') model.connect('p1.xC', 'comp.x1') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') cma_es = CMAES() cma_es.options['verbose'] = -9 # silence output prob.driver = GenericDriver(algorithm=cma_es) prob.driver.options['run_parallel'] = True prob.setup() prob.run_driver() # Optimal solution if extra_prints: print('comp.f', prob['comp.f']) print('p2.xI', prob['p2.xI']) print('p1.xC', prob['p1.xC'])
def test_option_pop_size(self): from openmdao.api import Problem, Group, IndepVarComp, SimpleGADriver from openmdao.test_suite.components.branin import Branin prob = Problem() model = prob.model = Group() model.add_subsystem('p1', IndepVarComp('xC', 7.5)) model.add_subsystem('p2', IndepVarComp('xI', 0.0)) model.add_subsystem('comp', Branin()) model.connect('p2.xI', 'comp.x0') model.connect('p1.xC', 'comp.x1') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = SimpleGADriver() prob.driver.options['bits'] = {'p1.xC': 8} prob.driver.options['pop_size'] = 10 prob.setup() prob.run_driver() # Optimal solution print('comp.f', prob['comp.f']) print('p2.xI', prob['p2.xI']) print('p1.xC', prob['p1.xC'])
def test_mixed_integer_branin(self): prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('xC', 7.5)) model.add_subsystem('p2', om.IndepVarComp('xI', 0.0)) model.add_subsystem('comp', Branin()) model.connect('p2.xI', 'comp.x0') model.connect('p1.xC', 'comp.x1') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.SimpleGADriver() prob.driver.options['bits'] = {'p1.xC': 8} prob.driver.options['max_gen'] = 50 prob.driver.options['pop_size'] = 25 prob.driver.options['run_parallel'] = True prob.driver._randomstate = 1 prob.setup() prob.run_driver() # Optimal solution assert_rel_error(self, prob['comp.f'], 0.49398, 1e-4) self.assertTrue(int(prob['p2.xI']) in [3, -3])
def test_option_procs_per_model(self): prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('xC', 2.5)) model.add_subsystem('p2', om.IndepVarComp('xI', 3.0)) par = model.add_subsystem('par', om.ParallelGroup()) par.add_subsystem('comp1', Branin()) par.add_subsystem('comp2', Branin()) model.connect('p2.xI', 'par.comp1.x0') model.connect('p1.xC', 'par.comp1.x1') model.connect('p2.xI', 'par.comp2.x0') model.connect('p1.xC', 'par.comp2.x1') model.add_subsystem('comp', om.ExecComp('f = f1 + f2')) model.connect('par.comp1.f', 'comp.f1') model.connect('par.comp2.f', 'comp.f2') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') cma_es = CMAES() cma_es.options['popsize'] = 25 cma_es.options['verbose'] = -9 # silence output prob.driver = GenericDriver(algorithm=cma_es) prob.driver.options['run_parallel'] = True prob.driver.options['procs_per_model'] = 2 prob.setup() prob.run_driver() # Optimal solution from DifferentialEvolutionDriver: # comp.f [0.80220303] # p2.xI [3.11628575] # p1.xC [2.28300608] if extra_prints: print('comp.f', prob.get_val('comp.f')) print('p2.xI', prob.get_val('p2.xI')) print('p1.xC', prob.get_val('p1.xC'))
def test_option_procs_per_model(self): import openmdao.api as om from openmdao.test_suite.components.branin import Branin prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('xC', 7.5)) model.add_subsystem('p2', om.IndepVarComp('xI', 0.0)) par = model.add_subsystem('par', om.ParallelGroup()) par.add_subsystem('comp1', Branin()) par.add_subsystem('comp2', Branin()) model.connect('p2.xI', 'par.comp1.x0') model.connect('p1.xC', 'par.comp1.x1') model.connect('p2.xI', 'par.comp2.x0') model.connect('p1.xC', 'par.comp2.x1') model.add_subsystem('comp', om.ExecComp('f = f1 + f2')) model.connect('par.comp1.f', 'comp.f1') model.connect('par.comp2.f', 'comp.f2') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.SimpleGADriver() prob.driver.options['bits'] = {'p1.xC': 8} prob.driver.options['max_gen'] = 10 prob.driver.options['pop_size'] = 25 prob.driver.options['run_parallel'] = True prob.driver.options['procs_per_model'] = 2 prob.driver._randomstate = 1 prob.setup() prob.run_driver() # Optimal solution if extra_prints: print('comp.f', prob['comp.f']) print('p2.xI', prob['p2.xI']) print('p1.xC', prob['p1.xC'])
def test_two_branin_parallel_model(self): prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('xC', 7.5)) model.add_subsystem('p2', om.IndepVarComp('xI', 0.0)) par = model.add_subsystem('par', om.ParallelGroup()) par.add_subsystem('comp1', Branin()) par.add_subsystem('comp2', Branin()) model.connect('p2.xI', 'par.comp1.x0') model.connect('p1.xC', 'par.comp1.x1') model.connect('p2.xI', 'par.comp2.x0') model.connect('p1.xC', 'par.comp2.x1') model.add_subsystem('comp', om.ExecComp('f = f1 + f2')) model.connect('par.comp1.f', 'comp.f1') model.connect('par.comp2.f', 'comp.f2') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.SimpleGADriver() prob.driver.options['bits'] = {'p1.xC': 8} prob.driver.options['max_gen'] = 40 prob.driver.options['pop_size'] = 25 prob.driver.options['run_parallel'] = False prob.driver.options['procs_per_model'] = 2 prob.driver._randomstate = 1 prob.setup() prob.run_driver() if extra_prints: print('comp.f', prob['comp.f']) print('p2.xI', prob['p2.xI']) # Optimal solution assert_rel_error(self, prob['comp.f'], 0.98799098, 1e-4) self.assertTrue(int(prob['p2.xI']) in [3, -3])
def test_option_procs_per_model(self): prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('xC', 7.5)) model.add_subsystem('p2', om.IndepVarComp('xI', 0.0)) par = model.add_subsystem('par', om.ParallelGroup()) par.add_subsystem('comp1', Branin()) par.add_subsystem('comp2', Branin()) model.connect('p2.xI', 'par.comp1.x0') model.connect('p1.xC', 'par.comp1.x1') model.connect('p2.xI', 'par.comp2.x0') model.connect('p1.xC', 'par.comp2.x1') model.add_subsystem('comp', om.ExecComp('f = f1 + f2')) model.connect('par.comp1.f', 'comp.f1') model.connect('par.comp2.f', 'comp.f2') model.add_design_var('p2.xI', lower=-5.0, upper=10.0) model.add_design_var('p1.xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = GenericDriver( algorithm=DifferentialEvolution(max_gen=10, pop_size=25)) # prob.driver.options['max_gen'] = 10 # prob.driver.options['pop_size'] = 25 prob.driver.options['run_parallel'] = True prob.driver.options['procs_per_model'] = 2 prob.setup() prob.run_driver() # Optimal solution if extra_prints: print('comp.f', prob['comp.f']) print('p2.xI', prob['p2.xI']) print('p1.xC', prob['p1.xC'])
def test_basic(self): prob = om.Problem() model = prob.model model.add_subsystem('comp', Branin(), promotes_inputs=[('x0', 'xI'), ('x1', 'xC')]) model.add_design_var('xI', lower=-5.0, upper=10.0) model.add_design_var('xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.DifferentialEvolutionDriver() prob.setup() prob.run_driver()
def test_basic(self): prob = om.Problem() model = prob.model model.add_subsystem('comp', Branin(), promotes_inputs=[('x0', 'xI'), ('x1', 'xC')]) model.add_design_var('xI', lower=-5.0, upper=10.0) model.add_design_var('xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = CMAESDriver() prob.driver.CMAOptions['verbose'] = -9 # silence output prob.setup() prob.run_driver()
def test_basic_with_assert(self): prob = om.Problem() model = prob.model model.add_subsystem('comp', Branin(), promotes_inputs=[('x0', 'xI'), ('x1', 'xC')]) model.add_design_var('xI', lower=-5.0, upper=10.0) model.add_design_var('xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.DifferentialEvolutionDriver() prob.setup() prob.run_driver() # Optimal solution (actual optimum, not the optimal with integer inputs as found by SimpleGA) assert_near_equal(prob['comp.f'], 0.397887, 1e-4)
def test_random_state_bug(self): # this test passes if it raises no exceptions prob = om.Problem() model = prob.model model.add_subsystem('comp', Branin(), promotes_inputs=[('x0', 'xI'), ('x1', 'xC')]) model.add_design_var('xI', lower=-5.0, upper=10.0) model.add_design_var('xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.DifferentialEvolutionDriver() prob.driver.options['max_gen'] = 5 prob.driver.options['run_parallel'] = True prob.setup() prob.run_driver()
def test_option_pop_size(self): import openmdao.api as om from openmdao.test_suite.components.branin import Branin prob = om.Problem() model = prob.model model.add_subsystem('comp', Branin(), promotes_inputs=[('x0', 'xI'), ('x1', 'xC')]) model.add_design_var('xI', lower=-5.0, upper=10.0) model.add_design_var('xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = om.DifferentialEvolutionDriver() prob.driver.options['pop_size'] = 10 prob.setup() prob.run_driver()
def test_option_max_gen(self): import openmdao.api as om from openmdao.test_suite.components.branin import Branin prob = om.Problem() model = prob.model model.add_subsystem('comp', Branin(), promotes_inputs=[('x0', 'xI'), ('x1', 'xC')]) model.add_design_var('xI', lower=-5.0, upper=10.0) model.add_design_var('xC', lower=0.0, upper=15.0) model.add_objective('comp.f') prob.driver = GenericDriver(algorithm=DifferentialEvolution(max_gen=5)) # prob.driver.options['max_gen'] = 5 prob.setup() prob.run_driver()
def test_basic_with_assert(self): prob = om.Problem() model = prob.model model.add_subsystem('comp', Branin(), promotes_inputs=[('x0', 'xI'), ('x1', 'xC')]) model.add_design_var('xI', lower=-5.0, upper=10.0) model.add_design_var('xC', lower=0.0, upper=15.0) model.add_objective('comp.f') cma_es = CMAES() cma_es.options['verbose'] = -9 # silence output prob.driver = GenericDriver(algorithm=cma_es) prob.setup() prob.run_driver() # Optimal solution (actual optimum, not the optimal with integer inputs as found by SimpleGA) assert_near_equal(prob['comp.f'], 0.397887, 1e-4)
def test_option_pop_size(self): import openmdao.api as om from openmdao.test_suite.components.branin import Branin prob = om.Problem() model = prob.model model.add_subsystem('comp', Branin(), promotes_inputs=[('x0', 'xI'), ('x1', 'xC')]) model.add_design_var('xI', lower=-5.0, upper=10.0) model.add_design_var('xC', lower=0.0, upper=15.0) model.add_objective('comp.f') cma_es = CMAES() cma_es.options['popsize'] = 10 cma_es.options['verbose'] = -9 # silence output prob.driver = GenericDriver(algorithm=cma_es) prob.setup() prob.run_driver()