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_model(): 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)) households.set_values_of_one_attribute(attribute="grid_id", values=hh_grid_ids) gridcells.delete_one_attribute("number_of_households") result = concatenate( (result_more_attractive, result_less_attractive)) return result
def test_unplaced_agents_decrease_available_space(self): """Using the household location choice model, create a set of available spaces and 2000 unplaced agents (along with 5000 placed agents). Run the model, and check that the unplaced agents were placed, and the number of available spaces has decreased""" storage = StorageFactory().get_storage('dict_storage') storage.write_table(table_name='households', table_data={ 'grid_id': array(2000 * [0] + 5000 * [1]), 'household_id': arange(7000) + 1 }) storage.write_table(table_name='gridcells', table_data={ 'residential_units': array(50 * [10000]), 'grid_id': arange(50) + 1 }) households = HouseholdDataset(in_storage=storage, in_table_name='households') gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') coefficients = Coefficients(names=("dummy", ), values=(0.1, )) specification = EquationSpecification( variables=("gridcell.residential_units", ), coefficients=("dummy", )) """need to specify to the household location choice model exactly which households are moving, because by default it assumes all current households want to move, but in this test, the 5000 households already in gridcell #1 shouldn't move. here, we specify that only the unplaced households should be moved.""" agents_index = where(households.get_attribute("grid_id") == 0)[0] 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, agents_index=agents_index, debuglevel=1) gridcells.compute_variables( ["urbansim.gridcell.vacant_residential_units"], resources=Resources({"household": households})) vacancies = gridcells.get_attribute("vacant_residential_units") """since there were 5000 households already in gridcell #1, and gridcell #1 has 10000 residential units, there should be no more than 5000 vacant residential units in gridcell #1 after running this model""" self.assertEqual(vacancies[0] <= 5000, True, "Error: %d" % (vacancies[0], )) """there should be exactly 430000 vacant residential units after the model run, because there were originally 50 gridcells with 10000 residential units each, and a total of 7000 units are occupied after the run""" self.assertEqual( sum(vacancies) == 50 * 10000 - 7000, True, "Error: %d" % (sum(vacancies)))
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(): 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)) households.set_values_of_one_attribute(attribute="grid_id", values=hh_grid_ids) gridcells.delete_one_attribute("number_of_households") result = concatenate((result_more_attractive, result_less_attractive)) return result
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 test_unplaced_agents_decrease_available_space(self): """Using the household location choice model, create a set of available spaces and 2000 unplaced agents (along with 5000 placed agents). Run the model, and check that the unplaced agents were placed, and the number of available spaces has decreased""" storage = StorageFactory().get_storage('dict_storage') storage.write_table(table_name='households', table_data = { 'grid_id': array(2000*[0] + 5000*[1]), 'household_id': arange(7000)+1 } ) storage.write_table(table_name='gridcells', table_data= { 'residential_units':array(50*[10000]), 'grid_id': arange(50)+1 } ) households = HouseholdDataset(in_storage=storage, in_table_name='households') gridcells = GridcellDataset(in_storage=storage, in_table_name='gridcells') coefficients = Coefficients(names=("dummy",), values=(0.1,)) specification = EquationSpecification(variables=("gridcell.residential_units",), coefficients=("dummy",)) """need to specify to the household location choice model exactly which households are moving, because by default it assumes all current households want to move, but in this test, the 5000 households already in gridcell #1 shouldn't move. here, we specify that only the unplaced households should be moved.""" agents_index = where(households.get_attribute("grid_id") == 0)[0] 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, agents_index=agents_index, debuglevel=1) gridcells.compute_variables(["urbansim.gridcell.vacant_residential_units"], resources=Resources({"household":households})) vacancies = gridcells.get_attribute("vacant_residential_units") """since there were 5000 households already in gridcell #1, and gridcell #1 has 10000 residential units, there should be no more than 5000 vacant residential units in gridcell #1 after running this model""" self.assertEqual(vacancies[0] <= 5000, True, "Error: %d" % (vacancies[0],)) """there should be exactly 430000 vacant residential units after the model run, because there were originally 50 gridcells with 10000 residential units each, and a total of 7000 units are occupied after the run""" self.assertEqual(sum(vacancies) == 50 * 10000 - 7000, True, "Error: %d" % (sum(vacancies)))
def run_model2(): 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 = 30) hlcm.run(specification, coefficients, agent_set = households, run_config=Resources({"demand_string":"gridcell.housing_demand"})) return gridcells.get_attribute("housing_demand")
def run_model1(): 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 = 30) hlcm.run(specification, coefficients, agent_set = households) gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) return gridcells.get_attribute("number_of_households")
def test_do_nothing_if_no_agents(self): storage = StorageFactory().get_storage('dict_storage') households_table_name = 'households' storage.write_table(table_name=households_table_name, table_data={ "household_id": arange(10000) + 1, "grid_id": array(10000 * [-1]) }) households = HouseholdDataset(in_storage=storage, in_table_name=households_table_name) gridcells_table_name = 'gridcells' storage.write_table(table_name=gridcells_table_name, table_data={ "grid_id": arange(100) + 1, "cost": array(50 * [100] + 50 * [1000]) }) 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", )) # 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, agents_index=array([], dtype='int32'), debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources( {"household": households})) result = gridcells.get_attribute("number_of_households") # check the individual gridcells self.assertEqual(ma.allclose(result, zeros((100, )), rtol=0), True)
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 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 test_do_nothing_if_no_agents(self): storage = StorageFactory().get_storage('dict_storage') households_table_name = 'households' storage.write_table( table_name = households_table_name, table_data = { "household_id": arange(10000)+1, "grid_id": array(10000*[-1]) } ) households = HouseholdDataset(in_storage=storage, in_table_name=households_table_name) gridcells_table_name = 'gridcells' storage.write_table( table_name = gridcells_table_name, table_data = { "grid_id": arange(100)+1, "cost":array(50*[100]+50*[1000]) } ) 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", )) # 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, agents_index=array([], dtype='int32'), debuglevel=1) # get results gridcells.compute_variables(["urbansim.gridcell.number_of_households"], resources=Resources({"household":households})) result = gridcells.get_attribute("number_of_households") # check the individual gridcells self.assertEqual(ma.allclose(result, zeros((100,)) , rtol=0), True)
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 run_model2(): 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=30) hlcm.run(specification, coefficients, agent_set=households, run_config=Resources( {"demand_string": "gridcell.housing_demand"})) return gridcells.get_attribute("housing_demand")
def run_model1(): 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=30) hlcm.run(specification, coefficients, agent_set=households) gridcells.compute_variables( ["urbansim.gridcell.number_of_households"], resources=Resources({"household": households})) return gridcells.get_attribute("number_of_households")
coefficients = Coefficients(names=("costcoef", ), values=(-0.01, )) specification = EquationSpecification(variables=("gridcell.cost", ), coefficients=("costcoef", )) hlcm = HouseholdLocationChoiceModelCreator().get_model( location_set=locations, sampler=None, utilities="opus_core.linear_utilities", probabilities="opus_core.mnl_probabilities", choices="opus_core.random_choices_from_index", compute_capacity_flag=False) agents.get_attribute("location") results = hlcm.run(specification, coefficients, agents) agents.get_attribute("location") hlcm.upc_sequence.plot_choice_histograms( capacity=locations.get_attribute("vacant_units")) hlcm.upc_sequence.show_plots() coef, results = hlcm.estimate(specification, agents) results = hlcm.run(specification, coef, agents) hlcm.upc_sequence.plot_choice_histograms( capacity=locations.get_attribute("vacant_units")) hlcm.upc_sequence.show_plots() hlcm2 = HouseholdLocationChoiceModelCreator().get_model( location_set=locations, sampler=None,
coefficients = Coefficients(names=("costcoef", ), values=(-0.01,)) specification = EquationSpecification(variables=("gridcell.cost", ), coefficients=("costcoef", )) hlcm = HouseholdLocationChoiceModelCreator().get_model( location_set = locations, sampler=None, utilities="opus_core.linear_utilities", probabilities="opus_core.mnl_probabilities", choices="opus_core.random_choices_from_index", compute_capacity_flag=False) agents.get_attribute("location") results = hlcm.run(specification, coefficients, agents) agents.get_attribute("location") hlcm.upc_sequence.plot_choice_histograms( capacity=locations.get_attribute("vacant_units")) hlcm.upc_sequence.show_plots() coef, results = hlcm.estimate(specification, agents) results = hlcm.run(specification, coef, agents) hlcm.upc_sequence.plot_choice_histograms( capacity=locations.get_attribute("vacant_units")) hlcm.upc_sequence.show_plots() hlcm2 = HouseholdLocationChoiceModelCreator().get_model( location_set = locations, sampler=None,
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