def test_multi_surrogate_models(self): model = set_as_top(Assembly()) model.add('meta', MetaModel(params=('x1', 'x2'), responses=('y1', 'y2'))) model.driver.workflow.add('meta') model.meta.warm_restart = True model.meta.params.x1 = [1.0, 3.0] model.meta.params.x2 = [1.0, 4.0] model.meta.responses.y1 = [3.0, 1.0] model.meta.responses.y2 = [1.0, 7.0] model.meta.surrogates['y1'] = KrigingSurrogate() model.meta.surrogates['y2'] = LogisticRegression() model.meta.x1 = 2.0 model.meta.x2 = 3.0 model.meta.run() self.assertTrue(isinstance(model.meta.y1, NormalDistribution)) self.assertTrue(isinstance(model.meta.y2, float)) model.meta.surrogates['y1'] = LogisticRegression() model.meta.surrogates['y2'] = KrigingSurrogate() model.meta.run() self.assertTrue(isinstance(model.meta.y1, float)) self.assertTrue(isinstance(model.meta.y2, NormalDistribution)) model.meta.default_surrogate = KrigingSurrogate() model.meta.surrogates['y1'] = None model.meta.surrogates['y2'] = None model.meta.run() self.assertTrue(isinstance(model.meta.y1, NormalDistribution)) self.assertTrue(isinstance(model.meta.y2, NormalDistribution)) model.meta.surrogates['y1'] = LogisticRegression() model.meta.run() self.assertTrue(isinstance(model.meta.y1, float)) self.assertTrue(isinstance(model.meta.y2, NormalDistribution))
def __init__(self): super(Simulation, self).__init__() #Components self.add("trig_meta_model", MetaModel()) self.trig_meta_model.surrogate = { "f_x_sin": LogisticRegression(), "f_x_cos": KrigingSurrogate() } self.trig_meta_model.model = Trig() self.trig_meta_model.recorder = DBCaseRecorder() #Training the MetaModel self.add("DOE_Trainer", DOEdriver()) self.DOE_Trainer.DOEgenerator = FullFactorial() self.DOE_Trainer.DOEgenerator.num_levels = 20 self.DOE_Trainer.add_parameter("trig_meta_model.x", low=0, high=20) self.DOE_Trainer.case_outputs = [ "trig_meta_model.f_x_sin", "trig_meta_model.f_x_cos" ] self.DOE_Trainer.add_event("trig_meta_model.train_next") self.DOE_Trainer.recorders = [DBCaseRecorder()] self.DOE_Trainer.force_execute = True #MetaModel Validation self.add("trig_calc", Trig()) self.add("DOE_Validate", DOEdriver()) self.DOE_Validate.DOEgenerator = Uniform() self.DOE_Validate.DOEgenerator.num_samples = 20 self.DOE_Validate.add_parameter(("trig_meta_model.x", "trig_calc.x"), low=0, high=20) self.DOE_Validate.case_outputs = [ "trig_calc.f_x_sin", "trig_calc.f_x_cos", "trig_meta_model.f_x_sin", "trig_meta_model.f_x_cos" ] self.DOE_Validate.recorders = [DBCaseRecorder()] self.DOE_Validate.force_execute = True #Iteration Hierarchy self.driver.workflow = SequentialWorkflow() self.driver.workflow.add(['DOE_Trainer', 'DOE_Validate']) self.DOE_Trainer.workflow.add('trig_meta_model') self.DOE_Validate.workflow.add('trig_meta_model') self.DOE_Validate.workflow.add('trig_calc')
def configure(self): # Our component to be meta-modeled self.add("trig_calc", Trig()) # Create meta_model for two responsese self.add("trig_meta_model", MetaModel(params=('x', ), responses=('f_x_sin', 'f_x_cos'))) # Use Kriging for the f_x output self.trig_meta_model.surrogates['f_x_sin'] = LogisticRegression() self.trig_meta_model.surrogates['f_x_cos'] = FloatKrigingSurrogate() # Training the MetaModel self.add("DOE_Trainer", DOEdriver()) self.DOE_Trainer.DOEgenerator = FullFactorial() self.DOE_Trainer.DOEgenerator.num_levels = 20 self.DOE_Trainer.add_parameter("trig_calc.x", low=0, high=20) self.DOE_Trainer.add_response('trig_calc.f_x_sin') self.DOE_Trainer.add_response('trig_calc.f_x_cos') # Pass training data to the meta model. self.connect('DOE_Trainer.case_inputs.trig_calc.x', 'trig_meta_model.params.x') self.connect('DOE_Trainer.case_outputs.trig_calc.f_x_sin', 'trig_meta_model.responses.f_x_sin') self.connect('DOE_Trainer.case_outputs.trig_calc.f_x_cos', 'trig_meta_model.responses.f_x_cos') #MetaModel Validation self.add("DOE_Validate", DOEdriver()) self.DOE_Validate.DOEgenerator = Uniform() self.DOE_Validate.DOEgenerator.num_samples = 20 self.DOE_Validate.add_parameter(("trig_meta_model.x", "trig_calc.x"), low=0, high=20) self.DOE_Validate.add_response("trig_calc.f_x_sin") self.DOE_Validate.add_response("trig_calc.f_x_cos") self.DOE_Validate.add_response("trig_meta_model.f_x_sin") self.DOE_Validate.add_response("trig_meta_model.f_x_cos") #Iteration Hierarchy self.driver.workflow.add(['DOE_Trainer', 'DOE_Validate']) self.DOE_Trainer.workflow.add('trig_calc') self.DOE_Validate.workflow.add(['trig_calc', 'trig_meta_model'])
def configure(self): #Components self.add("trig_meta_model", MetaModel()) self.trig_meta_model.model = Trig() self.trig_meta_model.surrogates['f_x_sin'] = LogisticRegression() self.trig_meta_model.surrogates['f_x_cos'] = FloatKrigingSurrogate() self.trig_meta_model.recorder = DBCaseRecorder() #Training the MetaModel self.add("DOE_Trainer", DOEdriver()) self.DOE_Trainer.DOEgenerator = FullFactorial() self.DOE_Trainer.DOEgenerator.num_levels = 20 self.DOE_Trainer.add_parameter("trig_meta_model.x", low=0, high=20) self.DOE_Trainer.case_outputs = [ "trig_meta_model.f_x_sin", "trig_meta_model.f_x_cos" ] self.DOE_Trainer.add_event("trig_meta_model.train_next") self.DOE_Trainer.recorders = [DBCaseRecorder()] #MetaModel Validation self.add("trig_calc", Trig()) self.add("DOE_Validate", DOEdriver()) self.DOE_Validate.DOEgenerator = Uniform() self.DOE_Validate.DOEgenerator.num_samples = 20 self.DOE_Validate.add_parameter(("trig_meta_model.x", "trig_calc.x"), low=0, high=20) self.DOE_Validate.case_outputs = [ "trig_calc.f_x_sin", "trig_calc.f_x_cos", "trig_meta_model.f_x_sin", "trig_meta_model.f_x_cos" ] self.DOE_Validate.recorders = [DBCaseRecorder()] #Iteration Hierarchy self.driver.workflow = SequentialWorkflow() self.driver.workflow.add(['DOE_Trainer', 'DOE_Validate']) self.DOE_Trainer.workflow.add('trig_meta_model') self.DOE_Validate.workflow.add('trig_meta_model') self.DOE_Validate.workflow.add('trig_calc')