def hlcm_simulate(households, buildings, aggregations, settings, low_income): fname = misc.config("hlcm.yaml") print "\nAffordable housing HLCM:\n" cfg = yaml.load(open(fname)) cfg["choosers_predict_filters"] = "income <= %d" % low_income open(misc.config("hlcm_tmp.yaml"), "w").write(yaml.dump(cfg)) # low income into affordable units utils.lcm_simulate("hlcm_tmp.yaml", households, buildings, aggregations, "building_id", "residential_units", "vacant_affordable_units", settings.get("enable_supply_correction", None), cast=True) os.remove(misc.config("hlcm_tmp.yaml")) print "\nMarket rate housing HLCM:\n" # then everyone into market rate units utils.lcm_simulate("hlcm.yaml", households, buildings, aggregations, "building_id", "residential_units", "vacant_market_rate_units", settings.get("enable_supply_correction", None), cast=True)
def hlcm_simulate(households, buildings, aggregations, settings, low_income): fname = misc.config("hlcm.yaml") print "\nAffordable housing HLCM:\n" cfg = yaml.load(open(fname)) cfg["choosers_predict_filters"] = "income <= %d" % low_income open(misc.config("hlcm_tmp.yaml"), "w").write(yaml.dump(cfg)) # low income into affordable units utils.lcm_simulate("hlcm_tmp.yaml", households, buildings, aggregations, "building_id", "residential_units", "vacant_affordable_units", settings.get("enable_supply_correction", None)) os.remove(misc.config("hlcm_tmp.yaml")) print "\nMarket rate housing HLCM:\n" # then everyone into market rate units utils.lcm_simulate("hlcm.yaml", households, buildings, aggregations, "building_id", "residential_units", "vacant_market_rate_units", settings.get("enable_supply_correction", None))
def elcm_simulate(jobs, buildings, aggregations, zones, elcm_config): buildings.local["non_residential_rent"] = \ buildings.local.non_residential_rent.fillna(0) return utils.lcm_simulate( elcm_config, jobs, buildings, aggregations + [zones], "building_id", "job_spaces", "vacant_job_spaces", cast=True)
def elcm_simulate(jobs, buildings, aggregations): buildings.local["non_residential_rent"] = \ buildings.local.non_residential_rent.fillna(0) buildings.index.names = ["index"] return utils.lcm_simulate("elcm.yaml", orca.orca.DataFrameWrapper('jobs_for_sim', jobs.to_frame().dropna(subset=['building_id'])), buildings, aggregations, "building_id", "job_spaces", "vacant_job_spaces", cast=True)
def hlcm_simulate(households, buildings, aggregations, settings): return utils.lcm_simulate( "hlcm.yaml", households, buildings, aggregations, "building_id", "residential_units", "vacant_residential_units", settings.get("enable_supply_correction", None), )
def wplcm_simulate(persons, households, jobs): # can only send in jobs that have a valid building_id, so remove unlocated jobs for now jobs_df = jobs.to_frame() jobs_df = jobs_df[jobs_df.building_id>0] jobs_df.index.name = 'job_id' orca.add_table('located_jobs', jobs_df) located_jobs = orca.get_table('located_jobs') res = utils.lcm_simulate("wplcmcoef.yaml", persons, located_jobs, None, "job_id", "number_of_jobs", "vacant_jobs", cast=True) orca.clear_cache()
def elcm_simulate(jobs, buildings, aggregations, elcm_config): buildings.local["non_residential_rent"] = \ buildings.local.non_residential_rent.fillna(0) return utils.lcm_simulate(elcm_config, jobs, buildings, aggregations, "building_id", "job_spaces", "vacant_job_spaces", cast=True)
def hlcm_simulate(households, residential_units, aggregations, settings, yaml_name, equilibration_name): return utils.lcm_simulate(cfg=yaml_name, choosers=households, buildings=residential_units, join_tbls=aggregations, out_fname='unit_id', supply_fname='num_units', vacant_fname='vacant_units', # enable_supply_correction=settings.get( # equilibration_name, None), cast=True)
def ual_hlcm_renter_simulate(households, residential_units, unit_aggregations, ual_settings): return utils.lcm_simulate(cfg='ual_hlcm_renter.yaml', choosers=households, buildings=residential_units, join_tbls=unit_aggregations, out_fname='unit_id', supply_fname='num_units', vacant_fname='vacant_units', enable_supply_correction=ual_settings.get( 'rent_equilibration', None), cast=True)
def hlcm_simulate(households, residential_units, aggregations, settings, yaml_name, equilibration_name): return utils.lcm_simulate(cfg=yaml_name, choosers=households, buildings=residential_units, join_tbls=aggregations, out_fname='unit_id', supply_fname='num_units', vacant_fname='vacant_units', enable_supply_correction=settings.get( equilibration_name, None), cast=True)
def ual_hlcm_owner_simulate(households, residential_units, unit_aggregations, ual_settings): # Note that the submarket id (zone_id) needs to be in the table of alternatives, # for supply/demand equilibration, and needs to NOT be in the choosers table, to # avoid conflicting when the tables are joined return utils.lcm_simulate(cfg='ual_hlcm_owner.yaml', choosers=households, buildings=residential_units, join_tbls=unit_aggregations, out_fname='unit_id', supply_fname='num_units', vacant_fname='vacant_units', enable_supply_correction=ual_settings.get( 'price_equilibration', None), cast=True)
def hlcm_simulate(households, buildings, persons, settings): movers = households.to_frame() movers = movers[movers.building_id == -1] relocated = movers[movers.is_inmigrant < 1] res = utils.lcm_simulate("hlcmcoef.yaml", households, buildings, None, "building_id", "residential_units", "vacant_residential_units", cast=True) orca.clear_cache() # Determine which relocated persons get disconnected from their job if settings.get('remove_jobs_from_workers', False): persons_df = persons.to_frame() relocated_workers = persons_df.loc[(persons_df.employment_status > 0) & (persons_df.household_id.isin (relocated.index))] relocated_workers['new_dist_to_work'] = network_distance_from_home_to_work( relocated_workers.workplace_zone_id, relocated_workers.household_zone_id) relocated_workers['prev_dist_to_work'] = network_distance_from_home_to_work( relocated_workers.workplace_zone_id, relocated_workers.prev_household_zone_id) # if new distance to work is greater than old, disconnect person from job relocated_workers.job_id = np.where(relocated_workers.new_dist_to_work > relocated_workers.prev_dist_to_work, -1, relocated_workers.job_id) persons.update_col_from_series("job_id", relocated_workers.job_id, cast=True) # Update is_inmigrant- I think this it is ok to do this now, # but perhaps this should be part of a clean up step # at the end of the sim year. households.update_col_from_series("is_inmigrant", pd.Series(0, index=households.index), cast=True) orca.clear_cache() return res
def elcm_simulate(jobs, buildings, parcels, zones, gridcells): res = utils.lcm_simulate("elcmcoef.yaml", jobs, buildings, [parcels, zones, gridcells], "building_id", "job_spaces", "vacant_job_spaces", cast=True) orca.clear_cache()
def elcm_simulate(jobs, buildings, aggregations): buildings.local["non_residential_price"] = \ buildings.local.non_residential_price.fillna(0) return utils.lcm_simulate("elcm.yaml", jobs, buildings, aggregations, "building_id", "job_spaces", "vacant_job_spaces")
def elcm_simulate(jobs, buildings, aggregations): return utils.lcm_simulate("elcm.yaml", jobs, buildings, aggregations, "building_id", "job_spaces", "vacant_job_spaces")
def hlcm_simulate(households, buildings, aggregations, settings): return utils.lcm_simulate("hlcm.yaml", households, buildings, aggregations, "building_id", "residential_units", "vacant_residential_units", settings.get("enable_supply_correction", None))
def elcm_basic_simulate(jobs, buildings, aggregations): return utils.lcm_simulate("elcm_basic.yaml", jobs, buildings, aggregations, "building_id", "job_spaces", "vacant_job_spaces")