def test_multiple_models(self): """ Test running running with two different pysd models Returns ------- """ relative_path_to_file = '../models/Sales_Agent_Market_Building_Dynamics.mdl' directory = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) mdl_file = os.path.join(directory, relative_path_to_file) market_model = PysdModel(mdl_file=mdl_file) market_model.uncertainties = [RealParameter('Startup Subsidy',0, 3), RealParameter('Startup Subsidy Length', 0, 10)] market_model.outcomes = [TimeSeriesOutcome('Still Employed')] relative_path_to_file = '../models/Sales_Agent_Motivation_Dynamics.mdl' directory = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) mdl_file = os.path.join(directory, relative_path_to_file) motivation_model = PysdModel(mdl_file=mdl_file) motivation_model.uncertainties = [RealParameter('Startup Subsidy', 0, 3), RealParameter('Startup Subsidy Length', 0, 10)] motivation_model.outcomes =[TimeSeriesOutcome('Still Employed')] ensemble = ModelEnsemble() # instantiate an ensemble ensemble.model_structures = [market_model, motivation_model] # set the model on the ensemble ensemble.perform_experiments(5)
def test_parallel_experiment(self): """ Test running an experiment in parallel Returns ------- """ relative_path_to_file = '../models/Teacup.mdl' directory = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) mdl_file = os.path.join(directory, relative_path_to_file) model = PysdModel(mdl_file=mdl_file) model.uncertainties = [RealParameter('Room Temperature', 33, 120)] model.outcomes = [TimeSeriesOutcome('Teacup Temperature')] ensemble = ModelEnsemble() # instantiate an ensemble ensemble.model_structures = model # set the model on the ensemble ensemble.parallel = True ensemble.perform_experiments(5)
def test_multiple_models(self): """ Test running running with two different pysd models Returns ------- """ from ema_workbench.connectors import PySDConnector market_model = PySDConnector('../models/Sales_Agent_Market_Building_Dynamics.mdl', uncertainties_dict={'Startup Subsidy': (0, 3), 'Startup Subsidy Length': (0, 10)}, outcomes_list=['Still Employed']) motivation_model = PySDConnector('../models/Sales_Agent_Market_Building_Dynamics.mdl', uncertainties_dict={'Startup Subsidy': (0, 3), 'Startup Subsidy Length': (0, 10)}, outcomes_list=['Still Employed']) ensemble = ModelEnsemble() # instantiate an ensemble ensemble.model_structures = [market_model, motivation_model] # set the model on the ensemble results = ensemble.perform_experiments(cases=20)
"effect of perceived adequacy on energy drain lookup", self, 0, 10), LookupUncertainty('hearne2', [(-2, 2), (-1, 2), (0, 1.5), (0.1, 1.6), (0.5, 1.5), (0.1, 2)], "effect of perceived adequacy of hours worked lookup", self, 0, 2.5), LookupUncertainty('hearne2', [(-1, 1), (-1, 1), (0, 0.9), (0.1, 1), (0.5, 1.5), (1, 1.5)], "effect of energy levels on hours worked lookup", self, 0, 1.5), LookupUncertainty('hearne2', [(-1, 1), (-1, 1), (0, 0.9), (0.1, 1), (0.5, 1.5), (1, 1.5)], "effect of high energy on further recovery lookup", self, 0, 1.25), LookupUncertainty('hearne2', [(-2, 2), (-1, 1), (0, 100), (20, 120), (0.5, 1.5), (0.5, 2)], "effect of hours worked on energy recovery lookup", self, 0, 1.5), LookupUncertainty('approximation', [(-0.5, 0.35), (3, 5), (1, 10), (0.2, 0.4), (0, 120)], "effect of hours worked on energy drain lookup", self, 0, 3), LookupUncertainty('hearne1', [(0, 1), (0, 0.15), (1, 1.5), (0.75, 1.25)], "effect of low energy on further depletion lookup", self, 0, 1)] self._delete_lookup_uncertainties() if __name__ == "__main__": ema_logging.log_to_stderr(ema_logging.INFO) model = Burnout(r'./models/burnout', "burnout") ensemble = ModelEnsemble() ensemble.model_structures = model #run policy with old cases results = ensemble.perform_experiments(100) lines(results, 'Energy Level', density=BOXPLOT) plt.show()
RealParameter("delta", 0.93, 0.99)] #specify outcomes model.outcomes = [ScalarOutcome("max_P",), ScalarOutcome("utility"), ScalarOutcome("inertia"), ScalarOutcome("reliability")] # override some of the defaults of the model model.constants = [Constant('alpha', 0.41), Constant('nsamples', 150),] # set levers, one for each time step model.levers = [RealParameter(str(i), 0, 0.1) for i in range(100)] ensemble = ModelEnsemble() #instantiate an ensemble ensemble.model_structures = model #set the model on the ensemble ensemble.parallel = True ensemble.processes = 1 # generate some random policies by sampling over levers policies, levers, n = samplers.sample_levers(ensemble.model_structures, 4, sampler=samplers.MonteCarloSampler()) # policies is a generator, so let's exhaust the generator policies = [policy for policy in policies] # policy name defaults to a repr(dict), let's rename for i, policy in enumerate(policies): policy.name = str(i) # let's set the policies on the ensemble