Ejemplo n.º 1
0
   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)
Ejemplo n.º 2
0
   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)
Ejemplo n.º 4
0
                                        "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()

    
Ejemplo n.º 5
0
                        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