Exemple #1
0
        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()])
Exemple #4
0
    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, ))
Exemple #5
0
    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))
Exemple #9
0
    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