Пример #1
0
    def test_to_robust_problem(self, mocked_platypus):
        mocked_model = Model('test', function=mock.Mock())
        mocked_model.levers = [
            RealParameter('a', 0, 1),
            RealParameter('b', 0, 1)
        ]
        mocked_model.uncertainties = [
            RealParameter('c', 0, 1),
            RealParameter('d', 0, 1)
        ]
        mocked_model.outcomes = [ScalarOutcome('x'), ScalarOutcome('y')]

        scenarios = 5
        robustness_functions = [
            ScalarOutcome('mean x', variable_name='x', function=mock.Mock()),
            ScalarOutcome('mean y', variable_name='y', function=mock.Mock())
        ]

        problem = to_robust_problem(mocked_model, scenarios,
                                    robustness_functions)

        self.assertEqual('robust', problem.searchover)
        for entry in problem.parameters:
            self.assertIn(entry.name, mocked_model.levers.keys())
        self.assertEqual(['a', 'b'], problem.parameter_names)
        self.assertEqual(['mean x', 'mean y'], problem.outcome_names)
Пример #2
0
    def test_to_problem(self, mocked_platypus):
        mocked_model = Model('test', function=mock.Mock())
        mocked_model.levers = [
            RealParameter('a', 0, 1),
            RealParameter('b', 0, 1)
        ]
        mocked_model.uncertainties = [
            RealParameter('c', 0, 1),
            RealParameter('d', 0, 1)
        ]
        mocked_model.outcomes = [ScalarOutcome('x'), ScalarOutcome('y')]
        mocked_model.constraints = []

        searchover = 'levers'
        problem = to_problem(mocked_model, searchover)
        self.assertEqual(searchover, problem.searchover)

        for entry in problem.parameters:
            self.assertIn(entry.name, mocked_model.levers.keys())
            self.assertIn(entry, list(mocked_model.levers))
        for entry in problem.outcome_names:
            self.assertIn(entry.name, mocked_model.outcomes.keys())

        searchover = 'uncertainties'
        problem = to_problem(mocked_model, searchover)

        self.assertEqual(searchover, problem.searchover)
        for entry in problem.parameters:
            self.assertIn(entry.name, mocked_model.uncertainties.keys())
            self.assertIn(entry, list(mocked_model.uncertainties))
        for entry in problem.outcome_names:
            self.assertIn(entry.name, mocked_model.outcomes.keys())
Пример #3
0
    def test_to_problem(self, mocked_platypus):
        mocked_model = Model('test', function=mock.Mock())
        mocked_model.levers = [RealParameter('a', 0, 1),
                               RealParameter('b', 0, 1)]
        mocked_model.uncertainties = [RealParameter('c', 0, 1),
                                      RealParameter('d', 0, 1)]
        mocked_model.outcomes = [ScalarOutcome('x', kind=1),
                                 ScalarOutcome('y', kind=1)]
        
        searchover = 'levers'
        problem = to_problem(mocked_model, searchover)
        self.assertEqual(searchover, problem.searchover)
        
        for entry in problem.parameters:
            self.assertIn(entry.name, mocked_model.levers.keys())
            self.assertIn(entry, list(mocked_model.levers))
        for entry in problem.outcome_names:
            self.assertIn(entry, mocked_model.outcomes.keys())
 
        searchover = 'uncertainties'        
        problem = to_problem(mocked_model, searchover)
         
        self.assertEqual(searchover, problem.searchover)
        for entry in problem.parameters:
            self.assertIn(entry.name, mocked_model.uncertainties.keys())
            self.assertIn(entry, list(mocked_model.uncertainties))
        for entry in problem.outcome_names:
            self.assertIn(entry, mocked_model.outcomes.keys())
Пример #4
0
 def test_to_robust_problem(self, mocked_platypus):
     mocked_model = Model('test', function=mock.Mock())
     mocked_model.levers = [RealParameter('a', 0, 1),
                            RealParameter('b', 0, 1)]
     mocked_model.uncertainties = [RealParameter('c', 0, 1),
                                   RealParameter('d', 0, 1)]
     mocked_model.outcomes = [ScalarOutcome('x'), ScalarOutcome('y')]
     
     scenarios = 5
     robustness_functions = [ScalarOutcome('mean x', variable_name='x',
                                           function=mock.Mock()), 
                             ScalarOutcome('mean y', variable_name='y', 
                                           function=mock.Mock())]
     
     problem = to_robust_problem(mocked_model, scenarios, 
                                 robustness_functions)
     
     self.assertEqual('robust', problem.searchover)
     for entry in problem.parameters:
         self.assertIn(entry.name, mocked_model.levers.keys())
     self.assertEqual(['mean x', 'mean y'], problem.outcome_names)   
Пример #5
0
    def test_perform_experiments(self):

        # everything shared
        model_a = Model("A", mock.Mock())
        model_b = Model("B", mock.Mock())
        model_c = Model("C", mock.Mock())
        models = [model_a, model_b, model_c]

        # let's add some uncertainties to this
        shared_abc_1 = RealParameter("shared abc 1", 0, 1)
        shared_abc_2 = RealParameter("shared abc 2", 0, 1)
        shared_ab_1 = RealParameter("shared ab 1", 0, 1)
        shared_bc_1 = RealParameter("shared bc 1", 0, 1)
        a_1 = RealParameter("a 1", 0, 1)
        b_1 = RealParameter("b 1", 0, 1)
        model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1]
        model_b.uncertainties = [
            shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1
        ]
        model_c.uncertainties = [shared_abc_1, shared_abc_2, shared_bc_1]

        #let's add an outcome to this
        outcome_shared = TimeSeriesOutcome("test")
        model_a.outcomes = [outcome_shared]
        model_b.outcomes = [outcome_shared]
        model_c.outcomes = [outcome_shared]

        for model in models:
            model.function.return_value = {
                a: [0.1] * 10
                for a in outcome_shared.variable_name
            }

        ensemble = ModelEnsemble()
        ensemble.model_structures = [model_a, model_b, model_c]
        ensemble.policies = [Policy('None')]

        ensemble.perform_experiments(10,
                                     uncertainty_union=True,
                                     outcome_union=True,
                                     reporting_interval=1)
        #         for model in models:
        #             model.function.assert_has_calls() TODO::

        ensemble.perform_experiments(10,
                                     uncertainty_union=True,
                                     outcome_union=False,
                                     reporting_interval=1)

        ensemble.perform_experiments(10,
                                     uncertainty_union=False,
                                     outcome_union=True,
                                     reporting_interval=1)

        ensemble.perform_experiments(10,
                                     uncertainty_union=False,
                                     outcome_union=False,
                                     reporting_interval=1)
        #
        #         self.assertRaises(ValueError, ensemble.perform_experiments,
        #                          10, uncertainty_union=False,
        #                          union_outcomes='Label')

        with mock.patch(
                'ema_workbench.em_framework.ensemble.MultiprocessingPool'
        ) as MockPool:
            ensemble.parallel = True

            mockedCallback = mock.Mock(DefaultCallback)
            mockedCallback.configure_mock(**{'i': 30})
            mockedCallback.return_value = mockedCallback

            ensemble.perform_experiments(10,
                                         uncertainty_union=True,
                                         outcome_union=True,
                                         reporting_interval=1,
                                         callback=mockedCallback)

            self.assertEqual(2, len(MockPool.mock_calls))

            MockPool.reset_mock()
            mockedCallback = mock.Mock(DefaultCallback)
            mockedCallback.configure_mock(**{'i': 10})
            mockedCallback.return_value = mockedCallback

            self.assertRaises(EMAError,
                              ensemble.perform_experiments,
                              10,
                              uncertainty_union=True,
                              outcome_union=True,
                              reporting_interval=1,
                              callback=mockedCallback)
Пример #6
0
    def test_perform_experiments(self):
        
        # everything shared
        model_a = Model("A", mock.Mock())
        model_b = Model("B", mock.Mock())
        model_c = Model("C", mock.Mock())
        models = [model_a, model_b, model_c]
        
        # let's add some uncertainties to this
        shared_abc_1 = RealParameter("shared abc 1", 0, 1)
        shared_abc_2 = RealParameter("shared abc 2", 0, 1)
        shared_ab_1 = RealParameter("shared ab 1", 0, 1)
        shared_bc_1 = RealParameter("shared bc 1", 0, 1)
        a_1 = RealParameter("a 1", 0, 1)
        b_1 = RealParameter("b 1", 0, 1)
        model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1]
        model_b.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1]
        model_c.uncertainties = [shared_abc_1, shared_abc_2, shared_bc_1]
        
        #let's add an outcome to this
        outcome_shared = TimeSeriesOutcome("test")
        model_a.outcomes = [outcome_shared]
        model_b.outcomes = [outcome_shared]
        model_c.outcomes = [outcome_shared]
        
        for model in models:
            model.function.return_value = {a: [0.1]*10 for a in outcome_shared.variable_name}
        
        ensemble = ModelEnsemble()
        ensemble.model_structures = [model_a, model_b, model_c]
        ensemble.policies = [Policy('None')]
        
        ensemble.perform_experiments(10, uncertainty_union=True, 
                                         outcome_union=True,
                                         reporting_interval=1 )
#         for model in models:
#             model.function.assert_has_calls() TODO::
        

        ensemble.perform_experiments(10, uncertainty_union=True, 
                                         outcome_union=False,
                                         reporting_interval=1 )

        ensemble.perform_experiments(10, uncertainty_union=False, 
                                         outcome_union=True,
                                         reporting_interval=1 )

        ensemble.perform_experiments(10, uncertainty_union=False, 
                                         outcome_union=False,
                                         reporting_interval=1 )
#         
#         self.assertRaises(ValueError, ensemble.perform_experiments,
#                          10, uncertainty_union=False, 
#                          union_outcomes='Label')
        
        with mock.patch('ema_workbench.em_framework.ensemble.MultiprocessingPool') as MockPool:
            ensemble.parallel = True
            
            mockedCallback = mock.Mock(DefaultCallback)
            mockedCallback.configure_mock(**{'i':30})
            mockedCallback.return_value = mockedCallback
            
            ensemble.perform_experiments(10, uncertainty_union=True, 
                                             outcome_union=True,
                                             reporting_interval=1,
                                             callback=mockedCallback)
            
            self.assertEqual(2, len(MockPool.mock_calls))
            
            MockPool.reset_mock()
            mockedCallback = mock.Mock(DefaultCallback)
            mockedCallback.configure_mock(**{'i':10})
            mockedCallback.return_value = mockedCallback
            
            self.assertRaises(EMAError, ensemble.perform_experiments,
                              10, uncertainty_union=True, 
                              outcome_union=True, reporting_interval=1,
                             callback=mockedCallback)