Skip to content

Commit

Permalink
reduce and reuse maz to maz network impedance calls to speed up runtime
Browse files Browse the repository at this point in the history
  • Loading branch information
bstabler committed Sep 29, 2021
1 parent 6ba7e8f commit 48e25df
Show file tree
Hide file tree
Showing 6 changed files with 2,679 additions and 2,674 deletions.
24 changes: 12 additions & 12 deletions activitysim/examples/example_psrc/configs/tour_mode_choice.csv
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,15 @@ util_SHARED3PAY_Two_person_household,SHARED3PAY - Two person household,@(df.hhsi
util_SHARED3PAY_Person_is_16_years_old_or_older,SHARED3PAY - Person is 16 years old or older,@(df.age >= 16),,,,,,coef_age16p_sr_multiplier,,,,,,,,,,,,,,,
#,Walk,,,,,,,,,,,,,,,,,,,,,,
#,FIXME - skims aren't symmetrical,so we have to make sure they can get back,,,,,,,,,,,,,,,,,,,,,
util_WALK_Time_up_to_2_miles,WALK - Time up to 2 miles,@walktimeshort_multiplier * (od_skims['DISTWALK'].clip(upper=walkThresh) + od_skims.reverse('DISTWALK').clip(upper=walkThresh))*60/walkSpeed,,,,,,,coef_ivt,,,,,,,,,,,,,,
util_WALK_Time_beyond_2_of_a_miles,WALK - Time beyond 2 of a miles,@walktimelong_multiplier * ((od_skims['DISTWALK'] - walkThresh).clip(lower=0) + (od_skims.reverse('DISTWALK') - walkThresh).clip(lower=0))*60/walkSpeed,,,,,,,coef_ivt,,,,,,,,,,,,,,
util_WALK_Time_up_to_2_miles,WALK - Time up to 2 miles,@walktimeshort_multiplier * (df.distance_walk_od.clip(upper=walkThresh) + df.distance_walk_od.clip(upper=walkThresh))*60/walkSpeed,,,,,,,coef_ivt,,,,,,,,,,,,,,
util_WALK_Time_beyond_2_of_a_miles,WALK - Time beyond 2 of a miles,@walktimelong_multiplier * ((df.distance_walk_od - walkThresh).clip(lower=0) + (df.distance_walk_od - walkThresh).clip(lower=0))*60/walkSpeed,,,,,,,coef_ivt,,,,,,,,,,,,,,
util_WALK_Destination_zone_densityIndex,WALK - Destination zone densityIndex,@density_index_multiplier * df.density_index,,,,,,,coef_ivt,,,,,,,,,,,,,,
util_WALK_Topology,WALK - Topology,@coef_topology_walk_multiplier * df.dest_topology,,,,,,,coef_ivt,,,,,,,,,,,,,,
#,Bike,,,,,,,,,,,,,,,,,,,,,,
#,FIXME - skims aren't symmetrical,so we have to make sure they can get back,,,,,,,,,,,,,,,,,,,,,
util_BIKE_Unavailable_if_didn't_bike_to_work,BIKE - Unavailable if didn't bike to work,is_atwork_subtour & ~work_tour_is_bike,,,,,,,,-999,,,,,,,,,,,,,
util_BIKE_Time_up_to_6_miles,BIKE - Time up to 6 miles,@biketimeshort_multiplier * (od_skims['DISTBIKE'].clip(upper=bikeThresh) + od_skims.reverse('DISTBIKE').clip(upper=bikeThresh))*60/bikeSpeed,,,,,,,,coef_ivt,,,,,,,,,,,,,
util_BIKE_Time_beyond_6_of_a_miles,BIKE - Time beyond 6 of a miles,@biketimelong_multiplier * ((od_skims['DISTBIKE']-bikeThresh).clip(lower=0) + (od_skims.reverse('DISTBIKE')-bikeThresh).clip(lower=0))*60/bikeSpeed,,,,,,,,coef_ivt,,,,,,,,,,,,,
util_BIKE_Time_up_to_6_miles,BIKE - Time up to 6 miles,@biketimeshort_multiplier * (df.distance_bike_od.clip(upper=bikeThresh) + df.distance_bike_od.clip(upper=bikeThresh))*60/bikeSpeed,,,,,,,,coef_ivt,,,,,,,,,,,,,
util_BIKE_Time_beyond_6_of_a_miles,BIKE - Time beyond 6 of a miles,@biketimelong_multiplier * ((df.distance_bike_od-bikeThresh).clip(lower=0) + (df.distance_bike_od-bikeThresh).clip(lower=0))*60/bikeSpeed,,,,,,,,coef_ivt,,,,,,,,,,,,,
util_BIKE_Destination_zone_densityIndex,BIKE - Destination zone densityIndex,@density_index_multiplier * df.density_index,,,,,,,,coef_ivt,,,,,,,,,,,,,
util_BIKE_Topology,BIKE - Topology,@coef_topology_bike_multiplier * df.dest_topology,,,,,,,,coef_ivt,,,,,,,,,,,,,
#,Walk to Local,,,,,,,,,,,,,,,,,,,,,,
Expand Down Expand Up @@ -171,7 +171,7 @@ util_DRIVE_LOC_Walk_access_time,DRIVE_LOC - Walk access time,@wacc_multiplier *
util_DRIVE_LOC_Walk_egress_time,DRIVE_LOC - Walk egress time (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,,,,coef_ivt,,,,,,,
util_DRIVE_LOC_Walk_other_time,DRIVE_LOC - Walk other time,@waux_multiplier * (odt_skims['DRV_LOC_WLK_WAUX']/100 + dot_skims['WLK_LOC_DRV_WAUX']/100),,,,,,,,,,,,,,coef_ivt,,,,,,,
util_DRIVE_LOC_Fare_and_operating_cost,DRIVE_LOC - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['DRV_LOC_WLK_FAR'] + dot_skims['WLK_LOC_DRV_FAR']) + ((odt_skims['DRV_LOC_WLK_DDIST']/100+dot_skims['WLK_LOC_DRV_DDIST']/100) * costPerMile)),,,,,,,,,,,,,,coef_ivt,,,,,,,
util_DRIVE_LOC_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_LOC - Ratio of drive access distance to OD distance,@dacc_ratio * ((odt_skims['DRV_LOC_WLK_DDIST']/100+ dot_skims['WLK_LOC_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,1,,,,,,,
util_DRIVE_LOC_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_LOC - Ratio of drive access distance to OD distance,@dacc_ratio * ((odt_skims['DRV_LOC_WLK_DDIST']/100+ dot_skims['WLK_LOC_DRV_DDIST']/100)/ (df.distance*2)),,,,,,,,,,,,,,1,,,,,,,
util_DRIVE_LOC_Destination_zone_densityIndex,DRIVE_LOC - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,,,,coef_ivt,,,,,,,
util_DRIVE_LOC_Topology,DRIVE_LOC - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,,,,coef_ivt,,,,,,,
util_DRIVE_LOC_Person_is_less_than_10_years_old,DRIVE_LOC - Person is less than 10 years old,@(df.age < 10),,,,,,,,,,,,,,coef_age010_trn_multiplier,,,,,,,
Expand All @@ -191,7 +191,7 @@ util_DRIVE_LRF_Walk_access_time,DRIVE_LRF - Walk access time (at attraction end)
util_DRIVE_LRF_Walk_egress_time,DRIVE_LRF - Walk egress time (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,,,,,coef_ivt,,,,,,
util_DRIVE_LRF_Walk_other_time,DRIVE_LRF - Walk other time,@waux_multiplier * (odt_skims['DRV_LRF_WLK_WAUX']/100 + dot_skims['WLK_LRF_DRV_WAUX']/100),,,,,,,,,,,,,,,coef_ivt,,,,,,
util_DRIVE_LRF_Fare_and_operating_cost,DRIVE_LRF - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['DRV_LRF_WLK_FAR']+dot_skims['WLK_LRF_DRV_FAR']) + ((odt_skims['DRV_LRF_WLK_DDIST']/100+dot_skims['WLK_LRF_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,coef_ivt,,,,,,
util_DRIVE_LRF_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_LRF - Ratio of drive access distance to OD distance,@dacc_ratio * ((odt_skims['DRV_LRF_WLK_DDIST']/100+ dot_skims['WLK_LRF_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,1,,,,,,
util_DRIVE_LRF_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_LRF - Ratio of drive access distance to OD distance,@dacc_ratio * ((odt_skims['DRV_LRF_WLK_DDIST']/100+ dot_skims['WLK_LRF_DRV_DDIST']/100)/ (df.distance*2)),,,,,,,,,,,,,,,1,,,,,,
util_DRIVE_LRF_Destination_zone_densityIndex,DRIVE_LRF - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,,,,,coef_ivt,,,,,,
util_DRIVE_LRF_Topology,DRIVE_LRF - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,,,,,coef_ivt,,,,,,
util_DRIVE_LRF_Person_is_less_than_10_years_old,DRIVE_LRF - Person is less than 10 years old,@(df.age < 10),,,,,,,,,,,,,,,coef_age010_trn_multiplier,,,,,,
Expand All @@ -210,7 +210,7 @@ util_DRIVE_EXP_Walk_access_time,DRIVE_EXP - Walk access time (at attraction end)
util_DRIVE_EXP_Walk_egress_ime,DRIVE_EXP - Walk egress ime (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,,,,,,coef_ivt,,,,,
util_DRIVE_EXP_Walk_other_time,DRIVE_EXP - Walk other time,@waux_multiplier * (odt_skims['DRV_EXP_WLK_WAUX']/100 + dot_skims['WLK_EXP_DRV_WAUX']/100),,,,,,,,,,,,,,,,coef_ivt,,,,,
util_DRIVE_EXP_Fare_and_operating_cost,DRIVE_EXP - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['DRV_EXP_WLK_FAR']+dot_skims['WLK_EXP_DRV_FAR']) + ((odt_skims['DRV_EXP_WLK_DDIST']/100+dot_skims['WLK_EXP_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,coef_ivt,,,,,
util_DRIVE_EXP_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_EXP - Ratio of drive access distance to OD distance,@dacc_ratio * ((odt_skims['DRV_EXP_WLK_DDIST']/100+ dot_skims['WLK_EXP_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,,1,,,,,
util_DRIVE_EXP_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_EXP - Ratio of drive access distance to OD distance,@dacc_ratio * ((odt_skims['DRV_EXP_WLK_DDIST']/100+ dot_skims['WLK_EXP_DRV_DDIST']/100)/ (df.distance*2)),,,,,,,,,,,,,,,,1,,,,,
util_DRIVE_EXP_Destination_zone_densityIndex,DRIVE_EXP - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,,,,,,coef_ivt,,,,,
util_DRIVE_EXP_Topology,DRIVE_EXP - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,,,,,,coef_ivt,,,,,
util_DRIVE_EXP_Person_is_less_than_10_years_old,DRIVE_EXP - Person is less than 10 years old,@(df.age < 10),,,,,,,,,,,,,,,,coef_age010_trn_multiplier,,,,,
Expand All @@ -229,7 +229,7 @@ util_DRIVE_HVY_Walk_access_time,DRIVE_HVY - Walk access time (at attraction end)
util_DRIVE_HVY_Walk_egress_time,DRIVE_HVY - Walk egress time (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,,,,,,,coef_ivt,,,,
util_DRIVE_HVY_Walk_other_time,DRIVE_HVY - Walk other time,@waux_multiplier * (odt_skims['DRV_HVY_WLK_WAUX']/100 + dot_skims['WLK_HVY_DRV_WAUX']/100),,,,,,,,,,,,,,,,,coef_ivt,,,,
util_DRIVE_HVY_Fare_and_operating_cost,DRIVE_HVY - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['DRV_HVY_WLK_FAR']+dot_skims['WLK_HVY_DRV_FAR']) + ((odt_skims['DRV_HVY_WLK_DDIST']/100+dot_skims['WLK_HVY_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,,coef_ivt,,,,
util_DRIVE_HVY_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_HVY - Ratio of drive access distance to OD distance,@dacc_ratio * (odt_skims['DRV_HVY_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,1,,,,
util_DRIVE_HVY_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_HVY - Ratio of drive access distance to OD distance,@dacc_ratio * (odt_skims['DRV_HVY_WLK_DDIST']/100) / df.distance,,,,,,,,,,,,,,,,,1,,,,
util_DRIVE_HVY_Destination_zone_densityIndex,DRIVE_HVY - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,,,,,,,coef_ivt,,,,
util_DRIVE_HVY_Topology,DRIVE_HVY - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,,,,,,,coef_ivt,,,,
util_DRIVE_HVY_Person_is_less_than_10_years_old,DRIVE_HVY - Person is less than 10 years old,@(df.age < 10),,,,,,,,,,,,,,,,,coef_age010_trn_multiplier,,,,
Expand All @@ -248,7 +248,7 @@ util_DRIVE_COM_Walk_access_time,DRIVE_COM - Walk access time (at attraction end)
util_DRIVE_COM_Walk_egress_time,DRIVE_COM - Walk egress time (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,,,,,,,,coef_ivt,,,
util_DRIVE_COM_Walk_other_time,DRIVE_COM - Walk other time,@waux_multiplier * (odt_skims['DRV_COM_WLK_WAUX']/100 + dot_skims['WLK_COM_DRV_WAUX']/100),,,,,,,,,,,,,,,,,,coef_ivt,,,
util_DRIVE_COM_Fare_and_operating_cost,DRIVE_COM - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['DRV_COM_WLK_FAR']+dot_skims['WLK_COM_DRV_FAR']) + ((odt_skims['DRV_COM_WLK_DDIST']/100+dot_skims['WLK_COM_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,,,coef_ivt,,,
util_DRIVE_COM_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_COM - Ratio of drive access distance to OD distance,@dacc_ratio * ((odt_skims['DRV_COM_WLK_DDIST']/100 + dot_skims['WLK_COM_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,,,,1,,,
util_DRIVE_COM_Ratio_of_drive_access_distance_to_OD_distance,DRIVE_COM - Ratio of drive access distance to OD distance,@dacc_ratio * ((odt_skims['DRV_COM_WLK_DDIST']/100 + dot_skims['WLK_COM_DRV_DDIST']/100)/ (df.distance*2)),,,,,,,,,,,,,,,,,,1,,,
util_DRIVE_COM_Destination_zone_densityIndex,DRIVE_COM - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,,,,,,,,coef_ivt,,,
util_DRIVE_COM_Topology,DRIVE_COM - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,,,,,,,,coef_ivt,,,
util_DRIVE_COM_Person_is_less_than_10_years_old,DRIVE_COM - Person is less than 10 years old,@(df.age < 10),,,,,,,,,,,,,,,,,,coef_age010_trn_multiplier,,,
Expand Down Expand Up @@ -338,9 +338,9 @@ util_Heavy_Rail_ASC,Heavy Rail ASC,1,,,,,,,,,,,,heavy_rail_ASC,,,,,heavy_rail_AS
util_Commuter_Rail,Commuter Rail,1,,,,,,,,,,,,,commuter_rail_ASC,,,,,commuter_rail_ASC,,,
util_Walk_to_Transit_dest_CBD,Walk to Transit dest CBD,@df.destination_in_cbd,,,,,,,,,walk_transit_CBD_ASC,walk_transit_CBD_ASC,walk_transit_CBD_ASC,walk_transit_CBD_ASC,walk_transit_CBD_ASC,,,,,,,,
util_Drive_to_Transit_dest_CBD,Drive to Transit dest CBD,@df.destination_in_cbd,,,,,,,,,,,,,,drive_transit_CBD_ASC,drive_transit_CBD_ASC,drive_transit_CBD_ASC,drive_transit_CBD_ASC,drive_transit_CBD_ASC,,,
util_Drive_to_Transit_distance_penalty,Drive to Transit - distance penalty,@drvtrn_distpen_0_multiplier * (1-od_skims['DIST']/drvtrn_distpen_max).clip(lower=0),,,,,,,,,,,,,,coef_ivt,coef_ivt,coef_ivt,coef_ivt,coef_ivt,,,
util_Drive_to_Transit_distance_penalty,Drive to Transit - distance penalty,@drvtrn_distpen_0_multiplier * (1-df.distance/drvtrn_distpen_max).clip(lower=0),,,,,,,,,,,,,,coef_ivt,coef_ivt,coef_ivt,coef_ivt,coef_ivt,,,
#, FIXME - skims aren't symmetrical,so we have to make sure they can get back,,,,,,,,,,,,,,,,,,,,,
util_Walk_not_available_for_long_distances,Walk not available for long distances,@od_skims.max('DISTWALK') > 3,,,,,,,-999,,,,,,,,,,,,,,
util_Bike_not_available_for_long_distances,Bike not available for long distances,@od_skims.max('DISTBIKE') > 8,,,,,,,,-999,,,,,,,,,,,,,
util_Walk_not_available_for_long_distances,Walk not available for long distances,@df.distance_walk_od > 3,,,,,,,-999,,,,,,,,,,,,,,
util_Bike_not_available_for_long_distances,Bike not available for long distances,@df.distance_bike_od > 8,,,,,,,,-999,,,,,,,,,,,,,
util_Drive_alone_not_available_for_escort_tours,Drive alone not available for escort tours,is_escort,-999,-999,,,,,,,,,,,,,,,,,,,
#, max(c_densityIndexOrigin*originDensityIndex,originDensityIndexMax),,,,,,,,,1,1,1,1,1,1,1,,,,,,
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ local,_DF_IS_TOUR,'tour_type' in df.columns
,daily_parking_cost,"np.where(is_mandatory, _hourly_peak_parking_cost * df.duration, _hourly_offpeak_parking_cost * df.duration)"
#,,
,distance,od_skims['DIST']
,distance_walk_od,od_skims['DISTWALK']
,distance_bike_od,od_skims['DISTBIKE']
#,,
,sov_available,(odt_skims['SOV_TIME']>0) & (dot_skims['SOV_TIME']>0)
,sovtoll_available,(odt_skims['SOVTOLL_VTOLL']>0) | (dot_skims['SOVTOLL_VTOLL']>0)
,hov2_available,(odt_skims['HOV2_TIME'] + dot_skims['HOV2_TIME'])>0
Expand Down

1 comment on commit 48e25df

@bstabler
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

relevant to #431

Please sign in to comment.