def test_output_size(self): out = sample_population(1, self.test_pdf, self.algo) self.assertEqual(len(out), len(self.test_pdf)) out3 = sample_population(10, self.test_pdf, self.algo) self.assertEqual(len(out3), len(self.test_pdf)) out2 = sample_population(10, np.array([0.2, 0.8]), self.algo) self.assertEqual(len(out2), 2) out1 = sample_population(10, np.array([1]), self.algo) self.assertEqual(len(out1), 1)
def test_numbers(self): out = sample_population(1, self.test_pdf, self.algo) print(out) self.assertEqual(sum(out), 1) out = sample_population(10, self.test_pdf, self.algo) print(out) self.assertEqual(sum(out), 10) out = sample_population(10, np.array([1])) print(out) self.assertEqual(sum(out), 10)
def test_real_population_values(self): """Test only the real population algo for ensuring correct values""" out = sample_population(10, self.test_pdf, 'real_population') self.assertTrue(np.all(np.array([2, 5, 3]) == out)) out = sample_population(10, np.array([1]), 'real_population') self.assertTrue(np.all(np.array([10]) == out)) # check cases with small numbers out = sample_population(1, np.array([0.3, 0.7]), 'real_population') self.assertTrue(np.all(np.array([1, 0]) == out)) out = sample_population(2, np.array([0.3, 0.7]), 'real_population') self.assertTrue(np.all(np.array([1, 1]) == out)) out = sample_population(2, np.array([0.5, 0.5]), 'real_population') self.assertTrue(np.all(np.array([1, 1]) == out))
from demod.utils.plotters import FIGSIZE, plot_household_activities from demod.utils.appliances import merge_appliance_dict from demod.simulators.util import sample_population from demod.simulators.appliance_simulators import ActivityApplianceSimulator, ProbabiliticActivityAppliancesSimulator, OccupancyApplianceSimulator from demod.simulators.base_simulators import SimLogger from demod.datasets.Germany.loader import GermanDataHerus from demod.simulators.activity_simulators import SubgroupsIndividualsActivitySimulator, SemiMarkovSimulator, MarkovChain1rstOrder # %% n_households = 5 data = GermanDataHerus(version='vBottaccioli') hh_subgroups, probs, _ = data.load_population_subgroups() n_hh_list = sample_population(n_households, probs) sim = SubgroupsIndividualsActivitySimulator(hh_subgroups, n_hh_list, logger=SimLogger( 'get_activity_states', 'current_time', aggregated=False), subsimulator=SemiMarkovSimulator, data=data, use_week_ends_days=True) sim_app = ActivityApplianceSimulator( n_households, initial_activities_dict=sim.get_activity_states(), data=data,
def __init__(self, n_households, start_datetime=datetime.datetime(2014, 1, 1, 4, 0, 0), include_heating=True, include_climate=True, initial_outside_temperature=5.0, data=GermanDataHerus(), **kwargs): super().__init__(n_households=n_households, start_datetime=start_datetime, **kwargs) # sample the population subgroups, pdf, _ = data.load_population_subgroups() counts = sample_population(self.n_households, pdf) # initialize all simulators in the correct order with warnings.catch_warnings(): warnings.filterwarnings("ignore") self.activity_simulator = _instantiate_activity_simulator( data, subgroups, counts, start_datetime, ) active_occupancy = self.activity_simulator.get_active_occupancy() self.appliance_simulator = OccupancyApplianceSimulator( subgroups, counts, initial_active_occupancy=active_occupancy, start_datetime=start_datetime, data=data) if include_climate: with warnings.catch_warnings(): warnings.filterwarnings("ignore") self.climate = _instantiate_climate( data, start_datetime, self.step_size, ) initial_outside_temperature = ( self.climate.get_outside_temperature()) else: self.climate = None self.include_climate = include_climate self.light_sim = CrestLightingSimulator(self.n_households, data=data, bulbs_sampling_algo='randn') if include_heating: self.heating = FiveModulesHeatingSimulator( self.n_households, initial_outside_temperature, data=data, ) self.include_heating = include_heating super().initialize_starting_state(initialization_time=start_datetime)