def run_model_2(): storage = StorageFactory().get_storage('dict_storage') storage.write_table(table_name='households', table_data=household_data) households = HouseholdDataset(in_storage=storage, in_table_name='households') storage.write_table(table_name='gridcells', table_data=gridcell_data) gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') hlcm = HouseholdLocationChoiceModelCreator().get_model( location_set=gridcells, compute_capacity_flag=False, choices="opus_core.random_choices_from_index", sample_size_locations=8) hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) # get results gridcells.compute_variables( ["urbansim.gridcell.number_of_households"], resources=Resources({"household": households})) result_more_attractive = gridcells.get_attribute_by_id( "number_of_households", arange(ngcs_attr) + 1) result_less_attractive = gridcells.get_attribute_by_id( "number_of_households", arange(ngcs_attr + 1, ngcs + 1)) return array( [result_more_attractive.sum(), result_less_attractive.sum()])
def run_ALCM(niter): nhhs = 100 ngcs = 10 ngcs_attr = ngcs/2 ngcs_noattr = ngcs - ngcs_attr hh_grid_ids = array(nhhs*[-1]) storage = StorageFactory().get_storage('dict_storage') households_table_name = 'households' storage.write_table( table_name = households_table_name, table_data = { 'household_id': arange(nhhs)+1, 'grid_id': hh_grid_ids } ) gridcells_table_name = 'gridcells' storage.write_table( table_name = gridcells_table_name, table_data = { 'grid_id': arange(ngcs)+1, 'cost':array(ngcs_attr*[100]+ngcs_noattr*[1000]) } ) households = HouseholdDataset(in_storage=storage, in_table_name=households_table_name) gridcells = GridcellDataset(in_storage=storage, in_table_name=gridcells_table_name) # create coefficients and specification coefficients = Coefficients(names=('costcoef', ), values=(-0.001,)) specification = EquationSpecification(variables=('gridcell.cost', ), coefficients=('costcoef', )) logger.be_quiet() result = zeros((niter,ngcs)) for iter in range(niter): hlcm = HouseholdLocationChoiceModelCreator().get_model(location_set=gridcells, compute_capacity_flag=False, choices = 'opus_core.random_choices_from_index', sampler=None, #sample_size_locations = 30 ) hlcm.run(specification, coefficients, agent_set=households, debuglevel=1, chunk_specification={'nchunks':1}) # get results gridcells.compute_variables(['urbansim.gridcell.number_of_households'], resources=Resources({'household':households})) result_more_attractive = gridcells.get_attribute_by_id('number_of_households', arange(ngcs_attr)+1) result_less_attractive = gridcells.get_attribute_by_id('number_of_households', arange(ngcs_attr+1, ngcs+1)) households.set_values_of_one_attribute(attribute='grid_id', values=hh_grid_ids) gridcells.delete_one_attribute('number_of_households') result[iter,:] = concatenate((result_more_attractive, result_less_attractive)) #print result #, result_more_attractive.sum(), result_less_attractive.sum() return result
def run_model_2(): storage = StorageFactory().get_storage('dict_storage') storage.write_table(table_name = 'households', table_data = household_data) households = HouseholdDataset(in_storage=storage, in_table_name='households') storage.write_table(table_name = 'gridcells', table_data = gridcell_data) gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') hlcm = HouseholdLocationChoiceModelCreator().get_model(location_set=gridcells, compute_capacity_flag=False, choices = "opus_core.random_choices_from_index", sample_size_locations = 8) hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) result_more_attractive = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr)+1) result_less_attractive = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr+1, ngcs+1)) return array([result_more_attractive.sum(), result_less_attractive.sum()])
def test_agents_do_not_go_to_inferior_locations(self): """100 gridcells - 99 with attractiveness 2000, 1 with attractiveness 1, no capacity restrictions 10,000 households We set the coefficient value for attracitiveness to 1. """ storage = StorageFactory().get_storage('dict_storage') #create households storage.write_table(table_name='households', table_data={ 'household_id': arange(10000) + 1, 'grid_id': array(10000 * [-1]) }) households = HouseholdDataset(in_storage=storage, in_table_name='households') # create gridcells storage.write_table(table_name='gridcells', table_data={ 'grid_id': arange(100) + 1, 'attractiveness': array(99 * [2000] + [1]) }) gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') # create coefficients and specification coefficients = Coefficients(names=("attractcoef", ), values=(1, )) specification = EquationSpecification( variables=("gridcell.attractiveness", ), coefficients=("attractcoef", )) # run the model hlcm = HouseholdLocationChoiceModelCreator().get_model( location_set=gridcells, compute_capacity_flag=False, choices="opus_core.random_choices_from_index", sample_size_locations=30) hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources( {"household": households})) result = gridcells.get_attribute_by_id("number_of_households", 100) # nobody should choose gridcell 100 self.assertEqual(result, 0, "Error: %s is not equal to 0" % (result, ))
def xtest_gracefully_handle_empty_choice_sets(self): storage = StorageFactory().get_storage('dict_storage') #create households storage.write_table(table_name='households', table_data={ 'household_id': arange(10000) + 1, 'grid_id': array(100 * range(100)) + 1 }) households = HouseholdDataset(in_storage=storage, in_table_name='households') # create gridcells storage.write_table(table_name='gridcells', table_data={ 'grid_id': arange(100) + 1, 'residential_units': array(100 * [100]) }) gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') # create coefficients and specification coefficients = Coefficients(names=("dummy", ), values=(0, )) specification = EquationSpecification( variables=("gridcell.residential_units", ), coefficients=("dummy", )) # run the model hlcm = HouseholdLocationChoiceModelCreator().get_model( location_set=gridcells, choices="opus_core.random_choices_from_index", sample_size_locations=30) hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources( {"household": households})) result = gridcells.get_attribute_by_id("number_of_households", 100) # nobody should choose gridcell 100 self.assertEqual(ma.allclose(result.sum(), 0, rtol=0), True, "Error: %s is not equal to 0" % (result.sum(), ))
def test_agents_do_not_go_to_inferior_locations(self): """100 gridcells - 99 with attractiveness 2000, 1 with attractiveness 1, no capacity restrictions 10,000 households We set the coefficient value for attracitiveness to 1. """ storage = StorageFactory().get_storage('dict_storage') #create households storage.write_table(table_name='households', table_data = { 'household_id': arange(10000)+1, 'grid_id': array(10000*[-1]) } ) households = HouseholdDataset(in_storage=storage, in_table_name='households') # create gridcells storage.write_table(table_name='gridcells', table_data = { 'grid_id': arange(100)+1, 'attractiveness':array(99*[2000]+[1]) } ) gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') # create coefficients and specification coefficients = Coefficients(names=("attractcoef", ), values=(1,)) specification = EquationSpecification(variables=("gridcell.attractiveness", ), coefficients=("attractcoef", )) # run the model hlcm = HouseholdLocationChoiceModelCreator().get_model(location_set=gridcells, compute_capacity_flag=False, choices = "opus_core.random_choices_from_index", sample_size_locations = 30) hlcm.run(specification, coefficients, agent_set = households, debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) result = gridcells.get_attribute_by_id("number_of_households", 100) # nobody should choose gridcell 100 self.assertEqual(result, 0, "Error: %s is not equal to 0" % (result,))
def xtest_gracefully_handle_empty_choice_sets(self): storage = StorageFactory().get_storage('dict_storage') #create households storage.write_table(table_name='households', table_data = { 'household_id': arange(10000)+1, 'grid_id': array(100*range(100))+1 } ) households = HouseholdDataset(in_storage=storage, in_table_name='households') # create gridcells storage.write_table(table_name='gridcells', table_data = { 'grid_id': arange(100)+1, 'residential_units':array(100*[100]) } ) gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') # create coefficients and specification coefficients = Coefficients(names=("dummy",), values=(0,)) specification = EquationSpecification(variables=("gridcell.residential_units",), coefficients=("dummy",)) # run the model hlcm = HouseholdLocationChoiceModelCreator().get_model( location_set=gridcells, choices = "opus_core.random_choices_from_index", sample_size_locations = 30) hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) result = gridcells.get_attribute_by_id("number_of_households", 100) # nobody should choose gridcell 100 self.assertEqual(ma.allclose(result.sum(), 0 , rtol=0), True, "Error: %s is not equal to 0" % (result.sum(),))
def test_place_agents_to_correct_areas(self): """10 gridcells - 5 in area 1, 5 in area 2, with equal cost, no capacity restrictions 100 households - 70 live in area 1, 30 live in area 2. We set the coefficient value for cost -0.001. """ storage = StorageFactory().get_storage('dict_storage') nhhs = 100 ngcs = 10 ngcs_attr = ngcs/2 hh_grid_ids = array(nhhs*[-1]) lareas = array(ngcs_attr*[1] + ngcs_attr*[2]) hh_lareas = array(70*[1] + 30*[2]) household_data = { 'household_id': arange(nhhs)+1, 'grid_id': hh_grid_ids, 'faz_id': hh_lareas } gridcell_data = { 'grid_id': arange(ngcs)+1, 'cost':array(ngcs*[100]), 'faz_id': lareas } storage.write_table(table_name = 'households', table_data = household_data) storage.write_table(table_name = 'gridcells', table_data = gridcell_data) households = HouseholdDataset(in_storage=storage, in_table_name='households') gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') # create coefficients and specification coefficients = Coefficients(names=("costcoef", ), values=(-0.001,)) specification = EquationSpecification(variables=("gridcell.cost", ), coefficients=("costcoef", )) # check the individual gridcells def run_model(): households = HouseholdDataset(in_storage=storage, in_table_name='households') hlcm = SubareaHouseholdLocationChoiceModel(location_set=gridcells, compute_capacity_flag=False, choices = "opus_core.random_choices_from_index", sample_size_locations = 4, subarea_id_name="faz_id") hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) result_area1 = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr)+1) result_area2 = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr+1, ngcs+1)) gridcells.delete_one_attribute("number_of_households") result = concatenate((result_area1, result_area2)) return result expected_results = array(ngcs_attr*[nhhs*0.7/float(ngcs_attr)] + ngcs_attr*[nhhs*0.3/float(ngcs_attr)]) self.run_stochastic_test(__file__, run_model, expected_results, 10) # check the exact sum hlcm = SubareaHouseholdLocationChoiceModel(location_set=gridcells, compute_capacity_flag=False, choices = "opus_core.random_choices_from_index", sample_size_locations = 4, subarea_id_name="faz_id") hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) result_area1 = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr)+1).sum() result_area2 = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr+1, ngcs+1)).sum() results = array([result_area1, result_area2]) expected_results = array([70, 30]) self.assertEqual(ma.allequal(expected_results, results), True, "Error, should_be: %s, but result: %s" % ( expected_results, results))
def test_place_agents_to_correct_areas(self): """10 gridcells - 5 in area 1, 5 in area 2, with equal cost, no capacity restrictions 100 households - 70 live in area 1, 30 live in area 2. We set the coefficient value for cost -0.001. """ storage = StorageFactory().get_storage('dict_storage') nhhs = 100 ngcs = 10 ngcs_attr = ngcs/2 hh_grid_ids = array(nhhs*[-1]) lareas = array(ngcs_attr*[1] + ngcs_attr*[2]) hh_lareas = array(70*[1] + 30*[2]) household_data = { 'household_id': arange(nhhs)+1, 'grid_id': hh_grid_ids, 'faz_id': hh_lareas } gridcell_data = { 'grid_id': arange(ngcs)+1, 'cost':array(ngcs*[100]), 'faz_id': lareas } storage.write_table(table_name = 'households', table_data = household_data) storage.write_table(table_name = 'gridcells', table_data = gridcell_data) households = HouseholdDataset(in_storage=storage, in_table_name='households') gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') # create coefficients and specification coefficients = Coefficients(names=("costcoef", ), values=(-0.001,)) specification = EquationSpecification(variables=("gridcell.cost", ), coefficients=("costcoef", )) # check the individual gridcells def run_model(): households = HouseholdDataset(in_storage=storage, in_table_name='households') hlcm = SubareaHouseholdLocationChoiceModel(location_set=gridcells, compute_capacity_flag=False, choices = "opus_core.random_choices_from_index", sample_size_locations = 4, subarea_id_name="faz_id") hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) result_area1 = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr)+1) result_area2 = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr+1, ngcs+1)) gridcells.delete_one_attribute("number_of_households") result = concatenate((result_area1, result_area2)) return result expected_results = array(ngcs_attr*[nhhs*0.7/float(ngcs_attr)] + ngcs_attr*[nhhs*0.3/float(ngcs_attr)]) self.run_stochastic_test(__file__, run_model, expected_results, 10) # check the exact sum hlcm = SubareaHouseholdLocationChoiceModel(location_set=gridcells, compute_capacity_flag=False, choices = "opus_core.random_choices_from_index", sample_size_locations = 4, subarea_id_name="faz_id") hlcm.run(specification, coefficients, agent_set=households, debuglevel=1) gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) result_area1 = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr)+1).sum() result_area2 = gridcells.get_attribute_by_id("number_of_households", arange(ngcs_attr+1, ngcs+1)).sum() results = array([result_area1, result_area2]) expected_results = array([70, 30]) self.assertEqual(ma.allequal(expected_results, results), True, "Error, should_be: %s, but result: %s" % ( expected_results, results))
def run_ALCM(niter): nhhs = 100 ngcs = 10 ngcs_attr = ngcs / 2 ngcs_noattr = ngcs - ngcs_attr hh_grid_ids = array(nhhs * [-1]) storage = StorageFactory().get_storage('dict_storage') households_table_name = 'households' storage.write_table(table_name=households_table_name, table_data={ 'household_id': arange(nhhs) + 1, 'grid_id': hh_grid_ids }) gridcells_table_name = 'gridcells' storage.write_table(table_name=gridcells_table_name, table_data={ 'grid_id': arange(ngcs) + 1, 'cost': array(ngcs_attr * [100] + ngcs_noattr * [1000]) }) households = HouseholdDataset(in_storage=storage, in_table_name=households_table_name) gridcells = GridcellDataset(in_storage=storage, in_table_name=gridcells_table_name) # create coefficients and specification coefficients = Coefficients(names=('costcoef', ), values=(-0.001, )) specification = EquationSpecification(variables=('gridcell.cost', ), coefficients=('costcoef', )) logger.be_quiet() result = zeros((niter, ngcs)) for iter in range(niter): hlcm = HouseholdLocationChoiceModelCreator().get_model( location_set=gridcells, compute_capacity_flag=False, choices='opus_core.random_choices_from_index', sampler=None, #sample_size_locations = 30 ) hlcm.run(specification, coefficients, agent_set=households, debuglevel=1, chunk_specification={'nchunks': 1}) # get results gridcells.compute_variables(['urbansim.gridcell.number_of_households'], resources=Resources( {'household': households})) result_more_attractive = gridcells.get_attribute_by_id( 'number_of_households', arange(ngcs_attr) + 1) result_less_attractive = gridcells.get_attribute_by_id( 'number_of_households', arange(ngcs_attr + 1, ngcs + 1)) households.set_values_of_one_attribute(attribute='grid_id', values=hh_grid_ids) gridcells.delete_one_attribute('number_of_households') result[iter, :] = concatenate( (result_more_attractive, result_less_attractive)) #print result #, result_more_attractive.sum(), result_less_attractive.sum() return result