Skip to content

Commit

Permalink
Add TNC wait time and fare to TNC-transit mode choice
Browse files Browse the repository at this point in the history
  • Loading branch information
aber-sandag committed May 2, 2024
1 parent 2837b0e commit f9fef4f
Show file tree
Hide file tree
Showing 10 changed files with 154 additions and 85 deletions.
8 changes: 7 additions & 1 deletion src/asim/configs/crossborder/trip_mode_choice.csv
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ util_WALKLOC__In_vehicle_time,WALK_LOC - In-vehicle time,@(odt_skims['WALK_LOC_T
util_WALK_LOC_iwait_time,WALK_LOC - wait time,@(odt_skims['WALK_LOC_FIRSTWAIT']) * c_fwt * df.c_ivt,,,,,1,,,,,
util_WALK_LOC_transfer_wait_time,WALK_LOC - transfer wait time,@(odt_skims['WALK_LOC_XFERWAIT']) * c_xwt * df.c_ivt,,,,,1,,,,,
util_WALK_LOC_Walk_access_time,WALK_LOC - Walk access time,"@np.where(df.nev_local_access_available_in & ~df.outbound, df.nev_local_access_time_in, np.where(df.microtransit_local_access_available_in & ~df.outbound, df.microtransit_local_access_time_in, df.origin_local_time)) * df.c_ivt * c_walk",,,,,1,,,,,
util_WALK_LOC_wait_access_time,WALK_LOC - Access mt/nev wait time,"@np.where(df.nev_local_access_available_in & ~df.outbound, nevWaitTime, np.where(df.microtransit_local_access_available_in & ~df.outbound, microtransitWaitTime, 0)) * df.c_ivt * 1.5",,,,,1,,,,,
util_WALK_LOC_Walk_egress_time,WALK_LOC - Walk egress time,"@np.where(df.nev_local_egress_available_out & df.outbound, df.nev_local_egress_time_out, np.where(df.microtransit_local_egress_available_out & df.outbound, df.microtransit_local_egress_time_out, df.dest_local_time)) * df.c_ivt * c_walk",,,,,1,,,,,
util_WALK_LOC_wait_egress_time,WALK_LOC - Egress mt/nev wait time,"@np.where(df.nev_local_egress_available_out & df.outbound, nevWaitTime, np.where(df.microtransit_local_egress_available_out & df.outbound, microtransitWaitTime, 0)) * df.c_ivt * 1.5",,,,,1,,,,,
util_WALK_LOC_transfer_walk_time,WALK_LOC - transfer walk time,@(odt_skims['WALK_LOC_XFERWALK']) * c_waux * df.c_ivt ,,,,,1,,,,,
util_WALK_LOC_transfers_penalty,WALK_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['WALK_LOC_XFERS'] + df.outbound*df.mtnev_egr_xfer_out + ~df.outbound*df.mtnev_acc_xfer_in, a_min=None,a_max=4))) * df.c_ivt * 1.5",,,,,1,,,,,
util_WALK_LOC_Fare,WALK_LOC - Fare,@(odt_skims['WALK_LOC_FARE']) * c_cost * 100,,,,,1,,,,,
Expand All @@ -32,7 +34,9 @@ util_WALK_PRM_transfer_wait_time,WALK_PRM - transfer wait time,@(odt_skims['WALK
util_WALK_PRM_transfer_waLK_time,WALK_PRM - transfer walk time,@(odt_skims['WALK_PRM_XFERWALK']) * c_waux * df.c_ivt ,,,,,,1,,,,
util_WALK_PRM_transfers_penalty,WALK_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['WALK_PRM_XFERS'] + df.outbound*df.mtnev_egr_xfer_out + ~df.outbound*df.mtnev_acc_xfer_in, a_min=None,a_max=4)))* df.c_ivt * 1.5 ",,,,,,1,,,,
util_WALK_PRM_Walk_access_time,WALK_PRM - Walk access time,"@np.where(df.nev_prm_access_available_in & ~df.outbound, df.nev_prm_access_time_in, np.where(df.microtransit_prm_access_available_in & ~df.outbound, df.microtransit_prm_access_time_in, df.origin_prm_time)) * df.c_ivt * c_walk",,,,,,1,,,,
util_WALK_PRM_wait_access_time,WALK_PRM - Access mt/nev wait time,"@np.where(df.nev_prm_access_available_in & ~df.outbound, nevWaitTime, np.where(df.microtransit_prm_access_available_in & ~df.outbound, microtransitWaitTime, 0)) * df.c_ivt * 1.5",,,,,,1,,,,
util_WALK_PRM_Walk_egress_time,WALK_PRM - Walk egress time,"@np.where(df.nev_prm_egress_available_out & df.outbound, df.nev_prm_egress_time_out, np.where(df.microtransit_prm_egress_available_out & df.outbound, df.microtransit_prm_egress_time_out, df.dest_prm_time)) * df.c_ivt * c_walk",,,,,,1,,,,
util_WALK_PRM_wait_egress_time,WALK_PRM - Egress mt/nev wait time,"@np.where(df.nev_prm_egress_available_out & df.outbound, nevWaitTime, np.where(df.microtransit_prm_egress_available_out & df.outbound, microtransitWaitTime, 0)) * df.c_ivt * 1.5",,,,,,1,,,,
util_WALK_PRM_Fare,WALK_PRM - Fare,@odt_skims['WALK_PRM_FARE'] * c_cost * 100,,,,,,1,,,,
util_WALK_PRM_ASC,ASC,asc_eb_prm,,,,,,1,,,,
util_cr_long_distance_prm,CR long distance bonus,"@(odt_skims['WALK_PRM_CMRIVTT'] > 10) * df.c_ivt * -1.0 * (np.clip(odt_skims['WALK_PRM_CMRIVTT'], a_min=None, a_max=60) + np.where(odt_skims['WALK_PRM_CMRIVTT'] > 40, (odt_skims['WALK_PRM_CMRIVTT'] - 40) * 0.6, 0))",,,,,,1,,,,
Expand All @@ -47,14 +51,16 @@ util_WALK_MIX_FIRST_wait_time,WALK_MIX - First wait time,@(odt_skims['WALK_MIX_F
util_WALK_MIX_transfer_wait_time,WALK_MIX - transfer wait time,@(odt_skims['WALK_MIX_XFERWAIT']) * c_xwt * df.c_ivt,,,,,,,1,,,
util_WALK_MIX_number_of_transfers,WALK_MIX - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['WALK_MIX_XFERS'] + df.outbound*df.mtnev_egr_xfer_out + ~df.outbound*df.mtnev_acc_xfer_in, a_min=None,a_max=4))) * df.c_ivt * 1.5 ",,,,,,,1,,,
util_WALK_MIX_Walk_access_time,WALK_MIX - Walk access time,"@np.where(df.nev_mix_access_available_in & ~df.outbound, df.nev_mix_access_time_in, np.where(df.microtransit_mix_access_available_in & ~df.outbound, df.microtransit_mix_access_time_in, df.origin_mix_time)) * df.c_ivt * c_walk",,,,,,,1,,,
util_WALK_MIX_wait_access_time,WALK_MIX - Access mt/nev wait time,"@np.where(df.nev_mix_access_available_in & ~df.outbound, nevWaitTime, np.where(df.microtransit_mix_access_available_in & ~df.outbound, microtransitWaitTime, 0)) * df.c_ivt * 1.5",,,,,,,1,,,
util_WALK_MIX_Walk_egress_time,WALK_MIX - Walk egress time,"@np.where(df.nev_mix_egress_available_out & df.outbound, df.nev_mix_egress_time_out, np.where(df.microtransit_mix_egress_available_out & df.outbound, df.microtransit_mix_egress_time_out, df.dest_mix_time)) * df.c_ivt * c_walk",,,,,,,1,,,
util_WALK_MIX_wait_egress_time,WALK_MIX - Egress mt/nev wait time,"@np.where(df.nev_mix_egress_available_out & df.outbound, nevWaitTime, np.where(df.microtransit_mix_egress_available_out & df.outbound, microtransitWaitTime, 0)) * df.c_ivt * 1.5",,,,,,,1,,,
util_WALK_MIX_Walk_other_time,WALK_MIX - Walk other time,@(odt_skims['WALK_MIX_XFERWALK'])* c_waux * df.c_ivt ,,,,,,,1,,,
util_WALK_MIX_Fare,WALK_MIX - Fare,@(odt_skims['WALK_MIX_FARE']) * c_cost * 100,,,,,,,1,,,
util_WALK_MIX_ASC,ASC,"@df.asc_eb_mix * np.where(odt_skims['WALK_LOC_TOTALIVTT'] > 0, 0.5, 1)",,,,,,,1,,,
util_cr_long_distance_prm,CR long distance bonus,"@(odt_skims['WALK_PRM_CMRIVTT'] > 10) * df.c_ivt * -1.0 * (np.clip(odt_skims['WALK_PRM_CMRIVTT'], a_min=None, a_max=60) + np.where(odt_skims['WALK_PRM_CMRIVTT'] > 40, (odt_skims['WALK_PRM_CMRIVTT'] - 40) * 0.6, 0))",,,,,,,1,,,
#,,,,,,,,,,,,
util_TAXI_IVT,Taxi - In-vehicle time,c_ivt * s2_time_skims,,,,,,,,1,,
util_TAXI_wait,Taxi - Wait time,c_ivt * taxi_wait_time,,,,,,,,1,,
util_TAXI_wait,Taxi - Wait time,c_ivt * 1.5 * taxi_wait_time,,,,,,,,1,,
util_TAXI_cost,Taxi - Fare,@c_cost * ((taxi_base_fare + (df.s2_dist_skims * taxi_cost_per_mile) + (df.s2_time_skims * taxi_cost_per_minute)) * 100 + df.s2_cost_skims),,,,,,,,1,,
util_TNC_SINGLE_IVT,TNC Single - In-vehicle time,c_ivt * s2_time_skims,,,,,,,,,1,
util_TNC_SINGLE_wait,TNC Single - Wait time,c_ivt * 1.5 * tnc_single_wait_time,,,,,,,,,1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,42 +121,42 @@ nev total time,nev_time,"np.maximum(nev_direct_time + nevDiversionConstant, nevD
# Microtransit and NEV egress from transit,,
outbound microtransit egress from premium available,microtransit_local_egress_available_out,df.outbound & (microtransit_dest>0) & (dest_micro_local_dist>maxWalkIfMTAccessAvailable) & (dest_micro_local_dist<microtransitMaxDist) & microtransit_operating
outbound microtransit direct egress from premium time,microtransit_direct_local_egress_time_out,"dest_micro_local_dist/microtransitSpeed*60"
outbound microtransit egress from premium time,microtransit_local_egress_time_out,"microtransitWaitTime + np.maximum(microtransit_direct_local_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_local_egress_time_out)"
outbound microtransit egress from premium time,microtransit_local_egress_time_out,"np.maximum(microtransit_direct_local_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_local_egress_time_out)"
inbound microtransit access to premium available,microtransit_local_access_available_in,~df.outbound & (microtransit_orig>0) & (origin_micro_local_dist>maxWalkIfMTAccessAvailable) & (origin_micro_local_dist<microtransitMaxDist) & microtransit_operating
inbound microtransit direct access to premium time,microtransit_direct_local_access_time_in,"origin_micro_local_dist/microtransitSpeed*60"
inbound microtransit access to premium time,microtransit_local_access_time_in,"microtransitWaitTime + np.maximum(microtransit_direct_local_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_local_access_time_in)"
inbound microtransit access to premium time,microtransit_local_access_time_in,"np.maximum(microtransit_direct_local_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_local_access_time_in)"
outbound nev egress from premium available,nev_local_egress_available_out,df.outbound & (nev_dest>0) & (dest_micro_local_dist>maxWalkIfMTAccessAvailable) & (dest_micro_local_dist<nevMaxDist) & nev_operating
outbound nev direct egress from premium time,nev_direct_local_egress_time_out,"dest_micro_local_dist/nevSpeed*60"
outbound nev egress from premium time,nev_local_egress_time_out,"nevWaitTime + np.maximum(nev_direct_local_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_local_egress_time_out)"
outbound nev egress from premium time,nev_local_egress_time_out,"np.maximum(nev_direct_local_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_local_egress_time_out)"
inbound nev access to premium available,nev_local_access_available_in,~df.outbound & (nev_orig>0) & (origin_micro_local_dist>maxWalkIfMTAccessAvailable) & (origin_micro_local_dist<nevMaxDist) & nev_operating
inbound nev direct access to premium time,nev_direct_local_access_time_in,"origin_micro_local_dist/nevSpeed*60"
inbound nev access to premium time,nev_local_access_time_in,"nevWaitTime + np.maximum(nev_direct_local_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_local_access_time_in)"
inbound nev access to premium time,nev_local_access_time_in,"np.maximum(nev_direct_local_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_local_access_time_in)"
#,,
outbound microtransit egress from premium available,microtransit_prm_egress_available_out,df.outbound & (microtransit_dest>0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist<microtransitMaxDist) & microtransit_operating
outbound microtransit direct egress from premium time,microtransit_direct_prm_egress_time_out,"dest_micro_prm_dist/microtransitSpeed*60"
outbound microtransit egress from premium time,microtransit_prm_egress_time_out,"microtransitWaitTime + np.maximum(microtransit_direct_prm_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_prm_egress_time_out)"
outbound microtransit egress from premium time,microtransit_prm_egress_time_out,"np.maximum(microtransit_direct_prm_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_prm_egress_time_out)"
inbound microtransit access to premium available,microtransit_prm_access_available_in,~df.outbound & (microtransit_orig>0) & (origin_micro_prm_dist>maxWalkIfMTAccessAvailable) & (origin_micro_prm_dist<microtransitMaxDist) & microtransit_operating
inbound microtransit direct access to premium time,microtransit_direct_prm_access_time_in,"origin_micro_prm_dist/microtransitSpeed*60"
inbound microtransit access to premium time,microtransit_prm_access_time_in,"microtransitWaitTime + np.maximum(microtransit_direct_prm_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_prm_access_time_in)"
inbound microtransit access to premium time,microtransit_prm_access_time_in,"np.maximum(microtransit_direct_prm_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_prm_access_time_in)"
outbound nev egress from premium available,nev_prm_egress_available_out,df.outbound & (nev_dest>0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist<nevMaxDist) & nev_operating
outbound nev direct egress from premium time,nev_direct_prm_egress_time_out,"dest_micro_prm_dist/nevSpeed*60"
outbound nev egress from premium time,nev_prm_egress_time_out,"nevWaitTime + np.maximum(nev_direct_prm_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_prm_egress_time_out)"
outbound nev egress from premium time,nev_prm_egress_time_out,"np.maximum(nev_direct_prm_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_prm_egress_time_out)"
inbound nev access to premium available,nev_prm_access_available_in,~df.outbound & (nev_orig>0) & (origin_micro_prm_dist>maxWalkIfMTAccessAvailable) & (origin_micro_prm_dist<nevMaxDist) & nev_operating
inbound nev direct access to premium time,nev_direct_prm_access_time_in,"origin_micro_prm_dist/nevSpeed*60"
inbound nev access to premium time,nev_prm_access_time_in,"nevWaitTime + np.maximum(nev_direct_prm_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_prm_access_time_in)"
inbound nev access to premium time,nev_prm_access_time_in,"np.maximum(nev_direct_prm_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_prm_access_time_in)"
#,,
outbound microtransit egress from premium available,microtransit_mix_egress_available_out,df.outbound & (microtransit_dest>0) & (dest_micro_mix_dist>maxWalkIfMTAccessAvailable) & (dest_micro_mix_dist<microtransitMaxDist) & microtransit_operating
outbound microtransit direct egress from premium time,microtransit_direct_mix_egress_time_out,"dest_micro_mix_dist/microtransitSpeed*60"
outbound microtransit egress from premium time,microtransit_mix_egress_time_out,"microtransitWaitTime + np.maximum(microtransit_direct_mix_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_mix_egress_time_out)"
outbound microtransit egress from premium time,microtransit_mix_egress_time_out,"np.maximum(microtransit_direct_mix_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_mix_egress_time_out)"
inbound microtransit access to premium available,microtransit_mix_access_available_in,~df.outbound & (microtransit_orig>0) & (origin_micro_mix_dist>maxWalkIfMTAccessAvailable) & (origin_micro_mix_dist<microtransitMaxDist) & microtransit_operating
inbound microtransit direct access to premium time,microtransit_direct_mix_access_time_in,"origin_micro_mix_dist/microtransitSpeed*60"
inbound microtransit access to premium time,microtransit_mix_access_time_in,"microtransitWaitTime + np.maximum(microtransit_direct_mix_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_mix_access_time_in)"
inbound microtransit access to premium time,microtransit_mix_access_time_in,"np.maximum(microtransit_direct_mix_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_mix_access_time_in)"
outbound nev egress from premium available,nev_mix_egress_available_out,df.outbound & (nev_dest>0) & (dest_micro_mix_dist>maxWalkIfMTAccessAvailable) & (dest_micro_mix_dist<nevMaxDist) & nev_operating
outbound nev direct egress from premium time,nev_direct_mix_egress_time_out,"dest_micro_mix_dist/nevSpeed*60"
outbound nev egress from premium time,nev_mix_egress_time_out,"nevWaitTime + np.maximum(nev_direct_mix_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_mix_egress_time_out)"
outbound nev egress from premium time,nev_mix_egress_time_out,"np.maximum(nev_direct_mix_egress_time_out + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_mix_egress_time_out)"
inbound nev access to premium available,nev_mix_access_available_in,~df.outbound & (nev_orig>0) & (origin_micro_mix_dist>maxWalkIfMTAccessAvailable) & (origin_micro_mix_dist<nevMaxDist) & nev_operating
inbound nev direct access to premium time,nev_direct_mix_access_time_in,"origin_micro_mix_dist/nevSpeed*60"
inbound nev access to premium time,nev_mix_access_time_in,"nevWaitTime + np.maximum(nev_direct_mix_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_mix_access_time_in)"
inbound nev access to premium time,nev_mix_access_time_in,"np.maximum(nev_direct_mix_access_time_in + microtransitDiversionConstant, microtransitDiversionFactor*nev_direct_mix_access_time_in)"
# Additional transfers from microtransit and NEV,,
microtransit/nev access transfer,mtnev_acc_xfer_in,microtransit_local_access_available_in | microtransit_prm_access_available_in | microtransit_mix_access_available_in | nev_local_access_available_in | nev_prm_access_available_in | nev_mix_access_available_in
microtransit/nev egress transfer,mtnev_egr_xfer_out,microtransit_local_egress_available_out | microtransit_prm_egress_available_out | microtransit_mix_egress_available_out | nev_local_egress_available_out | nev_prm_egress_available_out | nev_mix_egress_available_out
Loading

0 comments on commit f9fef4f

Please sign in to comment.