Skip to content

Commit

Permalink
Updated SEMCOG Example (ActivitySim#603)
Browse files Browse the repository at this point in the history
* initial example_semcog commit

* documentation

* single process passing but not multiprocess

* testing infrastructure

* blacken

* formatting

* implemented stable sample for university extensions

* adding ignored output folder

* removed squared term and re-estimated

* updating test env

* calibrated configs

* fixing bad merge

* updated configs

* reading in extension folder

* updated shadowpricing yaml file

* updated test regress

* Revert "updated test regress"

This reverts commit 8d5af7d.

* updated regress test table

* updated test regress table

* updated cropped land use and skim

* updated shadow pricing method

* updated network_los to read segmented skims if needed

* updated example_manifest.yaml

* fixing conflicts

* making fixes per review comments

* push mistake!

* Revert "making fixes per review comments"

This reverts commit c05c7f3.

* Revert "Revert "making fixes per review comments""

This reverts commit d83019a.

* added back accidentally untracked output folder + updated regress table

* misc small fixes

---------

Co-authored-by: Ali Etezady <[email protected]>
  • Loading branch information
dhensle and aletzdy authored May 19, 2023
1 parent 372f943 commit 41d8961
Show file tree
Hide file tree
Showing 285 changed files with 85,980 additions and 58,295 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/core_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ jobs:
- prototype_mtc_extended
- placeholder_sandag
- prototype_sandag_xborder
- prototype_semcog
- production_semcog
- prototype_mwcog
- placeholder_multiple_zone
fail-fast: false
Expand Down
92 changes: 35 additions & 57 deletions activitysim/examples/example_manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -488,77 +488,55 @@
data/final_accessibility.csv
949994345c9965054be260589fd64079e4032d2e4079e46b9eb9c758a40527c3

- name: prototype_semcog
- name: production_semcog
description: 67 zone test example for the SEMCOG region
# activitysim create -e prototype_semcog -d test_prototype_semcog
# cd test_prototype_semcog
# activitysim create -e production_semcog -d test_production_semcog
# cd test_production_semcog
# python simulation.py -c configs -o output -d data
# cd ..
include:
- prototype_semcog/extensions
- prototype_semcog/data
- prototype_semcog/configs
- prototype_semcog/configs_mp
- prototype_semcog/output
- prototype_semcog/README.MD
- prototype_semcog/simulation.py
- production_semcog/extensions
- production_semcog/data
- production_semcog/configs
- production_semcog/configs_mp
- production_semcog/output
- production_semcog/README.MD
- production_semcog/simulation.py

- name: prototype_semcog_z500
description: 500 zone intermediate size example for the SEMCOG region
# activitysim create -e prototype_semcog_z500 -d test_prototype_semcog_z500
# cd test_prototype_semcog_z500
# python simulation.py -c configs -o output -d data
# cd ..
include:
- prototype_semcog/extensions
- prototype_semcog/data
- prototype_semcog/configs
- prototype_semcog/configs_mp
- prototype_semcog/output
- prototype_semcog/README.MD
- prototype_semcog/simulation.py
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_z500/skims.omx
data/skims.omx
7c824032940d1006e731d715bcee8771572e03558eef40ca1ca5f820bfc071ca
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_z500/households.csv
data/households.csv
93b74d3ad86c4c49222a2427cca6014a12a34c0b46c8a934fc8f849f943b820f
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_z500/persons.csv
data/persons.csv
3496761cc3b5f9718349ccd3ab97de7db96b8b5eed535a9bf97248fa087161a1
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_z500/land_use.csv
data/land_use.csv
d4ddb6f5fc7cd844e3e9149d03d32c841c5cb641a77aea9174045ddb85f27a3a

- name: prototype_semcog_full
description: 2899 zone full size example for the SEMCOG region
# activitysim create -e prototype_semcog_full -d test_prototype_semcog_full
# cd test_prototype_semcog_full
- name: production_semcog_full
description: 2899 zone full size production model for the SEMCOG region
# activitysim create -e production_semcog_full -d test_production_semcog_full
# cd test_production_semcog_full
# python simulation.py -c configs_mp -c configs -o output -d data
# cd ..
include:
- prototype_semcog/extensions
# prototype_semcog/data # data loaded from activitysim_resources
- prototype_semcog/configs
- prototype_semcog/configs_mp
- prototype_semcog/output
- prototype_semcog/README.MD
- prototype_semcog/simulation.py
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/skims.omx
data/skims.omx
efa1f87395df354ccfad7cfe4e67ace96c7ac04fa0290e5e6f8e2593fc0ba6a3
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/skims2.omx
data/skims2.omx
3cec3453f12c3f07a19ef896b98da2ab79cbcca8bb541f845f6541bf878feeff
- production_semcog/extensions
- production_semcog/configs
- production_semcog/configs_mp
- production_semcog/output
- production_semcog/README.MD
- production_semcog/simulation.py
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/skims_offpeak.omx
data/skims_offpeak.omx
685e93a725e2c04e4b1fc11b92609472c347ce830475448e39b52947fa729d80
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/skims_peak.omx
data/skims_peak.omx
f92d924728c3984bc0d960b0258f6a395be5169167ccc88747503a446ff153f9
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/households.csv
data/households.csv
25f5fcabd2953951e0e1cfe3ca2cc8bb4bc63ee11bbdee299a8fc026a775986d
34d5db243f7d176c536012f4d475fcc7dc51deb46c070e0e74f5e667578bcd15
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/persons.csv
data/persons.csv
934209ad17b789de07ad601c3f77a905a1c35c4bd7c15c62f088c045b3c64f43
d8c7eac449efd57758504ca80cf86f150d232b85d659423baab9d203a47dbb6d
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/land_use.csv
data/land_use.csv
8f9146993bff315afc6ada52182cb3ea719a6a1ed07095b51535bc7c026285f6
2e3c5a8b50d638f6956b3c78c9402ce15f3ceaa4cdc5a51d9d802652b6843772
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/maz_to_maz_walk.csv
data/maz_to_maz_walk.csv
3dd2511cfdac1380653f8cf93a11ee00c625800aad378b46cd1ce191371cec39
- https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/maz_to_maz_bike.csv
data/maz_to_maz_bike.csv
b158a181a48723117c86286a2e3041a35a980143d6b767e3f541c28bfbd38dcf

- name: prototype_arc
description: 36 zone test example for the ARC region
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ round trip path is available,_rt_available,(_trPkTime_od > 0) & (_trPkTime_do >
decay function,_decay,_rt_available * exp(_trPkTime * dispersion_parameter_transit)
transit peak retail,trPkRetail,df.e05_retail * _decay
transit peak total,trPkTotal,df.tot_emp * _decay
,trPKHH,df.tot_hhs * _decay
#,,
#,, transit off-peak
#,,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

# columns from land_use table to add to df
land_use_columns: ['e05_retail', 'tot_emp']
land_use_columns: ['e05_retail', 'tot_emp', 'tot_hhs']

CONSTANTS:
# dispersion parameters
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Description,Target,Expression
#,, annotate households table after import
,_PERSON_COUNT,"lambda query, persons, households: persons.query(query).groupby('household_id').size().reindex(households.index).fillna(0).astype(np.int8)"
#,,FIXME households.income can be negative - so we clip?
income,income,households.HINCP.fillna(0)
income,income,households.hincp.fillna(0)
income_in_thousands,income_in_thousands,(income / 1000).clip(lower=0)
income_segment,income_segment,"pd.cut(income_in_thousands, bins=[-np.inf, 30, 60, 100, np.inf], labels=[1, 2, 3, 4]).astype(int)"
#,,
Expand All @@ -14,7 +14,7 @@ median_value_of_time,median_value_of_time,"income_segment.map({k: v for k, v in
hh_value_of_time,hh_value_of_time,"rng.lognormal_for_df(df, mu=np.log(median_value_of_time * _MU), sigma=_SIGMA).clip(_MIN_VOT, _MAX_VOT)"
#,,
#num_workers was renamed in import,,
,num_workers,"_PERSON_COUNT('(ESR==1)|(ESR==2)|(ESR==4)|(ESR==5)', persons, households)"
,num_workers,"_PERSON_COUNT('(esr==1)|(esr==2)|(esr==4)|(esr==5)', persons, households)"
number of non_workers,num_non_workers,households.hhsize - num_workers
#,,
#,,we assume that everyone 16 and older is a potential driver
Expand All @@ -27,13 +27,15 @@ num_children_6_to_12,num_children_6_to_12,"_PERSON_COUNT('6 <= age <= 12', perso
num_children_16_to_17,num_children_16_to_17,"_PERSON_COUNT('16 <= age <= 17', persons, households)"
num_college_age,num_college_age,"_PERSON_COUNT('18 <= age <= 24', persons, households)"
num_young_adults,num_young_adults,"_PERSON_COUNT('25 <= age <= 34', persons, households)"
non_family,non_family,households.HHT.isin(HHT_NONFAMILY)
family,family,households.HHT.isin(HHT_FAMILY)
non_family,non_family,households.hht.isin(HHT_NONFAMILY)
family,family,households.hht.isin(HHT_FAMILY)
home_is_urban,home_is_urban,"reindex(land_use.AreaType, households.home_zone_id) < setting('urban_threshold')"
home_is_rural,home_is_rural,"reindex(land_use.AreaType, households.home_zone_id) > setting('rural_threshold')"
home_county,home_county,"reindex(land_use.COUNTY, households.home_zone_id)"
home_in_detroit,home_in_detroit,"reindex(land_use.COUNTY, households.home_zone_id) == 1"
#,, default for work and school location logsums before auto_ownership model is run
,auto_ownership,households.auto_ownership
TAZ column to match settings file,TAZ,households.home_zone_id
TAZ column to match settings file,TAZ,households.TAZ
number of pre-driving age children in the household,num_predrive_child,"_PERSON_COUNT('ptype == 7', persons, households)"
number of non-working adult in the household,num_nonworker_adults,"_PERSON_COUNT('ptype == 4', persons, households)"
number of full time workers,num_fullTime_workers,"_PERSON_COUNT('is_fulltime_worker', persons, households)"
Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ Description,Target,Expression
household_density,household_density,land_use.tot_hhs / (land_use.tot_acres)
employment_density,employment_density,land_use.tot_emp / (land_use.tot_acres)
density_index,density_index,(household_density *employment_density) / (household_density + employment_density).clip(lower=1)
,University_Name,"np.where(land_use.Univ_Tier==1, ""University of Michigan"", "" "")"
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ age_16_p,age_16_p,persons.age >= 16
adult,adult,persons.age >= 18
male,male,persons.sex == 1
female,female,persons.sex == 2
,esr,persons.ESR.fillna(0)
,wkhp,persons.WKHP.fillna(0)
,wkw,persons.WKW.fillna(0)
,schg,persons.SCHG.fillna(0)
,mil,persons.MIL.fillna(0)
,esr,persons.esr.fillna(0)
,wkhp,persons.wkhp.fillna(0)
,wkw,persons.wkw.fillna(0)
,schg,persons.schg.fillna(0)
,mil,persons.mil.fillna(0)
employment status type,pemploy,np.zeros(len(persons))
,pemploy,"np.where(persons.age < 16, PEMPLOY_CHILD, PEMPLOY_PART)"
,pemploy,"np.where((persons['age'] >= 16) & ((esr == 3) | (esr == 6)), PEMPLOY_NOT, pemploy)"
Expand Down Expand Up @@ -60,8 +60,11 @@ is_worker,is_worker,"np.where((pemploy == PEMPLOY_FULL) |( pemploy == PEMPLOY_PA
home_zone_id,home_zone_id,"reindex(households.home_zone_id, persons.household_id)"
hh_child,hh_child,"reindex(households.children, persons.household_id)"
person number,PNUM,persons.member_id
income,income,"reindex(households.HINCP, persons.household_id)"
income,income,"reindex(households.hincp, persons.household_id)"
income_in_thousands,income_in_thousands,(income / 1000).clip(lower=0)
income_segment,income_segment,"pd.cut(income_in_thousands, bins=[-np.inf, 30, 60, 100, np.inf], labels=[1, 2, 3, 4]).astype(int)"
is_fulltime_worker,is_fulltime_worker,"((age_16_p) & (wkhp >=35) & (wkw>=1) & (wkw<=4) & (~esr.isin([3,6])))"
is_parttime_worker,is_parttime_worker,"((age_16_p) & (~esr.isin([3,6])) & (is_fulltime_worker == False))"
recoding existing as legacy,naicsp_recode,"persons['naicsp'].replace('-9', '0000')"
coding industry according to pums,industry_naics,naicsp_recode.str[0].astype(int)*10
coding naicsp for telecommuting freq model, naics_category,naicsp_recode.str[0:2]
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Description,Target,Expression
#,, adults get full hh_value_of_time and children get 60%
,_hh_vot,"reindex(households.hh_value_of_time, persons.household_id)"
,value_of_time,"_hh_vot.where(persons.age>=18, _hh_vot * 0.667)"
,_hh_income,"reindex(households.HINCP, persons.household_id)"
,_hh_income,"reindex(households.hincp, persons.household_id)"
,_num_adults,"reindex(households.num_adults, persons.household_id)"
,_num_predrive_child,"reindex(households.num_predrive_child, persons.household_id)"
,_num_nonworker_adults,"reindex(households.num_nonworker_adults, persons.household_id)"
Expand All @@ -20,3 +20,5 @@ Presence of predrive child in HHs,is_pre_drive_child_in_HH,_num_predrive_child>0
,_has_children_6_to_12,"reindex(households.num_children_6_to_12, persons.household_id)"
has_young_children,has_young_children,_has_young_children>0
has_children_6_to_12,has_children_6_to_12,_has_children_6_to_12>0
home_county_,home_county_,"reindex(households.home_county, persons.household_id)"
home_county, home_county, home_county_
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@ travel_active,travel_active,persons.cdap_activity != CDAP_ACTIVITY_HOME
under16_not_at_school,under16_not_at_school,"persons.ptype.isin([PTYPE_SCHOOL, PTYPE_PRESCHOOL]) & persons.cdap_activity.isin(['N', 'H'])"
has_preschool_kid_at_home,has_preschool_kid_at_home,"other_than(persons.household_id, (persons.ptype == PTYPE_PRESCHOOL) & (persons.cdap_activity == 'H'))"
has_school_kid_at_home,has_school_kid_at_home,"other_than(persons.household_id, (persons.ptype == PTYPE_SCHOOL) & (persons.cdap_activity == 'H'))"
,cdap_activity,"np.where((persons.work_from_home) & (persons.cdap_activity=='M'), np.random.choice(['N','H']), persons.cdap_activity)"
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,7 @@ work_zone_area_type,work_zone_area_type,"reindex(land_use.AreaType, persons.work
,work_auto_savings,"np.where(persons.is_worker, _min_work_walk_transit - roundtrip_auto_time_to_work, 0)"
#,,auto savings over walk or transit capped at 120 and normalized to unity
,work_auto_savings_ratio,"(work_auto_savings / 120.0).clip(-1.0, 1.0)"
,umich_student,df.school_zone_id.isin(land_use[land_use.University_Name=='University of Michigan'].index.values)
,umich_worker,df.workplace_zone_id.isin(land_use[land_use.University_Name=='University of Michigan'].index.values)
#,,
,dest_hourly_peak_parking_cost,"reindex(land_use.parking_hourly, df.workplace_zone_id)"
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ util_dist,util_dist,@_DIST,coef_dist_atwork
util_dist_squared,util_dist_squared,"@(_DIST).clip(0,20)**2",coef_dist_squared_atwork
util_dist_cubed,util_dist_cubed,"@(_DIST).clip(0,20)**3",coef_dist_cubed_atwork
util_dist_logged,util_dist_logged,@(_DIST).apply(np.log1p),coef_dist_logged_atwork
# util_size_variable_atwork,Size variable atwork,@df['atwork'].apply(np.log1p),coef_size_variable_atwork
# util_no_attractions_atwork_size_variable_is_0,"No attractions, atwork size variable is 0",atwork==0,coef_no_attractions_atwork_size_variable_is_0
util_size_variable_atwork,Size variable atwork,@df['size_term'].apply(np.log1p),coef_size_variable_atwork
util_no_attractions_atwork_size_variable_is_0,"No attractions, atwork size variable is 0",size_term==0,coef_no_attractions_atwork_size_variable_is_0
util_mode_choice_logsum,Mode choice logsum,mode_choice_logsum,coef_mode_choice_logsum_atwork
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ SPEC: atwork_subtour_destination.csv
SAMPLE_SPEC: atwork_subtour_destination_sample.csv
COEFFICIENTS: atwork_subtour_destination_coeffs.csv

SIZE_TERM_SELECTOR: atwork
SEGMENTS:
- atwork
ORIG_ZONE_ID: workplace_zone_id

SAMPLE_SIZE: 30

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,5 @@ util_dist,util_dist,@_DIST,coef_dist_atwork
util_dist_squared,util_dist_squared,"@(_DIST).clip(0,20)**2",coef_dist_squared_atwork
util_dist_cubed,util_dist_cubed,"@(_DIST).clip(0,20)**3",coef_dist_cubed_atwork
util_dist_logged,util_dist_logged,@(_DIST).apply(np.log1p),coef_dist_logged_atwork
# util_size_variable_atwork,Size variable atwork,@df['atwork'].apply(np.log1p),coef_size_variable_atwork
# util_no_attractions_atwork_size_variable_is_0,"No attractions, atwork size variable is 0",atwork==0,coef_no_attractions_atwork_size_variable_is_0
util_size_variable_atwork,Size variable atwork,@df['size_term'].apply(np.log1p),coef_size_variable_atwork
util_no_attractions_atwork_size_variable_is_0,"No attractions, atwork size variable is 0",size_term==0,coef_no_attractions_atwork_size_variable_is_0
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
23 changes: 23 additions & 0 deletions activitysim/examples/production_semcog/configs/auto_ownership.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Label,Description,Expression,cars0,cars1,cars2,cars3,cars4
util_drivers_1,1 Adult (age 16+),num_drivers==1,,coef_cars1_drivers_1,coef_cars2_drivers_1,coef_cars3_drivers_1,coef_cars4_drivers_1
util_drivers_2,2 Adult (age 16+),num_drivers==2,,coef_cars1_drivers_2,coef_cars2_drivers_2,coef_cars3_drivers_2,coef_cars4_drivers_2
util_drivers_3_up,3+ Adults (age 16+),num_drivers>=3,,coef_cars1_drivers_3_up,coef_cars2_drivers_3_up,coef_cars3_drivers_3_up,coef_cars4_drivers_3_up
util_persons_16_17,Persons age 16-17,num_children_16_to_17,,coef_cars1_persons_16_17,coef_cars2_persons_16_17,coef_cars34_persons_16_17,coef_cars34_persons_16_17
util_persons_18_24,Persons age 18-24,num_college_age,,coef_cars1_persons_18_24,coef_cars2_persons_18_24,coef_cars34_persons_18_24,coef_cars34_persons_18_24
util_persons_25_34,Persons age 35-34,num_young_adults,,coef_cars1_persons_25_34,coef_cars2_persons_25_34,coef_cars34_persons_25_34,coef_cars34_persons_25_34
util_presence_children_0_4,Presence of children age 0-4,num_young_children>0,,coef_cars1_presence_children_0_4,coef_cars2_presence_children_0_4,coef_cars34_presence_children_0_4,coef_cars34_presence_children_0_4
util_presence_children_5_17,Presence of children age 5-17,(num_children_5_to_15+num_children_16_to_17)>0,,coef_cars1_presence_children_5_17,coef_cars2_presence_children_5_17,coef_cars34_presence_children_5_17,coef_cars34_presence_children_5_17
util_num_workers_clip_3,Number of workers capped at 3,@df.num_workers.clip(upper=3),,coef_cars1_num_workers_clip_3,coef_cars2_num_workers_clip_3,coef_cars3_num_workers_clip_3,coef_cars4_num_workers_clip_3
util_hh_income_0_15k,Piecewise Linear household income $0-15k,income_in_thousands < 15,,coef_cars1_hh_income_0_15k,coef_cars2_hh_income_0_15k,coef_cars3_hh_income_0_15k,coef_cars4_hh_income_0_15k
util_hh_income_15_35k,Piecewise Linear household income $15-35k,(income_in_thousands >= 15) & (income_in_thousands<35),,coef_cars1_hh_income_15_35k,coef_cars2_hh_income_15_35k,coef_cars3_hh_income_15_35k,coef_cars4_hh_income_15_35k
util_hh_income_35_50k,Piecewise Linear household income $35-50k,(income_in_thousands >= 35) & (income_in_thousands<50),,coef_cars1_hh_income_35_50k,coef_cars2_hh_income_35_50k,coef_cars3_hh_income_35_50k,coef_cars4_hh_income_35_50k
util_hh_income_50_75k,Piecewise Linear household income $50-75k,(income_in_thousands >= 50) & (income_in_thousands<75),,coef_cars1_hh_income_50_75k,coef_cars2_hh_income_50_75k,coef_cars3_hh_income_50_75k,coef_cars4_hh_income_50_75k
util_density,Density index,@df.density_index,,coef_cars1_density,coef_cars2_density,coef_cars3_density,coef_cars4_density
util_retail_transit,Retail accessibility (0.66*PK + 0.34*OP) by transit,(0.66*trPkRetail+0.34*trOpRetail),,coef_cars1_retail_transit,coef_cars2_retail_transit,coef_cars3_retail_transit,coef_cars4_retail_transit
util_retail_non_motor,Retail accessibility by non-motorized,nmRetail,,coef_cars1_retail_non_motor,coef_cars2_retail_non_motor,coef_cars3_retail_non_motor,coef_cars4_retail_non_motor
util_auto_time_saving_per_worker,Auto time savings per worker to work,"@np.where(df.num_workers > 0, df.hh_work_auto_savings_ratio / df.num_workers, 0)",,coef_cars1_auto_time_saving_per_worker,coef_cars2_auto_time_saving_per_worker,coef_cars3_auto_time_saving_per_worker,coef_cars4_auto_time_saving_per_worker
util_univ_students_GQ,University Students living in GQ households,(num_college_age > 0) & (type == 3),,coef_cars1_univ_GQ,coef_unavailable,coef_unavailable,coef_unavailable
util_constants,Alternative-specific constants,1,,coef_cars1,coef_cars2,coef_cars3,coef_cars4
util_detroit,district specific constant,home_in_detroit,coef_detroit,0,0,,0
#,,,,,,,
calib_constant,calibration constant,1,coef_cars0_asc,coef_cars1_asc,coef_cars2_asc,coef_cars3_asc,coef_cars4_asc
File renamed without changes.
Loading

0 comments on commit 41d8961

Please sign in to comment.