diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 79f5197..dcc04f1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,7 +58,7 @@ jobs: - name: Update environment run: | - mamba env update -n asim-test -f activitysim/conda-environments/github-actions-tests.yml + conda env update -n asim-test -f activitysim/conda-environments/github-actions-tests.yml if: steps.cache.outputs.cache-hit != 'true' - name: Install activitysim diff --git a/configs/common/constants.yaml b/configs/common/constants.yaml index f1655aa..19cc17c 100644 --- a/configs/common/constants.yaml +++ b/configs/common/constants.yaml @@ -8,17 +8,6 @@ NO_EXTERNAL: 0 # set below to be 1 for years before 2021, 0 otherwise PRE_COVID: 0 -walk_speed: 3 #mph - -#HHT_NONE: 0 -#HHT_FAMILY_MARRIED: 1 -#HHT_FAMILY_MALE: 2 -#HHT_FAMILY_FEMALE: 3 -#HHT_NONFAMILY_MALE_ALONE: 4 -#HHT_NONFAMILY_MALE_NOTALONE: 5 -#HHT_NONFAMILY_FEMALE_ALONE: 6 -#HHT_NONFAMILY_FEMALE_NOTALONE: 7 - # convenience for expression files HHT_NONFAMILY: [4, 5, 6, 7] HHT_FAMILY: [1, 2, 3] @@ -94,7 +83,7 @@ distributed_time_factor_max: 10 c_drive: 1.5 -useAV: 0 +AV_OWNERSHIP_TARGET_PERCENT: 0.0 autoIVTFactorAV: 0.75 autoParkingCostFactorAV: 0.5 autoCostPerMileFactorAV: 0.7 @@ -103,7 +92,7 @@ minAgeDriveAloneAV: 13 #valueOfTime: 8.00 -costPerMile: 18.29 +costPerMile: 32.5 costShareSr2: 1.75 costShareSr3: 2.50 waitThresh: 10.00 @@ -111,7 +100,6 @@ walkThresh: 1.50 shortWalk: 0.333 longWalk: 0.667 walkSpeed: 3.00 -bikeThresh: 6.00 bikeSpeed: 7.80 ebikeSpeed: 10.00 escooterSpeed: 6.70 @@ -119,18 +107,6 @@ driveSpeed: 25.00 maxCbdAreaTypeThresh: 2 indivTour: 1.00000 -#### [NICK] WHAT ARE THESE? DO WE EVEN NEED THESE? -upperEA: 5 -upperAM: 10 -upperMD: 15 -upperPM: 19 - -# SHOULD IT BE THIS? -# upperEA: 6 -# upperAM: 12 -# upperMD: 25 -# upperPM: 32 - ### Crosswalk between SOC codes and SANDAG occupation classification soc_occupation_xwalk: 11: mngt_busi_scic_arts # 11 - Management Occupations @@ -159,9 +135,9 @@ soc_occupation_xwalk: 99: # 99 - Non-workers, Code not part of SOC system # RIDEHAIL Settings -Taxi_baseFare: 2.20 -Taxi_costPerMile: 2.30 -Taxi_costPerMinute: 0.10 +Taxi_baseFare: 3.00 +Taxi_costPerMile: 3.3 +Taxi_costPerMinute: 0.46 Taxi_waitTime_mean: 1: 5.5 2: 9.5 @@ -175,10 +151,10 @@ Taxi_waitTime_sd: 3: 6.4 4: 6.4 5: 6.4 -TNC_single_baseFare: 2.20 -TNC_single_costPerMile: 1.33 -TNC_single_costPerMinute: 0.24 -TNC_single_costMinimum: 7.20 +TNC_single_baseFare: 3.31 +TNC_single_costPerMile: 0.96 +TNC_single_costPerMinute: 0.33 +TNC_single_costMinimum: 9.19 TNC_single_waitTime_mean: 1: 3.0 2: 6.3 @@ -191,10 +167,10 @@ TNC_single_waitTime_sd: 3: 4.1 4: 4.1 5: 4.1 -TNC_shared_baseFare: 2.20 -TNC_shared_costPerMile: 0.53 -TNC_shared_costPerMinute: 0.10 -TNC_shared_costMinimum: 3.00 +TNC_shared_baseFare: 1.66 +TNC_shared_costPerMile: 0.48 +TNC_shared_costPerMinute: 0.16 +TNC_shared_costMinimum: 4.6 TNC_shared_IVTFactor: 1.5 TNC_shared_waitTime_mean: 1: 5.0 @@ -211,15 +187,18 @@ TNC_shared_waitTime_sd: min_waitTime: 0 max_waitTime: 50 -ivt_lrt_multiplier: 0.65 +# rapid bus wait time discount +WAIT_TIME_DISC: 1.0 + +ivt_lrt_multiplier: 0.85 ivt_brt_multiplier: 0.95 -ivt_cmr_multiplier: 0.65 +ivt_cmr_multiplier: 0.85 ivt_ltd_multiplier: 1.0 ivt_cost_multiplier: 0.6 # line-haul mode constants; note commuter rail is based on CMRIVTT. Also currently hyperloop is not applied because we do not skim hyperloop IVTT eb_equiv_asc: 10 brt_equiv_asc: -5 -lrt_equiv_asc: -20 +lrt_equiv_asc: -30 hyp_equiv_asc: -20 pnr_lrt_equiv_asc: -20 # @@ -263,10 +242,9 @@ torrypines_maz: 4093 # Micromobility constants microSpeed: 12 -microVarCost: 20 #cents +microVarCost: 39 #cents microFixedCost: 100 #cents microRentTime: 1 -microConstant: 60 microAccessThreshold: 100 ebikeownership: 0.008 ebikeMaxDist: 10.50 @@ -277,20 +255,46 @@ microtransitSpeed: 30 microtransitCost: 125 #cents microtransitWaitTime: 12 microtransitMaxDist: 4.5 -microtransitDiversionConstant: 5 +microtransitDiversionConstant: 6 microtransitDiversionFactor: 1.25 +microtransitStartPeriod: 9 +microtransitEndPeriod: 32 nevSpeed: 17 nevCost: 125 #cents nevWaitTime: 12 nevMaxDist: 3 nevDwellMinutesPerMile: 0.5 -nevDiversionConstant: 5 +nevDiversionConstant: 6 nevDiversionFactor: 1.25 -maxWalkIfMTAccessAvailable: 0.5 # Maximum distance to walk to premium transit if microtransit access is available +nevStartPeriod: 9 +nevEndPeriod: 38 +maxWalkIfMTAccessAvailable: 1.0 # Maximum distance to walk to premium transit if microtransit access is available # cost of "average" monthly transit pass cost. Used in transit pass ownership model. # cost of pass divided by 2 for age < 18 and 65+. monthly_transit_pass_cost: 100 # year after which a vehicle (therefore its household) must have transponder -hhTR_Vehyear: 2035 +hhTR_Vehyear: 2029 + +# SHARED2 and SHARED3 Occupancies +OCC_SHARED2: 2.0 +OCC_SHARED3: 3.33 +# add TNC and Taxi Occupancies +OCC_TAXI: 1.1 +OCC_TNC_SINGLE: 1.2 +OCC_TNC_SHARED: 2.0 + +# EV Rebate constants +LowIncomeEVRebateCutoff: 3 +MedIncomeEVRebateCutoff: 4 +LowIncomeBEVRebate: 0 +LowIncomePEVRebate: 0 +MedIncomeBEVRebate: 0 +MedIncomePEVRebate: 0 + +# MGRAs for Ports of Entry +SanYsidro_maz_id: 9279 +OtayMesa_maz_id: 9387 +Tecate_maz_id: 22324 +OtayMesaEast_maz_id: 7123 diff --git a/configs/common/network_los.yaml b/configs/common/network_los.yaml index 50dc90b..775b2df 100644 --- a/configs/common/network_los.yaml +++ b/configs/common/network_los.yaml @@ -10,19 +10,6 @@ read_skim_cache: False # write memmapped cached skims to output directory after reading from omx, for use in subsequent runs write_skim_cache: False -# taz_skims: -# - traffic_skims_processed_EA.omx -# - traffic_skims_processed_AM.omx -# - traffic_skims_processed_MD.omx -# - traffic_skims_processed_PM.omx -# - traffic_skims_processed_EV.omx -# #- transit_skims_processed.omx -# - transit_skims_EA.omx -# - transit_skims_AM.omx -# - transit_skims_MD.omx -# - transit_skims_PM.omx -# - transit_skims_EV.omx - # series15 taz_skims: - traffic_skims*.omx @@ -41,8 +28,6 @@ maz_to_maz: skim_time_periods: time_window: 1440 period_minutes: 30 - # periods: [0, 11, 17, 30, 37, 48] # asim xborder - # periods: [0, 3, 9, 22, 29, 48] # ctramp xborder periods: [0, 6, 12, 25, 32, 48] # time periods to match documentation labels: &skim_time_period_labels ['EA', 'AM', 'MD', 'PM', 'EV'] @@ -51,25 +36,3 @@ demographic_segments: &demographic_segments - &high_income_segment_id 1 - -# CONSTANTS: -# c_ivt: -0.028 -# c_cost: -0.0011 -# # transit "factors" from SANDAG -# eb_fac: 1.0 -# brt_fac: 0.9000 -# lrt_fac: 0.6500 -# cr_fac: 0.6500 -# hyp_fac: 0.6500 -# # coeffs used in maz_tap and tap_tap utility expressions -# c_walk: 1.7 -# c_fwt: 1.5 -# c_waux: 2.5 -# c_xwt: 2 -# C_UNAVAILABLE: -9999 -# # alternative-specific constants -# exp_asc: 10 # express bus asc -# brt_asc: -10 # BRT asc -# lrt_asc: -20 # LRT alternative-specific constant -# cr_asc: 0.00 # Commuter Rail alternative-specific constant - diff --git a/configs/common/outputs.yaml b/configs/common/outputs.yaml index d4762d4..4915aa4 100644 --- a/configs/common/outputs.yaml +++ b/configs/common/outputs.yaml @@ -434,11 +434,49 @@ trips: - is_drive_loc - is_drive_prm - is_drive_mix + - parkingCost + - is_ea + - is_am + - is_md + - is_pm + - is_ev + - ownTrp + - vot1 + - vot2 + - vot3 + - vot_bin_da + - vot_bin_s2 + - vot_bin_s3 + - failed + - parkLocation1Cost + - parkLocation2Cost + - parkLocation3Cost + - parkLocation4Cost + - parkLocation5Cost + - partySizeRideHailLocation1AutoDist + - partySizeRideHailLocation2AutoDist + - s2_dist_skims + - s2_time_skims + - s2_cost_skims + - da_dist_skims + - s3_time_skims + - s3_dist_skims + - s3_cost_skims + - c_ivt + - c_fwt + - c_xwt + - c_wacc + - c_wegr + - c_waux + - c_xfers + - c_walk_time + - c_xfers_pnr + - cost_per_mile rename_columns: distance: distance_total weightTrip: weight_trip - weightPersonTrip: weight_person_trip + weightPersonTrip: weight_person_trip weightPerson_trip: weight_person_trip timeDrive: time_drive ownsTransponder: owns_transponder @@ -459,6 +497,14 @@ trips: costFareTransit: cost_fare_transit costTotal: cost_total transfersTransit: transfers_transit + microtransit_mix_access_available_out: microtransit_access_available_out + nev_mix_access_available_out: nev_access_available_out + microtransit_mix_egress_available_out: microtransit_egress_available_out + nev_mix_egress_available_out: nev_egress_available_out + microtransit_mix_access_available_in: microtransit_access_available_in + nev_mix_access_available_in: nev_access_available_in + microtransit_mix_egress_available_in: microtransit_egress_available_in + nev_mix_egress_available_in: nev_egress_available_in households: remove_columns: @@ -575,6 +621,33 @@ households: - emp_non_ws_oth - budgetroom - economyroom + - hh_work_auto_savings_ratio + - adultschenrl + - total_emp_revised + # - num_children + - num_young_children + - num_children_6_to_12 + - num_children_5_to_15 + - num_children_16_to_17 + - num_gradeschool + - num_highschool + - num_college_age + - num_young_adults + - num_predrive_child + # - num_nonworker_adults + - num_university_students + - num_fullTime_workers + - num_partTime_workers + - num_retired_adults + - num_highschool_graduates + - num_children_6_to_15 + - num_young_retirees + - num_old_retirees + - non_family + - family + - home_is_urban + - home_is_rural + - num_hh_in_zone rename_columns: bldgsz: building_category hhid: household_id @@ -778,11 +851,64 @@ land_use: persons: remove_columns: - naics2_original_code + - age_16_to_19 + - age_16_p + - adult + - male + - female + - has_non_worker + - has_retiree + - has_preschool_kid + - has_driving_kid + - has_school_kid + - has_full_time + - has_part_time + - has_university + - student_is_employed + - nonstudent_to_school + - is_preschool + - is_gradeschool + - is_highschool + - is_university + - is_fulltime_worker + - is_parttime_worker + - is_income_less25K + - is_income_25K_to_60K + - is_income_60K_to_120K + - is_income_greater60K + - is_income_greater120K + - is_non_worker_in_HH + - is_all_adults_full_time_workers + - is_pre_drive_child_in_HH + - workplace_in_cbd + - under16_not_at_school + - has_preschool_kid_at_home + - has_school_kid_at_home + - work_and_school_and_worker + - work_and_school_and_student + - has_pre_school_child_with_mandatory + - has_driving_age_child_with_mandatory + - num_non_escort_tours + - num_shop_maint_tours + - num_shop_maint_escort_tours + - num_soc_discr_tours + - demographic_segment + - time_distrib_mean_work + - time_distrib_stddev_nonwork + - time_distrib_mean_nonwork + - time_distrib_stddev_work + rename_columns: rac1p: race hisp: hispanic perid: person_id tours: + remove_columns: + - tour_id_temp + - purpose + - mode_segment + - free_parking_at_work + rename_columns: vehicle_occup_3.5: vehicle_occup_3_5 \ No newline at end of file diff --git a/configs/resident/cdap_indiv_and_hhsize1.csv b/configs/resident/cdap_indiv_and_hhsize1.csv index 1f07f76..90f7ae0 100644 --- a/configs/resident/cdap_indiv_and_hhsize1.csv +++ b/configs/resident/cdap_indiv_and_hhsize1.csv @@ -56,11 +56,11 @@ Retired weighted target ASC,ptype == 5,,-0.131,0.313 Driving-age child who is in school weighted target ASC,ptype == 6,-0.134,0.314,0.026 Pre-driving-age child who is in school weighted target ASC,ptype == 7,0.028,-0.084,0.010 Preschool child weighted target ASC,ptype == 8,0.104,-0.223,0.116 -ABM3 calibration ASC ptype=1,ptype==1,0.5540,-0.218,-0.427 -ABM3 calibration ASC ptype=2,ptype==2,-0.107,0.0276,0.223 -ABM3 calibration ASC ptype=3,ptype==3,0.427,-0.198,-0.164 -ABM3 calibration ASC ptype=4,ptype==4,0.0,-0.029,0.0889 -ABM3 calibration ASC ptype=5,ptype==5,0.0,0.114,-0.227 -ABM3 calibration ASC ptype=6,ptype==6,3.650,-0.241,0.298 -ABM3 calibration ASC ptype=7,ptype==7,2.000,-0.171,0.096 -ABM3 calibration ASC ptype=8,ptype==8,0.436,0.454,-0.731 \ No newline at end of file +ABM3 calibration ASC ptype=1,ptype==1,0.600,0.00,-0.527 +ABM3 calibration ASC ptype=2,ptype==2,-0.107,0.0276,0.190 +ABM3 calibration ASC ptype=3,ptype==3,0.427,-0.120,-0.200 +ABM3 calibration ASC ptype=4,ptype==4,0.0,0.00,0.0889 +ABM3 calibration ASC ptype=5,ptype==5,0.0,0.134,-0.227 +ABM3 calibration ASC ptype=6,ptype==6,3.750,-0.241,0.298 +ABM3 calibration ASC ptype=7,ptype==7,2.200,-0.171,0.096 +ABM3 calibration ASC ptype=8,ptype==8,0.536,0.454,-0.731 \ No newline at end of file diff --git a/configs/resident/external_non_mandatory_identification.csv b/configs/resident/external_non_mandatory_identification.csv index 74823ce..3e97e0a 100644 --- a/configs/resident/external_non_mandatory_identification.csv +++ b/configs/resident/external_non_mandatory_identification.csv @@ -12,6 +12,7 @@ util_inc_15_50,Income 15 to 50k,"@np.where((df['income']>=15000) * (df['income'] util_inc_100_250,Income 100k to 250k,"@np.where((df['income']>=100000) * (df['income']<=249999),1,0)",coef_income_100_250, util_inc_250plus,Income 250k plus,"@np.where(df['income']>=250000,1,0)",coef_income_250_plus, util_autos_0,0 auto household,"@np.where(df.auto_ownership==0,1,0)",coef_autos_0, +util_is_pure_escort,Pure escort tours cannot have an external destination,"@np.where((df.school_esc_outbound == 'pure_escort')|(df.school_esc_inbound == 'pure_escort'), 1, 0)",-999, util_global_switch,Global switch to have everything internal,@NO_EXTERNAL,-999, util_dist_lt_2p5,Distance less than 2.5 miles,"@np.where(df.dist_to_external_zone<2.5,1,0)",coef_dist_lt_2p5, util_calibration,,1,0.43, diff --git a/configs/resident/external_student_identification.yaml b/configs/resident/external_student_identification.yaml index 80074cb..1999c0f 100644 --- a/configs/resident/external_student_identification.yaml +++ b/configs/resident/external_student_identification.yaml @@ -12,4 +12,4 @@ CHOOSER_FILTER_COLUMN_NAME: is_student # Adds this column to the persons table and is set to True if workplace is external EXTERNAL_COL_NAME: is_external_student # set to True if not external but CHOOSER_FILTER_COLUMN_NAME is True -INTERNAL_COL_NAME: is_internal_student \ No newline at end of file +INTERNAL_COL_NAME: is_internal_student diff --git a/configs/resident/external_workplace_location.yaml b/configs/resident/external_workplace_location.yaml index 7ac527b..f106547 100644 --- a/configs/resident/external_workplace_location.yaml +++ b/configs/resident/external_workplace_location.yaml @@ -50,4 +50,4 @@ SEGMENT_IDS: # MODELED_SIZE_TABLE: workplace_modeled_size # not loaded if commented out -# SAVED_SHADOW_PRICE_TABLE_NAME: workplace_shadow_prices.csv \ No newline at end of file +# SAVED_SHADOW_PRICE_TABLE_NAME: workplace_shadow_prices.csv diff --git a/configs/resident/joint_tour_frequency_composition.csv b/configs/resident/joint_tour_frequency_composition.csv index a680104..3d1360a 100644 --- a/configs/resident/joint_tour_frequency_composition.csv +++ b/configs/resident/joint_tour_frequency_composition.csv @@ -70,7 +70,7 @@ util_number_of_active_nonworkers_adult_party,Number of Active Non-workers /Adult util_number_of_active_retirees_adult_party,Number of Active Retirees /Adult Party,num_travel_active_retirees * (party1==1) + num_travel_active_retirees * (party2==1),coef_number_of_active_retirees_adult_party util_number_of_active_driving_age_school_children_children_party,Number of Active Driving Age School Children /Children Party,num_travel_active_driving_age_students * (party1==1) + num_travel_active_driving_age_students * (party2==1),coef_number_of_active_driving_age_school_children_children_party util_number_of_active_pre_driving_age_school_children_children_party,Number of Active Pre- Driving Age School Children /Children Party,num_travel_active_pre_driving_age_school_kids * (party1==2) + num_travel_active_pre_driving_age_school_kids * (party2==2),coef_number_of_active_pre_driving_age_school_children_children_party -util_number_of_active_part_time_workers_mixed_party,Number of Active Part time workers /Mixed Party,num_travel_active_part_time_workers * (party1==2) + num_travel_active_part_time_workers * (party2==2),coef_number_of_active_part_time_workers_mixed_party +util_number_of_active_part_time_workers_mixed_party,Number of Active Part time workers /Mixed Party,num_travel_active_part_time_workers * (party1==3) + num_travel_active_part_time_workers * (party2==3),coef_number_of_active_part_time_workers_mixed_party util_number_of_active_driving_age_school_children_mixed_party,Number of Active Driving Age School Children /Mixed Party,num_travel_active_driving_age_students * (party1==3) + num_travel_active_driving_age_students * (party2==3),coef_number_of_active_driving_age_school_children_mixed_party util_number_of_active_pre_driving_age_school_children_mixed_party,Number of Active Pre- Driving Age School Children /Mixed Party,num_travel_active_pre_driving_age_school_kids * (party1==3) + num_travel_active_pre_driving_age_school_kids * (party2==3),coef_number_of_active_pre_driving_age_school_children_mixed_party util_number_of_active_preschool_children_mixed_party,Number of Active Preschool Children /Mixed Party,num_travel_active_pre_school_kids * (party1==3) + num_travel_active_pre_school_kids * (party2==3),coef_number_of_active_preschool_children_mixed_party diff --git a/configs/resident/joint_tour_frequency_composition.yaml b/configs/resident/joint_tour_frequency_composition.yaml index 2199196..452ec92 100644 --- a/configs/resident/joint_tour_frequency_composition.yaml +++ b/configs/resident/joint_tour_frequency_composition.yaml @@ -32,4 +32,4 @@ ALTS_TABLE_STRUCTURE: VALUE_MAP: 1: adults 2: children - 3: mixed + 3: mixed \ No newline at end of file diff --git a/configs/resident/non_mandatory_tour_destination.csv b/configs/resident/non_mandatory_tour_destination.csv index 42a6f55..b967435 100644 --- a/configs/resident/non_mandatory_tour_destination.csv +++ b/configs/resident/non_mandatory_tour_destination.csv @@ -66,7 +66,9 @@ util_indiv_0_2_ASC,indiv tours in 0_2bin calibration constant,"@(_DIST.between(0 util_indiv_2_5_ASC,indiv tours in 2_5bin calibration constant,"@(_DIST.between(2,5)) * (df.get('tour_category', default=False) != 'joint')",coef_abm3_dist_2_5indivescort_asc,coef_abm3_dist_2_5indivmaint_asc,coef_abm3_dist_2_5indivdisc_asc,coef_abm3_dist_2_5indivmaint_asc,coef_abm3_dist_2_5indivdisc_asc,coef_abm3_dist_2_5indivdisc_asc util_indiv_5_10_ASC,indiv tours in 5_10bin calibration constant,"@(_DIST.between(5,10)) * (df.get('tour_category', default=False) != 'joint')",coef_abm3_dist_5_10indivescort_asc,coef_abm3_dist_5_10indivmaint_asc,coef_abm3_dist_5_10indivdisc_asc,coef_abm3_dist_5_10indivmaint_asc,coef_abm3_dist_5_10indivdisc_asc,coef_abm3_dist_5_10indivdisc_asc util_indiv_10_30_ASC,indiv tours in 10_30bin calibration constant,"@(_DIST.between(10,30)) * (df.get('tour_category', default=False) != 'joint')",coef_abm3_dist_10_30indivescort_asc,coef_abm3_dist_10_30indivmaint_asc,coef_abm3_dist_10_30indivdisc_asc,coef_abm3_dist_10_30indivmaint_asc,coef_abm3_dist_10_30indivdisc_asc,coef_abm3_dist_10_30indivdisc_asc +util_indiv_dist_ASC,indiv tours in distance calibration constant,"@(_DIST) * (df.get('tour_category', default=False) != 'joint')",,0.05,,0.05,, util_joint_0_2_ASC,joint tours in 0_2bin calibration constant,"@(_DIST.between(0,2)) * (df.get('tour_category', default=False) == 'joint')",,coef_abm3_dist_0_2jointmaint_asc,coef_abm3_dist_0_2jointdisc_asc,coef_abm3_dist_0_2jointmaint_asc,coef_abm3_dist_0_2jointdisc_asc,coef_abm3_dist_0_2jointdisc_asc util_joint_2_5_ASC,joint tours in 2_5bin calibration constant,"@(_DIST.between(2,5)) * (df.get('tour_category', default=False) == 'joint')",,coef_abm3_dist_2_5jointmaint_asc,coef_abm3_dist_2_5jointdisc_asc,coef_abm3_dist_2_5jointmaint_asc,coef_abm3_dist_2_5jointdisc_asc,coef_abm3_dist_2_5jointdisc_asc util_joint_5_10_ASC,joint tours in 5_10bin calibration constant,"@(_DIST.between(5,10)) * (df.get('tour_category', default=False) == 'joint')",,coef_abm3_dist_5_10jointmaint_asc,coef_abm3_dist_5_10jointdisc_asc,coef_abm3_dist_5_10jointmaint_asc,coef_abm3_dist_5_10jointdisc_asc,coef_abm3_dist_5_10jointdisc_asc util_joint_10_30_ASC,joint tours in 10_30bin calibration constant,"@(_DIST.between(10,30)) * (df.get('tour_category', default=False) == 'joint')",,coef_abm3_dist_10_30jointmaint_asc,coef_abm3_dist_10_30jointdisc_asc,coef_abm3_dist_10_30jointmaint_asc,coef_abm3_dist_10_30jointdisc_asc,coef_abm3_dist_10_30jointdisc_asc +util_indiv_dist_ASC,indiv tours in distance calibration constant,"@(_DIST) * (df.get('tour_category', default=False) == 'joint')",,0.10,,0.10,, \ No newline at end of file diff --git a/configs/resident/non_mandatory_tour_destination_coefficients.csv b/configs/resident/non_mandatory_tour_destination_coefficients.csv index 3b50ac7..09b4e02 100644 --- a/configs/resident/non_mandatory_tour_destination_coefficients.csv +++ b/configs/resident/non_mandatory_tour_destination_coefficients.csv @@ -3,13 +3,13 @@ coef_zero,0.0,T coef_mode_logsum,0.5,T coef_mode_logsum_socdisc,0.4,T #,, -coef_dist_escort,-1.033376651,F +coef_dist_escort,-1.09538,F coef_distsqrd_escort,0.022130838,F coef_distlowinc_escort,0.157496938,F coef_distage5664_escort,0.189508203,F coef_distage64plus_escort,0.309309986,F #,, -coef_dist_shopping,-0.255810802,F +coef_dist_shopping,-0.27116,F coef_distsqrd_shopping,-0.003098511,F coef_distcubed_shopping,0.0,F coef_distlogged_shopping,-0.229414306,F @@ -17,26 +17,26 @@ coef_distfemale_shopping,0.0,F coef_disttimepressure_shopping,0.029450792,F coef_accessibility_shopping,0.377323356,F #,, -coef_dist_eatout,0.094724831,F +coef_dist_eatout,0.10041,F coef_distsqrd_eatout,-0.029120711,F coef_distcubed_eatout,0.000647926,F coef_distlogged_eatout,-0.664600521,F coef_disttimepressure_eatout,0.027648186,F #,, -coef_dist_maint,-0.035327,F +coef_dist_maint,-0.03745,F coef_distsqrd_maint,-0.007959,F coef_distlowinc_maint,0.0,F coef_disttimepressure_maint,0.025736,F coef_distage1624_maint,-0.503857,F #,, -coef_dist_social,-0.082372,F +coef_dist_social,-0.08731,F coef_distsqrd_social,-0.003052,F coef_distcubed_social,0.0,F coef_distlogged_social,-0.430261,F coef_distlowinc_social,0.038684,F coef_distmidlowinc_social,0.0,F #,, -coef_dist_discr,0.543421359,F +coef_dist_discr,0.57603,F coef_distsqrd_discr,-0.065310929,F coef_distcubed_discr,0.001719762,F coef_distlogged_discr,-1.524851692,F diff --git a/configs/resident/parking_location_choice.csv b/configs/resident/parking_location_choice.csv index 786328c..fab6c98 100644 --- a/configs/resident/parking_location_choice.csv +++ b/configs/resident/parking_location_choice.csv @@ -1,12 +1,12 @@ -Description,Expression,no_segmentation -Person is worker,_person_is_worker@((df.ptype == 1) | (df.ptype == 2)),1 -Trip is work purpose,_work_trip@(df.purpose == 'work'),1 -Parking to destination distance skim,_walk_distance@pd_skims['walkTime'] / 60 * walkSpeed,1 -#,, -# actual utility terms starts from here,, -Log of parking size,"@np.where(df.parking_spaces>0,np.log(df.parking_spaces),-999)",1 -Cost work trip,"@np.where(df.purpose == 'work', df.cost_parking, 0)",coef_cost_work_trip -Cost other trip,"@np.where(df.purpose != 'work', df.cost_parking, 0)",coef_cost_other_trip -Walk distance,@_walk_distance,coef_walk_distance -Walk Unavailability,"@np.where(_walk_distance == 0, 1, 0)",coef_unavailable -Require parking zone to be less than 0.75 mile from dest,"@np.where(_walk_distance > 0.75, 1, 0) * (df.destination != df.parking_zone)",coef_unavailable +Description,Expression,segment_1,segment_2,segment_3 +Person is worker,_person_is_worker@((df.ptype == 1) | (df.ptype == 2)),1,1,1 +Trip is work purpose,_work_trip@(df.purpose == 'work'),1,1,1 +Parking to destination distance skim,_walk_distance@pd_skims['DISTWALK'],1,1,1 +#,,,, +# actual utility terms starts from here,,,, +Log of parking size,"@np.where(df.parking_spaces>0,np.log(df.parking_spaces),-999)",1,1,1 +Cost work trip,"@np.where(df.purpose == 'work', df.cost_parking, 0)",coef_cost_work_trip,coef_cost_work_trip,coef_cost_work_trip +Cost other trip,"@np.where(df.purpose != 'work', df.cost_parking, 0)",coef_cost_other_trip,coef_cost_other_trip,coef_cost_other_trip +Walk distance,@_walk_distance,coef_walk_distance,coef_walk_distance,coef_walk_distance +Walk Unavailability,"@np.where(_walk_distance == 0, 1, 0)",coef_unavailable,coef_unavailable,coef_unavailable +Require parking zone to be less than 0.75 mile from dest,"@np.where(_walk_distance > 0.75, 1, 0) * (df.destination != df.parking_zone)",coef_unavailable,coef_unavailable,coef_unavailable diff --git a/configs/resident/parking_location_choice_annotate_trips_preprocessor.csv b/configs/resident/parking_location_choice_annotate_trips_preprocessor.csv index d43e4be..d36c496 100644 --- a/configs/resident/parking_location_choice_annotate_trips_preprocessor.csv +++ b/configs/resident/parking_location_choice_annotate_trips_preprocessor.csv @@ -2,7 +2,7 @@ Description,Target,Expression Person Type,ptype,"reindex(persons.ptype, df.person_id)" Trip mode is drive,drive_trip,"df.trip_mode.isin(['DRIVEALONE', 'SHARED2', 'SHARED3'])" # putting all trips into the same parking segment,, -Parking segment,parking_segment,'no_segmentation' +Parking segment,parking_segment,"np.where(df['tour_id'] % 3 == 0, 'segment_1',np.where(df['tour_id'] % 3 == 1, 'segment_2','segment_3'))" Parking eligible trip,is_park_eligible,"(drive_trip & (df.purpose != 'home') & (reindex(land_use.parking_type,df.destination)==1))" Next Trip Departure,_next_trip_depart,df.groupby('tour_id')['depart'].shift() Activity duration,activity_duration,"np.where(_next_trip_depart.isna(), 0, _next_trip_depart - df.depart)" diff --git a/configs/resident/telecommute_frequency_coeffs.csv b/configs/resident/telecommute_frequency_coeffs.csv index 5d1b9f0..089828f 100644 --- a/configs/resident/telecommute_frequency_coeffs.csv +++ b/configs/resident/telecommute_frequency_coeffs.csv @@ -95,6 +95,6 @@ coef_manufacturing_4day,0.0,F coef_mgmt_srv_4day,0.970302573177628,F coef_military_4day,0.0,F coef_retail_4day,-2.2338993784519388,F -asc_1day,-2.5488707215613267,F -asc_23day,-1.5339620734289143,F -asc_4day,-1.947902150190833,F +asc_1day,-2.7588707215613267,F +asc_23day,-1.7439620734289143,F +asc_4day,-2.157902150190833,F diff --git a/configs/resident/tour_mode_choice.csv b/configs/resident/tour_mode_choice.csv index 7ebbf77..7078d54 100644 --- a/configs/resident/tour_mode_choice.csv +++ b/configs/resident/tour_mode_choice.csv @@ -1,22 +1,22 @@ Label,Description,Expression,DRIVEALONE,SHARED2,SHARED3,WALK,BIKE,WALK_LOC,WALK_PRM,WALK_MIX,PNR_LOC,PNR_PRM,PNR_MIX,KNR_LOC,KNR_PRM,KNR_MIX,TNC_LOC,TNC_PRM,TNC_MIX,TAXI,TNC_SINGLE,TNC_SHARED,SCH_BUS,EBIKE,ESCOOTER #,drivealone,,,,,,,,,,,,,,,,,,,,,,,, util_DRIVEALONE_Unavailable,DRIVEALONE - Unavailable,sov_available == False,-999,,,,,,,,,,,,,,,,,,,,,, -util_Drive alone - In-vehicle time,Drive alone - In-vehicle time,@(df.da_time_skims_inb + df.da_time_skims_out) * df.autoIVTFactor * df.time_factor,coef_ivt,,,,,,,,,,,,,,,,,,,,,, +util_Drive alone - In-vehicle time,Drive alone - In-vehicle time,@(df.da_time_skims_inb + df.da_time_skims_out) * df.autoIVTFactor_DA * df.time_factor,coef_ivt,,,,,,,,,,,,,,,,,,,,,, util_Drive alone - reliability - inb,Drive alone - reliability - inbound,"@(df.da_rel_skims_inb/np.minimum(df.da_dist_skims_inb,0.1)) * df.time_factor",coef_rel_inb,,,,,,,,,,,,,,,,,,,,,, util_Drive alone - reliability - out,Drive alone - reliability - outbound,"@(df.da_rel_skims_out/np.minimum(df.da_dist_skims_out,0.1)) * df.time_factor",coef_rel_out,,,,,,,,,,,,,,,,,,,,,, -util_Drive alone - cost - inb,Drive alone - cost - inbound,@(df.sov_auto_op_cost * df.autoCPMFactor * df.da_dist_skims_inb + df.da_cost_skims_inb)/df.cost_sensitivity,coef_income,,,,,,,,,,,,,,,,,,,,,, -util_Drive alone - cost - out,Drive alone - cost - outbound,@(df.sov_auto_op_cost * df.autoCPMFactor * df.da_dist_skims_out + df.da_cost_skims_out)/df.cost_sensitivity,coef_income,,,,,,,,,,,,,,,,,,,,,, -util_Drive alone - Parking cost ,Drive alone - Parking cost ,@(df.parkingCost*df.autoParkingCostFactor)/df.cost_sensitivity,coef_income,,,,,,,,,,,,,,,,,,,,,, -util_Drive alone - Terminal Time - acc,Drive alone - Terminal Time ,@(df.oTermTime + df.dTermTime) * df.autoTermTimeFactor * df.time_factor,coef_acctime,,,,,,,,,,,,,,,,,,,,,, +util_Drive alone - cost - inb,Drive alone - cost - inbound,@(df.sov_auto_op_cost * df.autoCPMFactor_DA * df.da_dist_skims_inb + df.da_cost_skims_inb)/df.cost_sensitivity,coef_income,,,,,,,,,,,,,,,,,,,,,, +util_Drive alone - cost - out,Drive alone - cost - outbound,@(df.sov_auto_op_cost * df.autoCPMFactor_DA * df.da_dist_skims_out + df.da_cost_skims_out)/df.cost_sensitivity,coef_income,,,,,,,,,,,,,,,,,,,,,, +util_Drive alone - Parking cost ,Drive alone - Parking cost ,@(df.parkingCost*df.autoParkingCostFactor_DA)/df.cost_sensitivity,coef_income,,,,,,,,,,,,,,,,,,,,,, +util_Drive alone - Terminal Time - acc,Drive alone - Terminal Time ,@(df.oTermTime + df.dTermTime) * df.autoTermTimeFactor_DA * df.time_factor,coef_acctime,,,,,,,,,,,,,,,,,,,,,, #,Shared ride2,,,,,,,,,,,,,,,,,,,,,,,, util_Shared2_Unavailable,Shared ride 2 - Unavailable,sr2_available == False,,-999,,,,,,,,,,,,,,,,,,,,, -util_Shared ride 2 - In -vehicle time,Shared ride 2 - In -vehicle time,@(df.s2_time_skims_inb + df.s2_time_skims_out) * df.autoIVTFactor * df.time_factor,,coef_ivt,,,,,,,,,,,,,,,,,,,,, +util_Shared ride 2 - In -vehicle time,Shared ride 2 - In -vehicle time,@(df.s2_time_skims_inb + df.s2_time_skims_out) * df.autoIVTFactor_SR2 * df.time_factor,,coef_ivt,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 - reliability - inb,Shared ride 2 - reliability - inbound,"@(df.s2_rel_skims_inb/np.minimum(df.s2_dist_skims_inb,0.1)) * df.time_factor",,coef_rel_inb,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 - reliability - out,Shared ride 2 - reliability - outband,"@(df.s2_rel_skims_out/np.minimum(df.s2_dist_skims_out,0.1))* df.time_factor",,coef_rel_out,,,,,,,,,,,,,,,,,,,,, -util_Shared ride 2 - cost - inb,Shared ride 2 - cost - inbound,@(df.sr2_auto_op_cost * df.autoCPMFactor * df.s2_dist_skims_inb + df.s2_cost_skims_inb)/df.cost_sensitivity,,coef_income,,,,,,,,,,,,,,,,,,,,, -util_Shared ride 2 - cost - out,Shared ride 2 - cost - outbound,@(df.sr2_auto_op_cost * df.autoCPMFactor* df.s2_dist_skims_out + df.s2_cost_skims_out)/df.cost_sensitivity,,coef_income,,,,,,,,,,,,,,,,,,,,, -util_Shared ride 2 - Parking cost ,Shared ride 2 - Parking cost ,@(df.parkingCost * df.costFactorS2 * df.autoParkingCostFactor)/df.cost_sensitivity,,coef_income,,,,,,,,,,,,,,,,,,,,, -util_Drive alone - Terminal Time - acc,Shared ride 2 - Terminal Time - access,@(df.oTermTime + df.dTermTime) * df.autoTermTimeFactor * df.time_factor,,coef_acctime,,,,,,,,,,,,,,,,,,,,, +util_Shared ride 2 - cost - inb,Shared ride 2 - cost - inbound,@(df.sr2_auto_op_cost * df.autoCPMFactor_SR2 * df.s2_dist_skims_inb + df.s2_cost_skims_inb)/df.cost_sensitivity,,coef_income,,,,,,,,,,,,,,,,,,,,, +util_Shared ride 2 - cost - out,Shared ride 2 - cost - outbound,@(df.sr2_auto_op_cost * df.autoCPMFactor_SR2* df.s2_dist_skims_out + df.s2_cost_skims_out)/df.cost_sensitivity,,coef_income,,,,,,,,,,,,,,,,,,,,, +util_Shared ride 2 - Parking cost ,Shared ride 2 - Parking cost ,"@(df.parkingCost * df.autoParkingCostFactor_SR2 * np.where(df.is_joint,1,df.costFactorS2))/df.cost_sensitivity",,coef_income,,,,,,,,,,,,,,,,,,,,, +util_Drive alone - Terminal Time - acc,Shared ride 2 - Terminal Time - access,@(df.oTermTime + df.dTermTime) * df.autoTermTimeFactor_SR2 * df.time_factor,,coef_acctime,,,,,,,,,,,,,,,,,,,,, util_SHARED2_Two_person_household,Shared ride 2- One person household,@(df.hhsize == 2),,coef_hhsize2_sr2,,,,,,,,,,,,,,,,,,,,, util_SHARED RIDE 2_Three_person_household,Shared ride 2 - Two person household,@(df.hhsize == 3),,coef_hhsize3_sr2,,,,,,,,,,,,,,,,,,,,, util_SHARED RIDE 2_Three+_person_household,Shared ride 2 - Two person household,@(df.hhsize > 3),,coef_hhsize4p_sr2,,,,,,,,,,,,,,,,,,,,, @@ -26,13 +26,13 @@ util_SHARED RIDE 2_Person_is_56_64_years_old_or_older,Shared ride 2- Person is 5 util_SHARED RIDE 2_Person_is_65+_years_old_or_older,Shared ride 2- Person is more than 65 years old or older,@(df.age >= 65),,coef_age65pl_sr2,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 - Female,Shared ride 2 - female,@(df.female == 1),,coef_female_sr2,,,,,,,,,,,,,,,,,,,,, #,shared ride 3,,,,,,,,,,,,,,,,,,,,,,,, -util_Shared ride 3 - In -vehicle time,Shared ride 3 - In -vehicle time,@(df.s3_time_skims_out + df.s3_time_skims_inb) * df.autoIVTFactor * df.time_factor,,,coef_ivt,,,,,,,,,,,,,,,,,,,, +util_Shared ride 3 - In -vehicle time,Shared ride 3 - In -vehicle time,@(df.s3_time_skims_out + df.s3_time_skims_inb) * df.autoIVTFactor_SR3 * df.time_factor,,,coef_ivt,,,,,,,,,,,,,,,,,,,, util_Shared ride 3 - reliability - inb,Shared ride 3 - reliability - inbound,"@(df.s3_rel_skims_inb/np.minimum(df.s3_dist_skims_inb,0.1)) * df.time_factor",,,coef_rel_inb,,,,,,,,,,,,,,,,,,,, util_Shared ride 3 - reliability - out,Shared ride 3 - reliability - outbound,"@(df.s3_rel_skims_out/np.minimum(df.s3_dist_skims_out,0.1)) * df.time_factor",,,coef_rel_out,,,,,,,,,,,,,,,,,,,, -util_Shared ride 3 - cost - inb,Shared ride 3 - cost - inbound,@(df.sr3p_auto_op_cost * df.s3_dist_skims_inb * df.autoCPMFactor + df.s3_cost_skims_inb)/df.cost_sensitivity,,,coef_income,,,,,,,,,,,,,,,,,,,, -util_Shared ride 3 - cost - out,Shared ride 3 - cost - outbound,@(df.sr3p_auto_op_cost * df.s3_dist_skims_out * df.autoCPMFactor + df.s3_cost_skims_out)/df.cost_sensitivity,,,coef_income,,,,,,,,,,,,,,,,,,,, -util_Shared ride 3 - Parking cost ,Shared ride 3 - Parking cost ,@(df.parkingCost * df.costFactorS3 * df.autoParkingCostFactor)/df.cost_sensitivity,,,coef_income,,,,,,,,,,,,,,,,,,,, -util_Shared ride 3 - Terminal Time - acc,Shared ride 3 - Terminal Time - acc,@(df.oTermTime + df.dTermTime) * df.autoTermTimeFactor * df.time_factor,,,coef_acctime,,,,,,,,,,,,,,,,,,,, +util_Shared ride 3 - cost - inb,Shared ride 3 - cost - inbound,@(df.sr3p_auto_op_cost * df.s3_dist_skims_inb * df.autoCPMFactor_SR3 + df.s3_cost_skims_inb)/df.cost_sensitivity,,,coef_income,,,,,,,,,,,,,,,,,,,, +util_Shared ride 3 - cost - out,Shared ride 3 - cost - outbound,@(df.sr3p_auto_op_cost * df.s3_dist_skims_out * df.autoCPMFactor_SR3 + df.s3_cost_skims_out)/df.cost_sensitivity,,,coef_income,,,,,,,,,,,,,,,,,,,, +util_Shared ride 3 - Parking cost ,Shared ride 3 - Parking cost ,"@(df.parkingCost * df.autoParkingCostFactor_SR3 * np.where(df.is_joint,1,df.costFactorS3))/df.cost_sensitivity",,,coef_income,,,,,,,,,,,,,,,,,,,, +util_Shared ride 3 - Terminal Time - acc,Shared ride 3 - Terminal Time - acc,@(df.oTermTime + df.dTermTime) * df.autoTermTimeFactor_SR3 * df.time_factor,,,coef_acctime,,,,,,,,,,,,,,,,,,,, util_SHARED RIDe 3_Two_person_household,Shared ride 3- One person household,@(df.hhsize == 2),,,coef_hhsize2_sr3p,,,,,,,,,,,,,,,,,,,, util_SHARED RIDe 3_Three_person_household,Shared ride 3 - Two person household,@(df.hhsize == 3),,,coef_hhsize3_sr3p,,,,,,,,,,,,,,,,,,,, util_SHARED RIDe 3_Three+_person_household,Shared ride 3 - Two person household,@(df.hhsize > 3),,,coef_hhsize4p_sr3p,,,,,,,,,,,,,,,,,,,, @@ -73,9 +73,11 @@ util_WALK_LOC_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'] + dot_skims['WALK_LOC_FIRSTWAIT']) * df.time_factor,,,,,,coef_wait,,,,,,,,,,,,,,,,, util_WALK_LOC_transfer_wait_time,WALK_LOC - transfer wait time,@(odt_skims['WALK_LOC_XFERWAIT'] + dot_skims['WALK_LOC_XFERWAIT'])* df.time_factor,,,,,,coef_xwait,,,,,,,,,,,,,,,,, util_WALK_LOC_transfer_waLK_time,WALK_LOC - transfer walk time,@(odt_skims['WALK_LOC_XFERWALK'] + dot_skims['WALK_LOC_XFERWALK'])* df.time_factor,,,,,,coef_xwalk,,,,,,,,,,,,,,,,, -util_WALK_LOC_transfers_penalty,WALK_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['WALK_LOC_XFERS'], None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['WALK_LOC_XFERS'], None, 4)))*df.time_factor",,,,,,coef_xfer,,,,,,,,,,,,,,,,, -util_WALK_LOC_Walk_access_time,WALK_LOC - Walk access + egress time,@2 * (df.origin_local_time + df.dest_local_time)* df.time_factor,,,,,,coef_acctime,,,,,,,,,,,,,,,,, -util_WALK_LOC_Fare,WALK_LOC - Fare,@df.transitSubsidyPassDiscount*(odt_skims['WALK_LOC_FARE'] + dot_skims['WALK_LOC_FARE'])*100/df.cost_sensitivity,,,,,,coef_income,,,,,,,,,,,,,,,,, +util_WALK_LOC_transfers_penalty,WALK_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['WALK_LOC_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['WALK_LOC_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4)))*df.time_factor",,,,,,coef_xfer,,,,,,,,,,,,,,,,, +util_WALK_LOC_Walk_access_time,WALK_LOC - Walk access,@2 * df.origin_local_time* df.time_factor,,,,,,coef_acctime,,,,,,,,,,,,,,,,, +util_WALK_LOC_Walk_egress_time,WALK_LOC - egress time,"@np.where(df.nev_local_egress_available, df.nev_local_egress_time, np.where(df.microtransit_local_egress_available, df.microtransit_local_egress_time, 2*df.dest_local_time)) * df.time_factor",,,,,,coef_acctime,,,,,,,,,,,,,,,,, +util_WALK_LOC_wait_egress_time,WALK_LOC - Egress MT/NEV wait time,"@np.where(df.nev_local_egress_available, 2*nevWaitTime, np.where(df.microtransit_local_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,coef_wait,,,,,,,,,,,,,,,,, +util_WALK_LOC_Fare,WALK_LOC - Fare,@df.transitSubsidyPassDiscount*(odt_skims['WALK_LOC_FARE'] + dot_skims['WALK_LOC_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,coef_income,,,,,,,,,,,,,,,,, util_WALK_LOC - Age 16 to 24,WALK_LOC - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,coef_age1624_tran,,,,,,,,,,,,,,,,, util_WALK_LOC - Age 41 to 55,WALK_LOC - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,coef_age4155_tran,,,,,,,,,,,,,,,,, util_WALK_LOC - Age 56 to 64,WALK_LOC - Age 56 to 64,@(df.age > 55) & (df.age < 65),,,,,,coef_age5664_tran,,,,,,,,,,,,,,,,, @@ -91,13 +93,14 @@ util_WALK_PRM_In_vehicle_time_on_LRT,WALK_PRM - In-vehicle time on LRT,@(ivt_lrt util_WALK_PRM_In_vehicle_time_on_CMR,WALK_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['WALK_PRM_CMRIVTT'] + dot_skims['WALK_PRM_CMRIVTT'])* df.time_factor,,,,,,,coef_ivt,,,,,,,,,,,,,,,, util_WALK_PRM_In_vehicle_time_on_LTD_EXP,WALK_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['WALK_PRM_LTDEXPIVTT'] + dot_skims['WALK_PRM_LTDEXPIVTT'] + odt_skims['WALK_PRM_EXPIVTT'] + dot_skims['WALK_PRM_EXPIVTT'])* df.time_factor,,,,,,,coef_ivt,,,,,,,,,,,,,,,, util_WALK_PRM_In_vehicle_time_on_URB,WALK_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['WALK_PRM_BRTIVTT'] + dot_skims['WALK_PRM_BRTIVTT'])* df.time_factor,,,,,,,coef_ivt,,,,,,,,,,,,,,,, -util_WALK_PRM_wait_time,WALK_PRM - wait time,@(odt_skims['WALK_PRM_FIRSTWAIT'] + dot_skims['WALK_PRM_FIRSTWAIT']) * df.time_factor,,,,,,,coef_wait,,,,,,,,,,,,,,,, -util_WALK_PRM_transfer_wait_time,WALK_PRM - transfer wait time,@(odt_skims['WALK_PRM_XFERWAIT'] + dot_skims['WALK_PRM_XFERWAIT'])* df.time_factor,,,,,,,coef_xwait,,,,,,,,,,,,,,,, +util_WALK_PRM_wait_time,WALK_PRM - wait time,"@(odt_skims['WALK_PRM_FIRSTWAIT'] + dot_skims['WALK_PRM_FIRSTWAIT']) * df.time_factor * np.where((odt_skims['WALK_PRM_BRTIVTT'] + dot_skims['WALK_PRM_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,coef_wait,,,,,,,,,,,,,,,, +util_WALK_PRM_transfer_wait_time,WALK_PRM - transfer wait time,"@(odt_skims['WALK_PRM_XFERWAIT'] + dot_skims['WALK_PRM_XFERWAIT'])* df.time_factor * np.where((odt_skims['WALK_PRM_BRTIVTT'] + dot_skims['WALK_PRM_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,coef_xwait,,,,,,,,,,,,,,,, util_WALK_PRM_transfer_waLK_time,WALK_PRM - transfer walk time,@(odt_skims['WALK_PRM_XFERWALK'] + dot_skims['WALK_PRM_XFERWALK'])* df.time_factor,,,,,,,coef_xwalk,,,,,,,,,,,,,,,, -util_WALK_PRM_transfers_penalty,WALK_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['WALK_PRM_XFERS'] + df.mtnev_egr_xfer, None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['WALK_PRM_XFERS'] + df.mtnev_egr_xfer, None, 4)))*df.time_factor",,,,,,,coef_xfer,,,,,,,,,,,,,,,, +util_WALK_PRM_transfers_penalty,WALK_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['WALK_PRM_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['WALK_PRM_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4)))*df.time_factor",,,,,,,coef_xfer,,,,,,,,,,,,,,,, util_WALK_PRM_Walk_access_time,WALK_PRM - Walk access,@2 * df.origin_prm_time * df.time_factor,,,,,,,coef_acctime,,,,,,,,,,,,,,,, -util_WALK_PRM_Walk_egress_time,WALK_PRM - egress time,"@np.where(df.nev_egress_available, df.nev_egress_time, np.where(df.microtransit_egress_available, df.microtransit_egress_time, 2*df.dest_prm_time)) * df.time_factor",,,,,,,coef_acctime,,,,,,,,,,,,,,,, -util_WALK_PRM_Fare,WALK_PRM - Fare,@df.transitSubsidyPassDiscount*(odt_skims['WALK_PRM_FARE'] + dot_skims['WALK_PRM_FARE'])*100/df.cost_sensitivity,,,,,,,coef_income,,,,,,,,,,,,,,,, +util_WALK_PRM_Walk_egress_time,WALK_PRM - egress time,"@np.where(df.nev_prm_egress_available, df.nev_prm_egress_time, np.where(df.microtransit_prm_egress_available, df.microtransit_prm_egress_time, 2*df.dest_prm_time)) * df.time_factor",,,,,,,coef_acctime,,,,,,,,,,,,,,,, +util_WALK_PRM_wait_egress_time,WALK_PRM - Egress MT/NEV wait time,"@np.where(df.nev_prm_egress_available, 2*nevWaitTime, np.where(df.microtransit_prm_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,coef_wait,,,,,,,,,,,,,,,, +util_WALK_PRM_Fare,WALK_PRM - Fare,@df.transitSubsidyPassDiscount*(odt_skims['WALK_PRM_FARE'] + dot_skims['WALK_PRM_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,,coef_income,,,,,,,,,,,,,,,, util_WALK_PRM_ASC,WALK_PRM - Alternative-specific constant,(wlk_prm_out_asc + wlk_prm_inb_asc) * time_factor,,,,,,,coef_ivt,,,,,,,,,,,,,,,, util_WALK_PRM - Age 16 to 24,WALK_PRM - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,coef_age1624_tran,,,,,,,,,,,,,,,, util_WALK_PRM - Age 41 to 55,WALK_PRM - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,coef_age4155_tran,,,,,,,,,,,,,,,, @@ -114,12 +117,14 @@ util_WALK_MIX_In_vehicle_time_on_LRT,WALK_MIX - In-vehicle time on LRT,@(ivt_lrt util_WALK_MIX_In_vehicle_time_on_CMR,WALK_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['WALK_MIX_CMRIVTT'] + dot_skims['WALK_MIX_CMRIVTT'])*df.time_factor,,,,,,,,coef_ivt,,,,,,,,,,,,,,, util_WALK_MIX_In_vehicle_time_on_LTD_EXP,WALK_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['WALK_MIX_LTDEXPIVTT'] + dot_skims['WALK_MIX_LTDEXPIVTT'] + odt_skims['WALK_MIX_EXPIVTT'] + dot_skims['WALK_MIX_EXPIVTT'])*df.time_factor,,,,,,,,coef_ivt,,,,,,,,,,,,,,, util_WALK_MIX_In_vehicle_time_on_URB,WALK_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['WALK_MIX_BRTIVTT'] + dot_skims['WALK_MIX_BRTIVTT'])*df.time_factor,,,,,,,,coef_ivt,,,,,,,,,,,,,,, -util_WALK_MIX_FIRST_wait_time,WALK_MIX - First wait time,@(odt_skims['WALK_MIX_FIRSTWAIT']) + (dot_skims['WALK_MIX_FIRSTWAIT'])*df.time_factor,,,,,,,,coef_wait,,,,,,,,,,,,,,, -util_WALK_MIX_transfer_wait_time,WALK_MIX - transfer wait time,@(odt_skims['WALK_MIX_XFERWAIT'] + dot_skims['WALK_MIX_XFERWAIT'])*df.time_factor,,,,,,,,coef_xwait,,,,,,,,,,,,,,, +util_WALK_MIX_FIRST_wait_time,WALK_MIX - First wait time,"@(odt_skims['WALK_MIX_FIRSTWAIT']) + (dot_skims['WALK_MIX_FIRSTWAIT'])*df.time_factor * np.where((odt_skims['WALK_MIX_BRTIVTT'] + dot_skims['WALK_MIX_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,coef_wait,,,,,,,,,,,,,,, +util_WALK_MIX_transfer_wait_time,WALK_MIX - transfer wait time,"@(odt_skims['WALK_MIX_XFERWAIT'] + dot_skims['WALK_MIX_XFERWAIT'])*df.time_factor * np.where((odt_skims['WALK_MIX_BRTIVTT'] + dot_skims['WALK_MIX_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,coef_xwait,,,,,,,,,,,,,,, util_WALK_PRM_transfer_waLK_time,WALK_PRM - transfer walk time,@(odt_skims['WALK_MIX_XFERWALK'] + dot_skims['WALK_MIX_XFERWALK']) *df.time_factor,,,,,,,,coef_xwalk,,,,,,,,,,,,,,, -util_WALK_MIX_number_of_transfers,WALK_MIX - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['WALK_MIX_XFERS'], None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['WALK_MIX_XFERS'], None, 4)))*df.time_factor",,,,,,,,coef_xfer,,,,,,,,,,,,,,, -util_WALK_MIX_Walk_access_time,WALK_MIX - Walk access + egress time,@2 *(df.origin_mix_time + df.dest_mix_time)*df.time_factor,,,,,,,,coef_acctime,,,,,,,,,,,,,,, -util_WALK_MIX_Fare,WALK_MIX - Fare,@df.transitSubsidyPassDiscount*(odt_skims['WALK_MIX_FARE'] + dot_skims['WALK_MIX_FARE'])*100/df.cost_sensitivity,,,,,,,,coef_income,,,,,,,,,,,,,,, +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.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['WALK_MIX_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4)))*df.time_factor",,,,,,,,coef_xfer,,,,,,,,,,,,,,, +util_WALK_MIX_Walk_access_time,WALK_MIX - Walk access,@2 * df.origin_mix_time*df.time_factor,,,,,,,,coef_acctime,,,,,,,,,,,,,,, +util_WALK_MIX_Walk_egress_time,WALK_MIX - egress time,"@np.where(df.nev_mix_egress_available, df.nev_mix_egress_time, np.where(df.microtransit_mix_egress_available, df.microtransit_mix_egress_time, 2*df.dest_mix_time)) * df.time_factor",,,,,,,,coef_acctime,,,,,,,,,,,,,,, +util_WALK_MIX_wait_egress_time,WALK_MIX - Egress MT/NEV wait time,"@np.where(df.nev_mix_egress_available, 2*nevWaitTime, np.where(df.microtransit_mix_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,coef_wait,,,,,,,,,,,,,,, +util_WALK_MIX_Fare,WALK_MIX - Fare,@df.transitSubsidyPassDiscount*(odt_skims['WALK_MIX_FARE'] + dot_skims['WALK_MIX_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,,,coef_income,,,,,,,,,,,,,,, util_WALK_MIX_ASC,WALK_MIX - Alternative-specific constant,(wlk_mix_out_asc + wlk_mix_inb_asc) * time_factor,,,,,,,,coef_ivt,,,,,,,,,,,,,,, util_WALK_MIX - Age 16 to 24,WALK_MIX - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,coef_age1624_tran,,,,,,,,,,,,,,, util_WALK_MIX - Age 41 to 55,WALK_MIX - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,coef_age4155_tran,,,,,,,,,,,,,,, @@ -136,12 +141,13 @@ util_PNR_LOC_Unavailable_for_persons_less_than_16,PNR_LOC - Unavailable for pers util_PNR_LOC_In_vehicle_time,PNR_LOC - In-vehicle time,@(odt_skims['PNROUT_LOC_TOTALIVTT'] + dot_skims['PNRIN_LOC_TOTALIVTT'])*df.time_factor,,,,,,,,,coef_ivt,,,,,,,,,,,,,, util_PNR_LOC_iwait_time,PNR_LOC - First iwait time,@(odt_skims['PNROUT_LOC_FIRSTWAIT']) + (dot_skims['PNRIN_LOC_FIRSTWAIT'])*df.time_factor,,,,,,,,,coef_wait,,,,,,,,,,,,,, util_PNR_LOC_transfer_wait_time,PNR_LOC - transfer wait time,@(odt_skims['PNROUT_LOC_XFERWAIT'] + dot_skims['PNRIN_LOC_XFERWAIT'])*df.time_factor,,,,,,,,,coef_xwait,,,,,,,,,,,,,, -util_PNR_LOC_number_of_transfers,PNR_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['PNROUT_LOC_XFERS'], None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['PNRIN_LOC_XFERS'], None, 4))) *df.time_factor",,,,,,,,,coef_xferdrive,,,,,,,,,,,,,, +util_PNR_LOC_number_of_transfers,PNR_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['PNROUT_LOC_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['PNRIN_LOC_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,coef_xferdrive,,,,,,,,,,,,,, util_PNR_LOC_PNR_time,PNR_LOC - PNR time,@(odt_skims['PNROUT_LOC_ACC'] + dot_skims['PNRIN_LOC_EGR']) *df.time_factor,,,,,,,,,coef_acctime,,,,,,,,,,,,,, -util_PNR_LOC_PNR_cost,PNR_LOC - PNR cost,@(df.sov_auto_op_cost * (odt_skims['PNROUT_LOC_ACC'] + dot_skims['PNRIN_LOC_EGR']) *driveSpeed )/df.cost_sensitivity,,,,,,,,,coef_income,,,,,,,,,,,,,, -util_PNR_LOC_Walk_egress_time_(at_attraction_end),PNR_LOC - Walk egress time (at attraction end),@2 *df.dest_local_time* df.time_factor,,,,,,,,,coef_acctime,,,,,,,,,,,,,, +util_PNR_LOC_PNR_cost,PNR_LOC - PNR cost,@(df.sov_auto_op_cost * ((odt_skims['PNROUT_LOC_ACC'] + dot_skims['PNRIN_LOC_EGR'])/60) *driveSpeed )/df.cost_sensitivity,,,,,,,,,coef_income,,,,,,,,,,,,,, +util_PNR_LOC_Walk_egress_time_(at_attraction_end),PNR_LOC - Walk egress time (at attraction end),"@np.where(df.nev_local_egress_available, df.nev_local_egress_time, np.where(df.microtransit_local_egress_available, df.microtransit_local_egress_time, 2*df.dest_local_time)) * df.time_factor",,,,,,,,,coef_acctime,,,,,,,,,,,,,, +util_PNR_LOC_wait_egress_time_(at_attraction_end),PNR_LOC - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_local_egress_available, 2*nevWaitTime, np.where(df.microtransit_local_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,coef_wait,,,,,,,,,,,,,, util_PNR_LOC_Walk_other_time,PNR_LOC - Walk other time,@(odt_skims['PNROUT_LOC_XFERWALK'] + dot_skims['PNRIN_LOC_XFERWALK'])*df.time_factor,,,,,,,,,coef_xwalk,,,,,,,,,,,,,, -util_PNR_LOC_Fare_and_operating_cost,PNR_LOC - Fare ,@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_LOC_FARE'] + dot_skims['PNRIN_LOC_FARE'])*100/df.cost_sensitivity,,,,,,,,,coef_income,,,,,,,,,,,,,, +util_PNR_LOC_Fare_and_operating_cost,PNR_LOC - Fare ,@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_LOC_FARE'] + dot_skims['PNRIN_LOC_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,,,,coef_income,,,,,,,,,,,,,, util_PNR_LOC - Age 16 to 24,PNR_LOC - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,coef_age1624_tran,,,,,,,,,,,,,, util_PNR_LOC - Age 41 to 55,PNR_LOC - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,coef_age4155_tran,,,,,,,,,,,,,, util_PNR_LOC - Age 56 to 64,PNR_LOC - Age 56 to 64,@(df.age > 55) & (df.age < 65),,,,,,,,,coef_age5664_tran,,,,,,,,,,,,,, @@ -157,14 +163,15 @@ util_PNR_PRM_In_vehicle_time_on_LRT,PNR_PRM - In-vehicle time on LRT,@(ivt_lrt_m util_PNR_PRM_In_vehicle_time_on_CMR,PNR_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['PNROUT_PRM_CMRIVTT'] + dot_skims['PNRIN_PRM_CMRIVTT']) *df.time_factor,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNR_PRM_In_vehicle_time_on_LTD_EXP,PNR_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['PNROUT_PRM_LTDEXPIVTT'] + dot_skims['PNRIN_PRM_LTDEXPIVTT'] + odt_skims['PNROUT_PRM_EXPIVTT'] + dot_skims['PNRIN_PRM_EXPIVTT']) *df.time_factor,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNR_PRM_In_vehicle_time_on_URB,PNR_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['PNROUT_PRM_BRTIVTT'] + dot_skims['PNRIN_PRM_BRTIVTT']) *df.time_factor,,,,,,,,,,coef_ivt,,,,,,,,,,,,, -util_PNR_PRM_FIRST_iwait_time,PNR_PRM - First iwait time,@(odt_skims['WALK_PRM_XFERWAIT'] + dot_skims['WALK_PRM_XFERWAIT'])* df.time_factor,,,,,,,,,,coef_wait,,,,,,,,,,,,, -util_PNR_PRM_transfer_wait_time,PNR_PRM - transfer wait time,@(odt_skims['PNROUT_PRM_XFERWAIT'] + dot_skims['PNRIN_PRM_XFERWAIT'])*df.time_factor,,,,,,,,,,coef_xwait,,,,,,,,,,,,, -util_PNR_PRM_number_of_transfers,PNR_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['PNROUT_PRM_XFERS'] + df.mtnev_egr_xfer, None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['PNRIN_PRM_XFERS'] + df.mtnev_egr_xfer, None, 4))) *df.time_factor",,,,,,,,,,coef_xferdrive,,,,,,,,,,,,, +util_PNR_PRM_FIRST_iwait_time,PNR_PRM - First iwait time,"@(odt_skims['WALK_PRM_XFERWAIT'] + dot_skims['WALK_PRM_XFERWAIT'])* df.time_factor * np.where((odt_skims['PNROUT_PRM_BRTIVTT'] + dot_skims['PNRIN_PRM_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,coef_wait,,,,,,,,,,,,, +util_PNR_PRM_transfer_wait_time,PNR_PRM - transfer wait time,"@(odt_skims['PNROUT_PRM_XFERWAIT'] + dot_skims['PNRIN_PRM_XFERWAIT'])*df.time_factor * np.where((odt_skims['PNROUT_PRM_BRTIVTT'] + dot_skims['PNRIN_PRM_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,coef_xwait,,,,,,,,,,,,, +util_PNR_PRM_number_of_transfers,PNR_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['PNROUT_PRM_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['PNRIN_PRM_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,,coef_xferdrive,,,,,,,,,,,,, util_PNR_PRM_PNR_time,PNR_PRM - PNR time,@(odt_skims['PNROUT_PRM_ACC'] + dot_skims['PNRIN_PRM_EGR']),,,,,,,,,,coef_acctime,,,,,,,,,,,,, -util_PNR_PRM_PNR_cost,PNR_PRM - PNR cost,@(df.sov_auto_op_cost * (odt_skims['PNROUT_PRM_ACC'] + dot_skims['PNRIN_PRM_EGR']) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,coef_income,,,,,,,,,,,,, -util_PNR_PRM_Walk_egress_time_(at_attraction_end),PNR_PRM - Walk egress time (at attraction end),"@np.where(df.nev_egress_available, df.nev_egress_time, np.where(df.microtransit_egress_available, df.microtransit_egress_time, 2*df.dest_prm_time)) * df.time_factor",,,,,,,,,,coef_acctime,,,,,,,,,,,,, +util_PNR_PRM_PNR_cost,PNR_PRM - PNR cost,@(df.sov_auto_op_cost * ((odt_skims['PNROUT_PRM_ACC'] + dot_skims['PNRIN_PRM_EGR'])/60) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,coef_income,,,,,,,,,,,,, +util_PNR_PRM_Walk_egress_time_(at_attraction_end),PNR_PRM - Walk egress time (at attraction end),"@np.where(df.nev_prm_egress_available, df.nev_prm_egress_time, np.where(df.microtransit_prm_egress_available, df.microtransit_prm_egress_time, 2*df.dest_prm_time)) * df.time_factor",,,,,,,,,,coef_acctime,,,,,,,,,,,,, +util_PNR_PRM_wait_egress_time_(at_attraction_end),PNR_PRM - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_prm_egress_available, 2*nevWaitTime, np.where(df.microtransit_prm_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,,coef_wait,,,,,,,,,,,,, util_PNR_PRM_Walk_other_time,PNR_PRM - Walk other time,@(odt_skims['PNROUT_PRM_XFERWALK'] + dot_skims['PNRIN_PRM_XFERWALK']) *df.time_factor,,,,,,,,,,coef_xwalk,,,,,,,,,,,,, -util_PNR_PRM_Fare,PNR_PRM - Fare,@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_PRM_FARE'] + dot_skims['PNRIN_PRM_FARE'])*100/df.cost_sensitivity,,,,,,,,,,coef_income,,,,,,,,,,,,, +util_PNR_PRM_Fare,PNR_PRM - Fare,@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_PRM_FARE'] + dot_skims['PNRIN_PRM_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,,,,,coef_income,,,,,,,,,,,,, util_PNR_PRM_ASC,PNR_PRM - Alternative-specific constant,(pnr_prm_out_asc + pnr_prm_inb_asc) * time_factor,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNR_PRM - Age 16 to 24,PNR_PRM - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,,coef_age1624_tran,,,,,,,,,,,,, util_PNR_PRM - Age 41 to 55,PNR_PRM - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,,coef_age4155_tran,,,,,,,,,,,,, @@ -181,14 +188,15 @@ util_PNR_MIX_In_vehicle_time_on_LRT,PNR_MIX - In-vehicle time on LRT,@(ivt_lrt_m util_PNR_MIX_In_vehicle_time_on_CMR,PNR_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['PNROUT_MIX_CMRIVTT'] + dot_skims['PNRIN_MIX_CMRIVTT']) *df.time_factor,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNR_MIX_In_vehicle_time_on_LTD_EXP,PNR_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['PNROUT_MIX_LTDEXPIVTT'] + dot_skims['PNRIN_MIX_LTDEXPIVTT'] + odt_skims['PNROUT_MIX_EXPIVTT'] + dot_skims['PNRIN_MIX_EXPIVTT'])*df.time_factor,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNR_MIX_In_vehicle_time_on_URB,PNR_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['PNROUT_MIX_BRTIVTT'] + dot_skims['PNRIN_MIX_BRTIVTT'])*df.time_factor,,,,,,,,,,,coef_ivt,,,,,,,,,,,, -util_PNR_MIX_FIRST_iwait_time,PNR_MIX - First iwait time,@(odt_skims['PNROUT_MIX_FIRSTWAIT'] + dot_skims['PNRIN_MIX_FIRSTWAIT']) *df.time_factor,,,,,,,,,,,coef_wait,,,,,,,,,,,, -util_PNR_MIX_transfer_wait_time,PNR_MIX - transfer wait time,@(odt_skims['PNROUT_MIX_XFERWAIT'] + dot_skims['PNRIN_MIX_XFERWAIT'])*df.time_factor,,,,,,,,,,,coef_xwait,,,,,,,,,,,, -util_PNR_MIX_number_of_transfers,PNR_MIX - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['PNROUT_MIX_XFERS'], None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['PNRIN_MIX_XFERS'], None, 4))) *df.time_factor",,,,,,,,,,,coef_xferdrive,,,,,,,,,,,, +util_PNR_MIX_FIRST_iwait_time,PNR_MIX - First iwait time,"@(odt_skims['PNROUT_MIX_FIRSTWAIT'] + dot_skims['PNRIN_MIX_FIRSTWAIT']) *df.time_factor * np.where((odt_skims['PNROUT_MIX_BRTIVTT'] + dot_skims['PNRIN_MIX_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,coef_wait,,,,,,,,,,,, +util_PNR_MIX_transfer_wait_time,PNR_MIX - transfer wait time,"@(odt_skims['PNROUT_MIX_XFERWAIT'] + dot_skims['PNRIN_MIX_XFERWAIT'])*df.time_factor * np.where((odt_skims['PNROUT_MIX_BRTIVTT'] + dot_skims['PNRIN_MIX_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,coef_xwait,,,,,,,,,,,, +util_PNR_MIX_number_of_transfers,PNR_MIX - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['PNROUT_MIX_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['PNRIN_MIX_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,,,coef_xferdrive,,,,,,,,,,,, util_PNR_MIX_PNR_time,PNR_MIX - PNR time,@(odt_skims['PNROUT_MIX_ACC'] + dot_skims['PNRIN_MIX_EGR'])*df.time_factor,,,,,,,,,,,coef_acctime,,,,,,,,,,,, -util_PNR_MIX_PNR_cost,PNR_MIX - PNR cost,@(df.sov_auto_op_cost * (odt_skims['PNROUT_MIX_ACC'] + dot_skims['PNRIN_MIX_EGR']) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,,coef_income,,,,,,,,,,,, -util_PNR_MIX_Walk_egress_time_(at_attraction_end),PNR_MIX - Walk egress time (at attraction end),@2 * df.dest_mix_time* df.time_factor,,,,,,,,,,,coef_acctime,,,,,,,,,,,, +util_PNR_MIX_PNR_cost,PNR_MIX - PNR cost,@(df.sov_auto_op_cost * ((odt_skims['PNROUT_MIX_ACC'] + dot_skims['PNRIN_MIX_EGR'])/60) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,,coef_income,,,,,,,,,,,, +util_PNR_MIX_Walk_egress_time_(at_attraction_end),PNR_MIX - Walk egress time (at attraction end),"@np.where(df.nev_mix_egress_available, df.nev_mix_egress_time, np.where(df.microtransit_mix_egress_available, df.microtransit_mix_egress_time, 2*df.dest_mix_time)) * df.time_factor",,,,,,,,,,,coef_acctime,,,,,,,,,,,, +util_PNR_MIX_wait_egress_time_(at_attraction_end),PNR_MIX - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_mix_egress_available, 2*nevWaitTime, np.where(df.microtransit_mix_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,,,coef_wait,,,,,,,,,,,, util_PNR_MIX_Walk_other_time,PNR_MIX - Walk other time,@(odt_skims['PNROUT_MIX_XFERWALK'] + dot_skims['PNRIN_MIX_XFERWALK']) *df.time_factor,,,,,,,,,,,coef_xwalk,,,,,,,,,,,, -util_PNR_MIX_Fare,PNR_MIX - Fare,@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_MIX_FARE'] + dot_skims['PNRIN_MIX_FARE'])*100/df.cost_sensitivity,,,,,,,,,,,coef_income,,,,,,,,,,,, +util_PNR_MIX_Fare,PNR_MIX - Fare,@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_MIX_FARE'] + dot_skims['PNRIN_MIX_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,,,,,,coef_income,,,,,,,,,,,, util_PNR_MIX_ASC,PNR_MIX - Alternative-specific constant,(pnr_mix_out_asc + pnr_mix_inb_asc) * time_factor,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNR_MIX - Age 16 to 24,PNR_MIX - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,,,coef_age1624_tran,,,,,,,,,,,, util_PNR_MIX - Age 41 to 55,PNR_MIX - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,,,coef_age4155_tran,,,,,,,,,,,, @@ -201,12 +209,13 @@ util_KNR_LOC_Unavailable,KNR_LOC - Unavailable,"@(df.knr_local_available == Fals util_KNR_LOC_In_vehicle_time,KNR_LOC - In-vehicle time,@(odt_skims['KNROUT_LOC_TOTALIVTT'] + dot_skims['KNRIN_LOC_TOTALIVTT']) *df.time_factor,,,,,,,,,,,,coef_ivt,,,,,,,,,,, util_KNR_LOC_iwait_time,KNR_LOC - First iwait time,@(odt_skims['KNROUT_LOC_FIRSTWAIT']) + (dot_skims['KNRIN_LOC_FIRSTWAIT'])*df.time_factor,,,,,,,,,,,,coef_wait,,,,,,,,,,, util_KNR_LOC_transfer_wait_time,KNR_LOC - transfer wait time,@(odt_skims['KNROUT_LOC_XFERWAIT'] + dot_skims['KNRIN_LOC_XFERWAIT'])*df.time_factor,,,,,,,,,,,,coef_xwait,,,,,,,,,,, -util_KNR_LOC_number_of_transfers,KNR_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_LOC_XFERS'], None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_LOC_XFERS'], None, 4))) *df.time_factor",,,,,,,,,,,,coef_xferdrive,,,,,,,,,,, +util_KNR_LOC_number_of_transfers,KNR_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_LOC_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_LOC_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,,,,coef_xferdrive,,,,,,,,,,, util_KNR_LOC_KNR_time,KNR_LOC - KNR time,@(odt_skims['KNROUT_LOC_ACC'] + dot_skims['KNRIN_LOC_EGR'])*df.time_factor,,,,,,,,,,,,coef_acctime,,,,,,,,,,, -util_KNR_LOC_KNR_cost,KNR_LOC - KNR cost,@(df.sr2_auto_op_cost * (odt_skims['KNROUT_LOC_ACC'] + dot_skims['KNRIN_LOC_EGR']) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,,,coef_income,,,,,,,,,,, -util_KNR_LOC_Walk_egress_time_(at_attraction_end),KNR_LOC - Walk egress time (at attraction end),@2 * df.dest_local_time* df.time_factor,,,,,,,,,,,,coef_acctime,,,,,,,,,,, +util_KNR_LOC_KNR_cost,KNR_LOC - KNR cost,@(df.sr2_auto_op_cost * ((odt_skims['KNROUT_LOC_ACC'] + dot_skims['KNRIN_LOC_EGR'])/60) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,,,coef_income,,,,,,,,,,, +util_KNR_LOC_Walk_egress_time_(at_attraction_end),KNR_LOC - Walk egress time (at attraction end),"@np.where(df.nev_local_egress_available, df.nev_local_egress_time, np.where(df.microtransit_local_egress_available, df.microtransit_local_egress_time, 2*df.dest_local_time)) * df.time_factor",,,,,,,,,,,,coef_acctime,,,,,,,,,,, +util_KNR_LOC_wait_egress_time_(at_attraction_end),KNR_LOC - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_local_egress_available, 2*nevWaitTime, np.where(df.microtransit_local_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,,,,coef_wait,,,,,,,,,,, util_KNR_LOC_Walk_other_time,KNR_LOC - Walk other time,@(odt_skims['KNROUT_LOC_XFERWALK'] + dot_skims['KNRIN_LOC_XFERWALK'])*df.time_factor,,,,,,,,,,,,coef_xwalk,,,,,,,,,,, -util_KNR_LOC_Fare_and_operating_cost,KNR_LOC - Fare ,@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_LOC_FARE'] + dot_skims['KNRIN_LOC_FARE'])*100/df.cost_sensitivity,,,,,,,,,,,,coef_income,,,,,,,,,,, +util_KNR_LOC_Fare_and_operating_cost,KNR_LOC - Fare ,@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_LOC_FARE'] + dot_skims['KNRIN_LOC_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,,,,,,,coef_income,,,,,,,,,,, util_KNR_LOC - Age 16 to 24,KNR_LOC - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,,,,coef_age1624_tran,,,,,,,,,,, util_KNR_LOC - Age 41 to 55,KNR_LOC - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,,,,coef_age4155_tran,,,,,,,,,,, util_KNR_LOC - Age 56 to 64,KNR_LOC - Age 56 to 64,@(df.age > 55) & (df.age < 65),,,,,,,,,,,,coef_age5664_tran,,,,,,,,,,, @@ -220,14 +229,15 @@ util_KNR_PRM_In_vehicle_time_on_LRT,KNR_PRM - In-vehicle time on LRT,@(ivt_lrt_m util_KNR_PRM_In_vehicle_time_on_CMR,KNR_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNROUT_PRM_CMRIVTT'] + dot_skims['KNRIN_PRM_CMRIVTT'])*df.time_factor,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNR_PRM_In_vehicle_time_on_LTD_EXP,KNR_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNROUT_PRM_LTDEXPIVTT'] + dot_skims['KNRIN_PRM_LTDEXPIVTT'] + odt_skims['KNROUT_PRM_EXPIVTT'] + dot_skims['KNRIN_PRM_EXPIVTT'])*df.time_factor,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNR_PRM_In_vehicle_time_on_URB,KNR_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNROUT_PRM_BRTIVTT'] + dot_skims['KNRIN_PRM_BRTIVTT'])*df.time_factor,,,,,,,,,,,,,coef_ivt,,,,,,,,,, -util_KNR_PRM_FIRST_iwait_time,KNR_PRM - First iwait time,@(odt_skims['KNROUT_PRM_FIRSTWAIT'] + dot_skims['KNRIN_PRM_FIRSTWAIT'])*df.time_factor,,,,,,,,,,,,,coef_wait,,,,,,,,,, -util_KNR_PRM_transfer_wait_time,KNR_PRM - transfer wait time,@(odt_skims['KNROUT_PRM_XFERWAIT'] + dot_skims['KNRIN_PRM_XFERWAIT'])*df.time_factor,,,,,,,,,,,,,coef_xwait,,,,,,,,,, -util_KNR_PRM_number_of_transfers,KNR_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_PRM_XFERS'] + df.mtnev_egr_xfer, None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_PRM_XFERS'] + df.mtnev_egr_xfer, None, 4))) *df.time_factor",,,,,,,,,,,,,coef_xferdrive,,,,,,,,,, +util_KNR_PRM_FIRST_iwait_time,KNR_PRM - First iwait time,"@(odt_skims['KNROUT_PRM_FIRSTWAIT'] + dot_skims['KNRIN_PRM_FIRSTWAIT'])*df.time_factor * np.where((odt_skims['KNROUT_PRM_BRTIVTT'] + dot_skims['KNRIN_PRM_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,coef_wait,,,,,,,,,, +util_KNR_PRM_transfer_wait_time,KNR_PRM - transfer wait time,"@(odt_skims['KNROUT_PRM_XFERWAIT'] + dot_skims['KNRIN_PRM_XFERWAIT'])*df.time_factor * np.where((odt_skims['KNROUT_PRM_BRTIVTT'] + dot_skims['KNRIN_PRM_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,coef_xwait,,,,,,,,,, +util_KNR_PRM_number_of_transfers,KNR_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_PRM_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_PRM_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,,,,,coef_xferdrive,,,,,,,,,, util_KNR_PRM_KNR_time,KNR_PRM - KNR time,@(odt_skims['KNROUT_PRM_ACC'] + dot_skims['KNRIN_PRM_EGR']) *df.time_factor,,,,,,,,,,,,,coef_acctime,,,,,,,,,, -util_KNR_PRM_KNR_cost,KNR_PRM - KNR cost,@(df.sr2_auto_op_cost * (odt_skims['KNROUT_PRM_ACC'] + dot_skims['KNRIN_PRM_EGR']) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,,,,coef_income,,,,,,,,,, -util_KNR_PRM_Walk_egress_time_(at_attraction_end),KNR_PRM - Walk egress time (at attraction end),"@np.where(df.nev_egress_available, df.nev_egress_time, np.where(df.microtransit_egress_available, df.microtransit_egress_time, 2*df.dest_prm_time)) * df.time_factor",,,,,,,,,,,,,coef_acctime,,,,,,,,,, +util_KNR_PRM_KNR_cost,KNR_PRM - KNR cost,@(df.sr2_auto_op_cost * ((odt_skims['KNROUT_PRM_ACC'] + dot_skims['KNRIN_PRM_EGR'])/60) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,,,,coef_income,,,,,,,,,, +util_KNR_PRM_Walk_egress_time_(at_attraction_end),KNR_PRM - Walk egress time (at attraction end),"@np.where(df.nev_prm_egress_available, df.nev_prm_egress_time, np.where(df.microtransit_prm_egress_available, df.microtransit_prm_egress_time, 2*df.dest_prm_time)) * df.time_factor",,,,,,,,,,,,,coef_acctime,,,,,,,,,, +util_KNR_PRM_wait_egress_time_(at_attraction_end),KNR_PRM - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_prm_egress_available, 2*nevWaitTime, np.where(df.microtransit_prm_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,,,,,coef_wait,,,,,,,,,, util_KNR_PRM_Walk_other_time,KNR_PRM - Walk other time,@(odt_skims['KNROUT_PRM_XFERWALK'] + dot_skims['KNRIN_PRM_XFERWALK']) *df.time_factor,,,,,,,,,,,,,coef_xwalk,,,,,,,,,, -util_KNR_PRM_Fare,KNR_PRM - Fare,@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'] + dot_skims['KNRIN_PRM_FARE'])*100/df.cost_sensitivity,,,,,,,,,,,,,coef_income,,,,,,,,,, +util_KNR_PRM_Fare,KNR_PRM - Fare,@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'] + dot_skims['KNRIN_PRM_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,,,,,,,,coef_income,,,,,,,,,, util_KNR_PRM_ASC,KNR_PRM - Alternative-specific constant,(knr_prm_out_asc + knr_prm_inb_asc) * time_factor,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNR_PRM - Age 16 to 24,KNR_PRM - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,,,,,coef_age1624_tran,,,,,,,,,, util_KNR_PRM - Age 41 to 55,KNR_PRM - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,,,,,coef_age4155_tran,,,,,,,,,, @@ -243,14 +253,15 @@ util_KNR_MIX_In_vehicle_time_on_LRT,KNR_MIX - In-vehicle time on LRT,@(ivt_lrt_m util_KNR_MIX_In_vehicle_time_on_CMR,KNR_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNROUT_MIX_CMRIVTT'] + dot_skims['KNRIN_MIX_CMRIVTT']) *df.time_factor,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNR_MIX_In_vehicle_time_on_LTD_EXP,KNR_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNROUT_MIX_LTDEXPIVTT'] + dot_skims['KNRIN_MIX_LTDEXPIVTT'] + odt_skims['KNROUT_MIX_EXPIVTT'] + dot_skims['KNRIN_MIX_EXPIVTT']) *df.time_factor,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNR_MIX_In_vehicle_time_on_URB,KNR_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNROUT_MIX_BRTIVTT'] + dot_skims['KNRIN_MIX_BRTIVTT']) *df.time_factor,,,,,,,,,,,,,,coef_ivt,,,,,,,,, -util_KNR_MIX_FIRST_iwait_time,KNR_MIX - First iwait time,@(odt_skims['KNROUT_MIX_FIRSTWAIT'] + dot_skims['KNRIN_MIX_FIRSTWAIT'])*df.time_factor,,,,,,,,,,,,,,coef_wait,,,,,,,,, -util_KNR_MIX_transfer_wait_time,KNR_MIX - transfer wait time,@(odt_skims['KNROUT_MIX_XFERWAIT'] + dot_skims['KNRIN_MIX_XFERWAIT'])*df.time_factor,,,,,,,,,,,,,,coef_xwait,,,,,,,,, -util_KNR_MIX_number_of_transfers,KNR_MIX - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_MIX_XFERS'], None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_MIX_XFERS'], None, 4))) *df.time_factor",,,,,,,,,,,,,,coef_xferdrive,,,,,,,,, +util_KNR_MIX_FIRST_iwait_time,KNR_MIX - First iwait time,"@(odt_skims['KNROUT_MIX_FIRSTWAIT'] + dot_skims['KNRIN_MIX_FIRSTWAIT'])*df.time_factor * np.where((odt_skims['KNROUT_MIX_BRTIVTT'] + dot_skims['KNRIN_MIX_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,coef_wait,,,,,,,,, +util_KNR_MIX_transfer_wait_time,KNR_MIX - transfer wait time,"@(odt_skims['KNROUT_MIX_XFERWAIT'] + dot_skims['KNRIN_MIX_XFERWAIT'])*df.time_factor * np.where((odt_skims['KNROUT_MIX_BRTIVTT'] + dot_skims['KNRIN_MIX_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,coef_xwait,,,,,,,,, +util_KNR_MIX_number_of_transfers,KNR_MIX - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_MIX_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_MIX_XFERS'] + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,,,,,,coef_xferdrive,,,,,,,,, util_KNR_MIX_KNR_time,KNR_MIX - KNR time,@(odt_skims['KNROUT_MIX_ACC'] + dot_skims['KNRIN_MIX_EGR'])*df.time_factor,,,,,,,,,,,,,,coef_acctime,,,,,,,,, -util_KNR_MIX_KNR_cost,KNR_MIX - KNR cost,@(df.sr2_auto_op_cost * (odt_skims['KNROUT_MIX_ACC'] + dot_skims['KNRIN_MIX_EGR']) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,,,,,coef_income,,,,,,,,, -util_KNR_MIX_Walk_egress_time_(at_attraction_end),KNR_MIX - Walk egress time (at attraction end),@2 *df.dest_mix_time* df.time_factor,,,,,,,,,,,,,,coef_acctime,,,,,,,,, +util_KNR_MIX_KNR_cost,KNR_MIX - KNR cost,@(df.sr2_auto_op_cost * ((odt_skims['KNROUT_MIX_ACC'] + dot_skims['KNRIN_MIX_EGR'])/60) *driveSpeed )/df.cost_sensitivity,,,,,,,,,,,,,,coef_income,,,,,,,,, +util_KNR_MIX_Walk_egress_time_(at_attraction_end),KNR_MIX - Walk egress time (at attraction end),"@np.where(df.nev_mix_egress_available, df.nev_mix_egress_time, np.where(df.microtransit_mix_egress_available, df.microtransit_mix_egress_time, 2*df.dest_mix_time)) * df.time_factor",,,,,,,,,,,,,,coef_acctime,,,,,,,,, +util_KNR_MIX_wait_egress_time_(at_attraction_end),KNR_MIX - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_mix_egress_available, 2*nevWaitTime, np.where(df.microtransit_mix_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,,,,,,coef_wait,,,,,,,,, util_KNR_MIX_Walk_other_time,KNR_MIX - Walk other time,@(odt_skims['KNROUT_MIX_XFERWALK'] + dot_skims['KNRIN_MIX_XFERWALK']) *df.time_factor,,,,,,,,,,,,,,coef_xwalk,,,,,,,,, -util_KNR_MIX_Fare,KNR_MIX - Fare,@(odt_skims['KNROUT_MIX_FARE'] + dot_skims['KNRIN_MIX_FARE'])*100/df.cost_sensitivity,,,,,,,,,,,,,,coef_income,,,,,,,,, +util_KNR_MIX_Fare,KNR_MIX - Fare,@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_MIX_FARE'] + dot_skims['KNRIN_MIX_FARE'])*100*df.num_participants/df.cost_sensitivity,,,,,,,,,,,,,,coef_income,,,,,,,,, util_KNR_MIX_ASC,KNR_MIX - Alternative-specific constant,(knr_mix_out_asc + knr_mix_inb_asc) * time_factor,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNR_MIX - Age 16 to 24,KNR_MIX - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,,,,,,coef_age1624_tran,,,,,,,,, util_KNR_MIX - Age 41 to 55,KNR_MIX - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,,,,,,coef_age4155_tran,,,,,,,,, @@ -261,14 +272,17 @@ util_KNR_MIX - Destination Employment Density,KNR_MIX - Destination Employment D #,,,,,,,,,,,,,,,,,,,,,,,,, util_TNC_LOC_Unavailable,TNC_LOC - Unavailable,"@(df.tnc_local_available == False)|(df.num_escortees>0)",,,,,,,,,,,,,,,-999,,,,,,,, util_TNC_LOC_Unavailable_for_persons_less_than_16,TNC_LOC - Unavailable for persons less than 16,age < 12,,,,,,,,,,,,,,,-999,,,,,,,, -util_TNC_LOC_In_vehicle_time,TNC_LOC - In-vehicle time,@(odt_skims['TNCOUT_LOC_TOTALIVTT'] + dot_skims['TNCIN_LOC_TOTALIVTT']) *df.time_factor,,,,,,,,,,,,,,,coef_ivt,,,,,,,, -util_TNC_LOC_iwait_time,TNC_LOC - First iwait time,@(odt_skims['TNCOUT_LOC_FIRSTWAIT']) + (dot_skims['TNCIN_LOC_FIRSTWAIT'])*df.time_factor,,,,,,,,,,,,,,,coef_wait,,,,,,,, -util_TNC_LOC_transfer_wait_time,TNC_LOC - transfer wait time,@(odt_skims['TNCOUT_LOC_XFERWAIT'] + dot_skims['TNCIN_LOC_XFERWAIT']) *df.time_factor,,,,,,,,,,,,,,,coef_xwait,,,,,,,, -util_TNC_LOC_number_of_transfers,TNC_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['TNCOUT_LOC_XFERS'], None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['TNCIN_MIX_XFERS'], None, 4))) *df.time_factor",,,,,,,,,,,,,,,coef_xferdrive,,,,,,,, -util_TNC_LOC_TNC_time,TNC_LOC - TNC time,@(odt_skims['TNCOUT_LOC_ACC'] + dot_skims['TNCIN_LOC_EGR'])* df.time_factor,,,,,,,,,,,,,,,coef_acctime,,,,,,,, -util_TNC_LOC_Walk_egress_time_(at_attraction_end),TNC_LOC - Walk egress time (at attraction end),@2 * df.dest_local_time * df.time_factor,,,,,,,,,,,,,,,coef_acctime,,,,,,,, -util_TNC_LOC_Walk_other_time,TNC_LOC - Walk other time,@(odt_skims['TNCOUT_LOC_XFERWALK'] + dot_skims['TNCIN_LOC_XFERWALK']) *df.time_factor,,,,,,,,,,,,,,,coef_xwalk,,,,,,,, -util_TNC_LOC_Fare_and_operating_cost,TNC_LOC - Fare ,@(odt_skims['TNCOUT_LOC_FARE'] + dot_skims['TNCIN_LOC_FARE'])*100/df.cost_sensitivity,,,,,,,,,,,,,,,coef_income,,,,,,,, +util_TNC_LOC_In_vehicle_time,TNC_LOC - In-vehicle time,@(odt_skims['KNROUT_LOC_TOTALIVTT'] + dot_skims['KNRIN_LOC_TOTALIVTT']) *df.time_factor,,,,,,,,,,,,,,,coef_ivt,,,,,,,, +util_TNC_LOC_iwait_time,TNC_LOC - First iwait time,@(odt_skims['KNROUT_LOC_FIRSTWAIT']) + (dot_skims['KNRIN_LOC_FIRSTWAIT'])*df.time_factor,,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_transfer_wait_time,TNC_LOC - transfer wait time,@(odt_skims['KNROUT_LOC_XFERWAIT'] + dot_skims['KNRIN_LOC_XFERWAIT']) *df.time_factor,,,,,,,,,,,,,,,coef_xwait,,,,,,,, +util_TNC_LOC_number_of_transfers,TNC_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_LOC_XFERS'] + df.mtnev_acc_xfer + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_MIX_XFERS'] + df.mtnev_acc_xfer + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,,,,,,,coef_xferdrive,,,,,,,, +util_TNC_LOC_TNC_time,TNC_LOC - TNC time,"@np.where(df.nev_local_access_available, df.nev_local_access_time, np.where(df.microtransit_local_access_available, df.microtransit_local_access_time, odt_skims['KNROUT_LOC_ACC'] + dot_skims['KNRIN_LOC_EGR'])) *df.time_factor",,,,,,,,,,,,,,,coef_acctime,,,,,,,, +util_TNC_LOC_TNC_wait_time,TNC_LOC - TNC wait time,"@np.where(df.nev_local_access_available, 2*nevWaitTime, np.where(df.microtransit_local_access_available, 2*microtransitWaitTime, 2*df.origSingleTNCWaitTime)) *df.time_factor",,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_TNC_fare,TNC_LOC - TNC fare,"@(~df.nev_local_access_available) * (~df.microtransit_local_access_available) * ((np.maximum(TNC_single_baseFare*2 + ((odt_skims['KNROUT_LOC_ACC'] + dot_skims['KNRIN_LOC_EGR'])/60 * driveSpeed) * TNC_single_costPerMile + (odt_skims['KNROUT_LOC_ACC'] + dot_skims['KNRIN_LOC_EGR']) * TNC_single_costPerMinute, TNC_single_costMinimum*2)*100)/df.cost_sensitivity)",,,,,,,,,,,,,,,coef_income,,,,,,,, +util_TNC_LOC_Walk_egress_time_(at_attraction_end),TNC_LOC - Walk egress time (at attraction end),"@np.where(df.nev_local_egress_available, df.nev_local_egress_time, np.where(df.microtransit_local_egress_available, df.microtransit_local_egress_time, 2*df.dest_local_time)) * df.time_factor",,,,,,,,,,,,,,,coef_acctime,,,,,,,, +util_TNC_LOC_wait_egress_time_(at_attraction_end),TNC_LOC - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_local_egress_available, 2*nevWaitTime, np.where(df.microtransit_local_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_Walk_other_time,TNC_LOC - Walk other time,@(odt_skims['KNROUT_LOC_XFERWALK'] + dot_skims['KNRIN_LOC_XFERWALK']) *df.time_factor,,,,,,,,,,,,,,,coef_xwalk,,,,,,,, +util_TNC_LOC_Fare_and_operating_cost,TNC_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_LOC_FARE'] + dot_skims['KNRIN_LOC_FARE'])*100*df.num_participants/df.cost_sensitivity",,,,,,,,,,,,,,,coef_income,,,,,,,, util_TNC_LOC - Age 16 to 24,TNC_LOC - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,,,,,,,coef_age1624_tran,,,,,,,, util_TNC_LOC - Age 41 to 55,TNC_LOC - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,,,,,,,coef_age4155_tran,,,,,,,, util_TNC_LOC - Age 56 to 64,TNC_LOC - Age 56 to 64,@(df.age > 55) & (df.age < 65),,,,,,,,,,,,,,,coef_age5664_tran,,,,,,,, @@ -278,18 +292,21 @@ util_TNC_LOC - Destination Employment Density,TNC_LOC - Destination Employment D #,TNC_PRM,,,,,,,,,,,,,,,,,,,,,,,, util_TNC_PRM_Unavailable,TNC_PRM - Unavailable,"@(df.tnc_premium_available == False)|(df.num_escortees>0)",,,,,,,,,,,,,,,,-999,,,,,,, util_TNC_PRM_Unavailable_for_persons_less_than_16,TNC_PRM - Unavailable for persons less than 12,@df.age < 12,,,,,,,,,,,,,,,,-999,,,,,,, -util_TNC_PRM_In_vehicle_time,TNC_PRM - In-vehicle time,@(odt_skims['TNCOUT_PRM_TOTALIVTT'] + dot_skims['TNCIN_PRM_TOTALIVTT']) *df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_In_vehicle_time_on_LRT,TNC_PRM - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['TNCOUT_PRM_LRTIVTT'] + dot_skims['TNCIN_PRM_LRTIVTT'])*df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_In_vehicle_time_on_CMR,TNC_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['TNCOUT_PRM_CMRIVTT'] + dot_skims['TNCIN_PRM_CMRIVTT']) *df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_In_vehicle_time_on_LTD_EXP,TNC_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['TNCOUT_PRM_LTDEXPIVTT'] + dot_skims['TNCIN_PRM_LTDEXPIVTT'] + odt_skims['TNCOUT_PRM_EXPIVTT'] + dot_skims['TNCIN_PRM_EXPIVTT'])*df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_In_vehicle_time_on_URB,TNC_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['TNCOUT_PRM_BRTIVTT'] + dot_skims['TNCIN_PRM_BRTIVTT'])*df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_FIRST_iwait_time,TNC_PRM - First iwait time,@(odt_skims['TNCOUT_PRM_FIRSTWAIT'] + dot_skims['TNCIN_PRM_FIRSTWAIT']) *df.time_factor,,,,,,,,,,,,,,,,coef_wait,,,,,,, -util_TNC_PRM_transfer_wait_time,TNC_PRM - transfer wait time,@(odt_skims['TNCOUT_PRM_XFERWAIT'] + dot_skims['TNCIN_PRM_XFERWAIT'])*df.time_factor,,,,,,,,,,,,,,,,coef_xwait,,,,,,, -util_TNC_PRM_number_of_transfers,TNC_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['TNCOUT_PRM_XFERS'] + df.mtnev_acc_xfer + df.mtnev_egr_xfer, None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['TNCIN_PRM_XFERS'] + df.mtnev_acc_xfer + df.mtnev_egr_xfer, None, 4))) *df.time_factor",,,,,,,,,,,,,,,,coef_xferdrive,,,,,,, -util_TNC_PRM_TNC_time,TNC_PRM - TNC time,"@np.where(df.nev_access_available, df.nev_access_time, np.where(df.microtransit_access_available, df.microtransit_access_time, odt_skims['TNCOUT_PRM_ACC'] + dot_skims['TNCIN_PRM_EGR'])) *df.time_factor",,,,,,,,,,,,,,,,coef_acctime,,,,,,, -util_TNC_PRM_Walk_egress_time_(at_attraction_end),TNC_PRM - Walk egress time (at attraction end),"@np.where(df.nev_egress_available, df.nev_egress_time, np.where(df.microtransit_egress_available, df.microtransit_egress_time, 2*df.dest_prm_time)) * df.time_factor",,,,,,,,,,,,,,,,coef_acctime,,,,,,, -util_TNC_PRM_Walk_other_time,TNC_PRM - Walk other time,@(odt_skims['TNCOUT_PRM_XFERWALK'] + dot_skims['TNCIN_PRM_XFERWALK']) *df.time_factor,,,,,,,,,,,,,,,,coef_xwalk,,,,,,, -util_TNC_PRM_Fare,TNC_PRM - Fare,"@np.where(df.microtransit_access_available | df.nev_access_available, df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'] + dot_skims['KNRIN_PRM_FARE']), df.transitSubsidyPassDiscount*(odt_skims['TNCOUT_PRM_FARE'] + dot_skims['TNCIN_PRM_FARE']))*100/df.cost_sensitivity",,,,,,,,,,,,,,,,coef_income,,,,,,, +util_TNC_PRM_In_vehicle_time,TNC_PRM - In-vehicle time,@(odt_skims['KNROUT_PRM_TOTALIVTT'] + dot_skims['KNRIN_PRM_TOTALIVTT']) *df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_In_vehicle_time_on_LRT,TNC_PRM - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['KNROUT_PRM_LRTIVTT'] + dot_skims['KNRIN_PRM_LRTIVTT'])*df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_In_vehicle_time_on_CMR,TNC_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNROUT_PRM_CMRIVTT'] + dot_skims['KNRIN_PRM_CMRIVTT']) *df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_In_vehicle_time_on_LTD_EXP,TNC_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNROUT_PRM_LTDEXPIVTT'] + dot_skims['KNRIN_PRM_LTDEXPIVTT'] + odt_skims['KNROUT_PRM_EXPIVTT'] + dot_skims['KNRIN_PRM_EXPIVTT'])*df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_In_vehicle_time_on_URB,TNC_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNROUT_PRM_BRTIVTT'] + dot_skims['KNRIN_PRM_BRTIVTT'])*df.time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_FIRST_iwait_time,TNC_PRM - First iwait time,"@(odt_skims['KNROUT_PRM_FIRSTWAIT'] + dot_skims['KNRIN_PRM_FIRSTWAIT']) *df.time_factor * np.where((odt_skims['KNROUT_PRM_BRTIVTT'] + dot_skims['KNRIN_PRM_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNC_PRM_transfer_wait_time,TNC_PRM - transfer wait time,"@(odt_skims['KNROUT_PRM_XFERWAIT'] + dot_skims['KNRIN_PRM_XFERWAIT'])*df.time_factor * np.where((odt_skims['KNROUT_PRM_BRTIVTT'] + dot_skims['KNRIN_PRM_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,coef_xwait,,,,,,, +util_TNC_PRM_number_of_transfers,TNC_PRM - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_PRM_XFERS'] + df.mtnev_acc_xfer + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_PRM_XFERS'] + df.mtnev_acc_xfer + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,,,,,,,,coef_xferdrive,,,,,,, +util_TNC_PRM_TNC_time,TNC_PRM - TNC time,"@np.where(df.nev_prm_access_available, df.nev_prm_access_time, np.where(df.microtransit_prm_access_available, df.microtransit_prm_access_time, odt_skims['KNROUT_PRM_ACC'] + dot_skims['KNRIN_PRM_EGR'])) *df.time_factor",,,,,,,,,,,,,,,,coef_acctime,,,,,,, +util_TNC_PRM_TNC_wait_time,TNC_PRM - TNC wait time,"@np.where(df.nev_prm_access_available, 2*nevWaitTime, np.where(df.microtransit_prm_access_available, 2*microtransitWaitTime, 2*df.origSingleTNCWaitTime)) *df.time_factor",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNC_PRM_TNC_fare,TNC_PRM - TNC fare,"@(~df.nev_prm_access_available) * (~df.microtransit_prm_access_available) * ((np.maximum(TNC_single_baseFare*2 + ((odt_skims['KNROUT_PRM_ACC'] + dot_skims['KNRIN_PRM_EGR'])/60 * driveSpeed) * TNC_single_costPerMile + (odt_skims['KNROUT_PRM_ACC'] + dot_skims['KNRIN_PRM_EGR']) * TNC_single_costPerMinute, TNC_single_costMinimum*2)*100)/df.cost_sensitivity)",,,,,,,,,,,,,,,,coef_income,,,,,,, +util_TNC_PRM_Walk_egress_time_(at_attraction_end),TNC_PRM - Walk egress time (at attraction end),"@np.where(df.nev_prm_egress_available, df.nev_prm_egress_time, np.where(df.microtransit_prm_egress_available, df.microtransit_prm_egress_time, 2*df.dest_prm_time)) * df.time_factor",,,,,,,,,,,,,,,,coef_acctime,,,,,,, +util_TNC_PRM_wait_egress_time_(at_attraction_end),TNC_PRM - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_prm_egress_available, 2*nevWaitTime, np.where(df.microtransit_prm_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNC_PRM_Walk_other_time,TNC_PRM - Walk other time,@ (odt_skims['KNROUT_PRM_XFERWALK'] + dot_skims['KNRIN_PRM_XFERWALK']) *df.time_factor,,,,,,,,,,,,,,,,coef_xwalk,,,,,,, +util_TNC_PRM_Fare,TNC_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'] + dot_skims['KNRIN_PRM_FARE'])*100*df.num_participants/df.cost_sensitivity",,,,,,,,,,,,,,,,coef_income,,,,,,, util_TNC_PRM_ASC,TNC_PRM - Alternative-specific constant,(tnc_prm_out_asc + tnc_prm_inb_asc) * time_factor,,,,,,,,,,,,,,,,coef_ivt,,,,,,, util_TNC_PRM - Age 16 to 24,TNC_PRM - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,,,,,,,,coef_age1624_tran,,,,,,, util_TNC_PRM - Age 41 to 55,TNC_PRM - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,,,,,,,,coef_age4155_tran,,,,,,, @@ -300,18 +317,21 @@ util_TNC_PRM - Destination Employment Density,TNC_PRM - Destination Employment D #,TNC_MIX,,,,,,,,,,,,,,,,,,,,,,,, util_TNC_MIX_Unavailable,TNC_mix - Unavailable,"@(df.tnc_mix_available == False)|(df.num_escortees>0)",,,,,,,,,,,,,,,,,-999,,,,,, util_TNC_PRM_Unavailable_for_persons_less_than_16,TNC_mix - Unavailable for persons less than 16,@df.age < 12,,,,,,,,,,,,,,,,,-999,,,,,, -util_TNC_MIX_In_vehicle_time,TNC_MIX - In-vehicle time,@(odt_skims['TNCOUT_MIX_TOTALIVTT'] + dot_skims['TNCIN_MIX_TOTALIVTT']) *df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_In_vehicle_time_on_LRT,TNC_MIX - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['TNCOUT_MIX_LRTIVTT'] + dot_skims['TNCIN_MIX_LRTIVTT']) *df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_In_vehicle_time_on_CMR,TNC_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['TNCOUT_MIX_CMRIVTT'] + dot_skims['TNCIN_MIX_CMRIVTT'])*df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_In_vehicle_time_on_LTD_EXP,TNC_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['TNCOUT_MIX_LTDEXPIVTT'] + dot_skims['TNCIN_MIX_LTDEXPIVTT'] + odt_skims['TNCOUT_MIX_EXPIVTT'] + dot_skims['TNCIN_MIX_EXPIVTT'])*df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_In_vehicle_time_on_URB,TNC_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['TNCOUT_MIX_BRTIVTT'] + dot_skims['TNCIN_MIX_BRTIVTT']) *df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_FIRST_iwait_time,TNC_MIX - First iwait time,@(odt_skims['TNCOUT_MIX_FIRSTWAIT'] + dot_skims['TNCIN_MIX_FIRSTWAIT']) *df.time_factor,,,,,,,,,,,,,,,,,coef_wait,,,,,, -util_TNC_MIX_transfer_wait_time,TNC_MIX - transfer wait time,@(odt_skims['TNCOUT_MIX_XFERWAIT'] + dot_skims['TNCIN_MIX_XFERWAIT']) *df.time_factor,,,,,,,,,,,,,,,,,coef_xwait,,,,,, -util_TNC_MIX_number_of_transfers,TNC_MIX - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['TNCOUT_MIX_XFERS'], None, 4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['TNCIN_MIX_XFERS'], None, 4))) *df.time_factor",,,,,,,,,,,,,,,,,coef_xferdrive,,,,,, -util_TNC_MIX_TNC_time,TNC_MIX - TNC time,@(odt_skims['TNCOUT_MIX_ACC'] + dot_skims['TNCIN_MIX_EGR'])*df.time_factor,,,,,,,,,,,,,,,,,coef_acctime,,,,,, -util_TNC_MIX_Walk_egress_time_(at_attraction_end),TNC_MIX - Walk egress time (at attraction end),@2 * df.dest_mix_time * df.time_factor,,,,,,,,,,,,,,,,,coef_acctime,,,,,, -util_TNC_MIX_Walk_other_time,TNC_MIX - Walk other time,@(odt_skims['TNCOUT_MIX_XFERWALK'] + dot_skims['TNCIN_MIX_XFERWALK']) *df.time_factor,,,,,,,,,,,,,,,,,coef_xwalk,,,,,, -util_TNC_MIX_Fare,TNC_MIX - Fare,@(odt_skims['TNCOUT_MIX_FARE'] + dot_skims['TNCIN_MIX_FARE'])*100/df.cost_sensitivity,,,,,,,,,,,,,,,,,coef_income,,,,,, +util_TNC_MIX_In_vehicle_time,TNC_MIX - In-vehicle time,@(odt_skims['KNROUT_MIX_TOTALIVTT'] + dot_skims['KNRIN_MIX_TOTALIVTT']) *df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_In_vehicle_time_on_LRT,TNC_MIX - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['KNROUT_MIX_LRTIVTT'] + dot_skims['KNRIN_MIX_LRTIVTT']) *df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_In_vehicle_time_on_CMR,TNC_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNROUT_MIX_CMRIVTT'] + dot_skims['KNRIN_MIX_CMRIVTT'])*df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_In_vehicle_time_on_LTD_EXP,TNC_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNROUT_MIX_LTDEXPIVTT'] + dot_skims['KNRIN_MIX_LTDEXPIVTT'] + odt_skims['KNROUT_MIX_EXPIVTT'] + dot_skims['KNRIN_MIX_EXPIVTT'])*df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_In_vehicle_time_on_URB,TNC_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNROUT_MIX_BRTIVTT'] + dot_skims['KNRIN_MIX_BRTIVTT']) *df.time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_FIRST_iwait_time,TNC_MIX - First iwait time,"@(odt_skims['KNROUT_MIX_FIRSTWAIT'] + dot_skims['KNRIN_MIX_FIRSTWAIT']) *df.time_factor * np.where((odt_skims['KNROUT_MIX_BRTIVTT'] + dot_skims['KNRIN_MIX_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNC_MIX_transfer_wait_time,TNC_MIX - transfer wait time,"@(odt_skims['KNROUT_MIX_XFERWAIT'] + dot_skims['KNRIN_MIX_XFERWAIT']) *df.time_factor * np.where((odt_skims['KNROUT_MIX_BRTIVTT'] + dot_skims['KNRIN_MIX_BRTIVTT']) > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,,coef_xwait,,,,,, +util_TNC_MIX_number_of_transfers,TNC_MIX - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['KNROUT_MIX_XFERS'] + df.mtnev_acc_xfer + df.mtnev_egr_xfer, a_min=None,a_max=4))) + (-23+23*np.exp(0.414*np.clip(dot_skims['KNRIN_MIX_XFERS'] + df.mtnev_acc_xfer + df.mtnev_egr_xfer, a_min=None,a_max=4))) *df.time_factor",,,,,,,,,,,,,,,,,coef_xferdrive,,,,,, +util_TNC_MIX_TNC_time,TNC_MIX - TNC time,"@np.where(df.nev_mix_access_available, df.nev_mix_access_time, np.where(df.microtransit_mix_access_available, df.microtransit_mix_access_time, odt_skims['KNROUT_MIX_ACC'] + dot_skims['KNRIN_MIX_EGR'])) *df.time_factor",,,,,,,,,,,,,,,,,coef_acctime,,,,,, +util_TNC_MIX_TNC_wait_time,TNC_MIX - TNC wait time,"@np.where(df.nev_mix_access_available, 2*nevWaitTime, np.where(df.microtransit_mix_access_available, 2*microtransitWaitTime, 2*df.origSingleTNCWaitTime)) *df.time_factor",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNC_MIX_TNC_fare,TNC_MIX - TNC fare,"@(~df.nev_mix_access_available) * (~df.microtransit_mix_access_available) * ((np.maximum(TNC_single_baseFare*2 + ((odt_skims['KNROUT_MIX_ACC'] + dot_skims['KNRIN_MIX_EGR'])/60 * driveSpeed) * TNC_single_costPerMile + (odt_skims['KNROUT_MIX_ACC'] + dot_skims['KNRIN_MIX_EGR']) * TNC_single_costPerMinute, TNC_single_costMinimum*2)*100)/df.cost_sensitivity)",,,,,,,,,,,,,,,,,coef_income,,,,,, +util_TNC_MIX_Walk_egress_time_(at_attraction_end),TNC_MIX - Walk egress time (at attraction end),"@np.where(df.nev_mix_egress_available, df.nev_mix_egress_time, np.where(df.microtransit_mix_egress_available, df.microtransit_mix_egress_time, 2*df.dest_mix_time)) * df.time_factor",,,,,,,,,,,,,,,,,coef_acctime,,,,,, +util_TNC_MIX_wait_egress_time_(at_attraction_end),TNC_MIX - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_mix_egress_available, 2*nevWaitTime, np.where(df.microtransit_mix_egress_available, 2*microtransitWaitTime, 0)) * df.time_factor",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNC_MIX_Walk_other_time,TNC_MIX - Walk other time,@(odt_skims['KNROUT_MIX_XFERWALK'] + dot_skims['KNRIN_MIX_XFERWALK']) *df.time_factor,,,,,,,,,,,,,,,,,coef_xwalk,,,,,, +util_TNC_MIX_Fare,TNC_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_MIX_FARE'] + dot_skims['KNRIN_MIX_FARE'])*100*df.num_participants/df.cost_sensitivity",,,,,,,,,,,,,,,,,coef_income,,,,,, util_TNC_MIX_ASC,TNC_MIX - Alternative-specific constant,(tnc_mix_out_asc + tnc_mix_inb_asc) * time_factor,,,,,,,,,,,,,,,,,coef_ivt,,,,,, util_TNC_MIX - Age 16 to 24,TNC_MIX - Age 16 to 24,@(df.age > 15) & (df.age < 25),,,,,,,,,,,,,,,,,coef_age1624_tran,,,,,, util_TNC_MIX - Age 41 to 55,TNC_MIX - Age 41 to 55,@(df.age > 40) & (df.age < 56),,,,,,,,,,,,,,,,,coef_age4155_tran,,,,,, @@ -322,15 +342,16 @@ util_TNC_MIX - Destination Employment Density,TNC_MIX - Destination Employment D #,Taxi,,,,,,,,,,,,,,,,,,,,,,,, util_Taxi - In-vehicle time,Taxi - In-vehicle time,@(df.s2_time_skims_inb + df.s2_time_skims_out) * df.time_factor,,,,,,,,,,,,,,,,,,coef_ivt,,,,, util_Taxi - Wait time,Taxi - Wait time,@df.totalWaitTaxi * df.time_factor,,,,,,,,,,,,,,,,,,coef_wait,,,,, -util_Taxi - Fare,Taxi - Fare,@((Taxi_baseFare*2 + (df.s2_dist_skims_out + df.s2_dist_skims_inb) * Taxi_costPerMile + (df.s2_time_skims_out + df.s2_time_skims_inb) * Taxi_costPerMinute)*100 + df.s2_cost_skims_out + df.s2_cost_skims_inb)/df.cost_sensitivity,,,,,,,,,,,,,,,,,,coef_income,,,,, +util_Taxi - Fare,Taxi - Fare,@(((Taxi_baseFare*2 + (df.s2_dist_skims_out + df.s2_dist_skims_inb) * Taxi_costPerMile + (df.s2_time_skims_out + df.s2_time_skims_inb) * Taxi_costPerMinute)*100 + df.s2_cost_skims_out + df.s2_cost_skims_inb))/df.cost_sensitivity,,,,,,,,,,,,,,,,,,coef_income,,,,, #,TNC Single,,,,,,,,,,,,,,,,,,,,,,,, util_TNC Single - In-vehicle time,TNC Single - In-vehicle time,@(df.s2_time_skims_out + df.s2_time_skims_inb) * df.time_factor,,,,,,,,,,,,,,,,,,,coef_ivt,,,, util_TNC Single - Wait time,TNC Single - Wait time,@df.totalWaitSingleTNC * df.time_factor,,,,,,,,,,,,,,,,,,,coef_wait,,,, -util_TNC Single - Cost,TNC Single - Cost,"@(np.maximum(TNC_single_baseFare*2 + (df.s2_dist_skims_out + df.s2_dist_skims_inb) * TNC_single_costPerMile + (df.s2_time_skims_out + df.s2_time_skims_inb) * TNC_single_costPerMinute, TNC_single_costMinimum*2)*100 + df.s2_cost_skims_out + df.s2_cost_skims_inb)/df.cost_sensitivity",,,,,,,,,,,,,,,,,,,coef_income,,,, +util_TNC Single - Cost,TNC Single - Cost,"@((np.maximum(TNC_single_baseFare*2 + (df.s2_dist_skims_out + df.s2_dist_skims_inb) * TNC_single_costPerMile + (df.s2_time_skims_out + df.s2_time_skims_inb) * TNC_single_costPerMinute, TNC_single_costMinimum*2)*100 + df.s2_cost_skims_out + df.s2_cost_skims_inb))/df.cost_sensitivity",,,,,,,,,,,,,,,,,,,coef_income,,,, #,TNC Shared,,,,,,,,,,,,,,,,,,,,,,,, -util_TNC Shared - In-vehicle time,TNC Shared - In-vehicle time,"@(np.where(df.nev_available, df.nev_time, np.where(df.microtransit_available, df.microtransit_time, (df.s2_time_skims_out + df.s2_time_skims_inb)))) * TNC_shared_IVTFactor * df.time_factor",,,,,,,,,,,,,,,,,,,,coef_ivt,,, +util_TNC Shared_switch,TNC Shared - switch turn-off (depends on data availability),@((~df.nev_available) & (~df.microtransit_available) & (scenarioYear==2022)),,,,,,,,,,,,,,,,,,,,-999,,, +util_TNC Shared - In-vehicle time,TNC Shared - In-vehicle time,"@(np.where(df.nev_available, df.nev_time, np.where(df.microtransit_available, df.microtransit_time, (df.s3_time_skims_out + df.s3_time_skims_inb) * TNC_shared_IVTFactor))) * df.time_factor",,,,,,,,,,,,,,,,,,,,coef_ivt,,, util_TNC Shared - Wait time,TNC Shared - Wait time,"@np.where(df.nev_available, 2*nevWaitTime, np.where(df.microtransit_available, 2*microtransitWaitTime, df.totalWaitSharedTNC)) * df.time_factor",,,,,,,,,,,,,,,,,,,,coef_wait,,, -util_TNC Shared - Cost,TNC Shared - Cost,"@np.where(df.nev_available, 2*nevCost, np.where(df.microtransit_available, 2*microtransitCost, (np.maximum(TNC_shared_baseFare*2 + (df.s2_dist_skims_out + df.s2_dist_skims_inb) * TNC_shared_costPerMile + (df.s2_time_skims_out + df.s2_time_skims_inb)* TNC_shared_costPerMinute, TNC_shared_costMinimum*2)*100 + df.s2_cost_skims_out + df.s2_cost_skims_inb)))/df.cost_sensitivity",,,,,,,,,,,,,,,,,,,,coef_income,,, +util_TNC Shared - Cost,TNC Shared - Cost,"@np.where(df.nev_available, 2*nevCost, np.where(df.microtransit_available, 2*microtransitCost, (np.maximum(TNC_shared_baseFare*2 + (df.s3_dist_skims_out + df.s3_dist_skims_inb) * TNC_shared_costPerMile + (df.s3_time_skims_out + df.s3_time_skims_inb)* TNC_shared_costPerMinute, TNC_shared_costMinimum*2)*100 + df.s3_cost_skims_out + df.s3_cost_skims_inb)))/df.cost_sensitivity",,,,,,,,,,,,,,,,,,,,coef_income,,, #,School bus,,,,,,,,,,,,,,,,,,,,,,,, util_School Bus - Unavailable,School Bus - Unavailable,SCHBUS_available==0,,,,,,,,,,,,,,,,,,,,,-999,, util_School Bus - In-vehicle Time at 20 miles per hour,School Bus - In-vehicle Time at 20 miles per hour,(da_dist_skims_out + da_dist_skims_inb)*3 * time_factor,,,,,,,,,,,,,,,,,,,,,coef_ivt,, @@ -355,20 +376,27 @@ util_calib_autosufficienth,abm2+ calibration constant,@(df.is_indiv & (df.auto_o util_calib_zeroautohhjoint,abm2+ calibration constant,@(df.is_joint & (df.auto_ownership == 0)),,,coef_calib_zeroautohhjointtou_SHARED3,coef_calib_zeroautohhjointtou_WALK,coef_calib_zeroautohhjointtou_BIKE,coef_calib_zeroautohhjointtou_WALK_TRANSIT,coef_calib_zeroautohhjointtou_WALK_TRANSIT,coef_calib_zeroautohhjointtou_WALK_TRANSIT,coef_calib_zeroautohhjointtou_PNR_TRANSIT,coef_calib_zeroautohhjointtou_PNR_TRANSIT,coef_calib_zeroautohhjointtou_PNR_TRANSIT,coef_calib_zeroautohhjointtou_KNR_TRANSIT,coef_calib_zeroautohhjointtou_KNR_TRANSIT,coef_calib_zeroautohhjointtou_KNR_TRANSIT,coef_calib_zeroautohhjointtou_TNC_TRANSIT,coef_calib_zeroautohhjointtou_TNC_TRANSIT,coef_calib_zeroautohhjointtou_TNC_TRANSIT,coef_calib_zeroautohhjointtou_TAXI,coef_calib_zeroautohhjointtou_TNC_SINGLE,coef_calib_zeroautohhjointtou_TNC_SHARED,,coef_calib_zeroautohhjointtou_EBIKE,coef_calib_zeroautohhjointtou_ESCOOTER util_calib_autodeficienthh,abm2+ calibration constant,@(df.is_joint & (df.auto_ownership < df.num_adults) & (df.auto_ownership > 0)),,,coef_calib_autodeficienthhjoi_SHARED3,coef_calib_autodeficienthhjoi_WALK,coef_calib_autodeficienthhjoi_BIKE,coef_calib_autodeficienthhjoi_WALK_TRANSIT,coef_calib_autodeficienthhjoi_WALK_TRANSIT,coef_calib_autodeficienthhjoi_WALK_TRANSIT,coef_calib_autodeficienthhjoi_PNR_TRANSIT,coef_calib_autodeficienthhjoi_PNR_TRANSIT,coef_calib_autodeficienthhjoi_PNR_TRANSIT,coef_calib_autodeficienthhjoi_KNR_TRANSIT,coef_calib_autodeficienthhjoi_KNR_TRANSIT,coef_calib_autodeficienthhjoi_KNR_TRANSIT,coef_calib_autodeficienthhjoi_TNC_TRANSIT,coef_calib_autodeficienthhjoi_TNC_TRANSIT,coef_calib_autodeficienthhjoi_TNC_TRANSIT,coef_calib_autodeficienthhjoi_TAXI,coef_calib_autodeficienthhjoi_TNC_SINGLE,coef_calib_autodeficienthhjoi_TNC_SHARED,,coef_calib_autodeficienthhjoi_EBIKE,coef_calib_autodeficienthhjoi_ESCOOTER util_calib_autosufficienth,abm2+ calibration constant,@(df.is_joint & (df.auto_ownership >= df.num_adults) & (df.auto_ownership > 0)),,,coef_calib_autosufficienthhjo_SHARED3,coef_calib_autosufficienthhjo_WALK,coef_calib_autosufficienthhjo_BIKE,coef_calib_autosufficienthhjo_WALK_TRANSIT,coef_calib_autosufficienthhjo_WALK_TRANSIT,coef_calib_autosufficienthhjo_WALK_TRANSIT,coef_calib_autosufficienthhjo_PNR_TRANSIT,coef_calib_autosufficienthhjo_PNR_TRANSIT,coef_calib_autosufficienthhjo_PNR_TRANSIT,coef_calib_autosufficienthhjo_KNR_TRANSIT,coef_calib_autosufficienthhjo_KNR_TRANSIT,coef_calib_autosufficienthhjo_KNR_TRANSIT,coef_calib_autosufficienthhjo_TNC_TRANSIT,coef_calib_autosufficienthhjo_TNC_TRANSIT,coef_calib_autosufficienthhjo_TNC_TRANSIT,coef_calib_autosufficienthhjo_TAXI,coef_calib_autosufficienthhjo_TNC_SINGLE,coef_calib_autosufficienthhjo_TNC_SHARED,,coef_calib_autosufficienthhjo_EBIKE,coef_calib_autosufficienthhjo_ESCOOTER -#util_calib_c_ivtebikeowner,abm2+ calibration constant,time_factor*(ebikeOwnership*(maxEbikeBenefit*(-1))),,,,,coef_calib_civtebikeownership_BIKE,,,,,,,,,,,,,,,,,, util_calib_escorttour,abm2+ calibration constant,tour_type == 'escort',,,,coef_calib_escorttour_WALK,coef_calib_escorttour_BIKE,coef_calib_escorttour_WALK_TRANSIT,coef_calib_escorttour_WALK_TRANSIT,coef_calib_escorttour_WALK_TRANSIT,coef_calib_escorttour_PNR_TRANSIT,coef_calib_escorttour_PNR_TRANSIT,coef_calib_escorttour_PNR_TRANSIT,coef_calib_escorttour_KNR_TRANSIT,coef_calib_escorttour_KNR_TRANSIT,coef_calib_escorttour_KNR_TRANSIT,coef_calib_escorttour_TNC_TRANSIT,coef_calib_escorttour_TNC_TRANSIT,coef_calib_escorttour_TNC_TRANSIT,,,,,, #, School Escorting eligibility-odd looking where/isnan is to allow this to work with numba fastmath,,,,,,,,,,,,,,,,,,,,,,,, util_one_or_more_school_escort,No SOV if on school escort tour,"@(np.where(np.isnan(df.num_escortees), 0 , df.num_escortees) >= 1)",-999,,,,,,,,,,,,,,,,,,,,,, util_two_or_more_school_escort,Can't take HOV2 if taking two children and yourself,"@(np.where(np.isnan(df.num_escortees), 0 , df.num_escortees) >= 2)",,-999,,,,,,,,,,,,,,,,,,,,, #,Micromobility (e-scooter/e-bike),,,,,,,,,,,,,,,,,,,,,,,, -util_micromobility_long_access,Shut off micromobility if access time > threshold,"@((df.micro_access_out > microAccessThreshold) | (df.micro_access_inb > microAccessThreshold)|(df.num_escortees>0))",,,,,,,,,,,,,,,,,,,,,,-999,-999 +util_ebike_long_access,Shut off ebike if access time > threshold,"@(((df.micro_access_out > microAccessThreshold) | (df.micro_access_inb > microAccessThreshold)) & (~df.ebike_owner)) | (df.num_escortees>0) | (od_skims['BIKE_TIME']<=0)",,,,,,,,,,,,,,,,,,,,,,-999, +util_escooter_long_access,Shut off escooter if access time > threshold,"@((df.micro_access_out > microAccessThreshold) | (df.micro_access_inb > microAccessThreshold) | (df.num_escortees>0)) | (od_skims['BIKE_TIME']<=0)",,,,,,,,,,,,,,,,,,,,,,,-999 util_micromobility_long_trip,Shut off ebike if distance > threshold,ebikeMaxDistance,,,,,,,,,,,,,,,,,,,,,,-999, util_micromobility_long_trip,Shut off escooter if distance > threshold,escooterMaxDistance,,,,,,,,,,,,,,,,,,,,,,,-999 util_ebike_ivt,Ebike utility for in-vehicle time,@(df.ebike_time_inb + df.ebike_time_out)*df.time_factor,,,,,,,,,,,,,,,,,,,,,,coef_ivt, -util_ebike_access,Ebike utility for access/egress time,"@(microConstant + np.where(df.ebike_owner, 0, microRentTime + df.micro_access_inb + df.micro_access_out))*df.time_factor",,,,,,,,,,,,,,,,,,,,,,coef_acctime, -util_ebike_cost_inb,Ebike utility for inbound cost,"@(np.where(df.ebike_owner, 0, (microFixedCost + microVarCost*df.ebike_time_inb)/df.cost_sensitivity))",,,,,,,,,,,,,,,,,,,,,,coef_income, -util_ebike_cost_out,Ebike utility for outbound cost,"@(np.where(df.ebike_owner, 0, (microFixedCost + microVarCost*df.ebike_time_out)/df.cost_sensitivity))",,,,,,,,,,,,,,,,,,,,,,coef_income, +util_ebike_access,Ebike utility for access/egress time,"@(np.where(df.ebike_owner, 0, microRentTime + df.micro_access_inb + df.micro_access_out))*df.time_factor",,,,,,,,,,,,,,,,,,,,,,coef_acctime, +util_ebike_cost_inb,Ebike utility for inbound cost,@((~df.ebike_owner)&((microFixedCost + microVarCost*df.ebike_time_inb)/df.cost_sensitivity)),,,,,,,,,,,,,,,,,,,,,,coef_income, +util_ebike_cost_out,Ebike utility for outbound cost,@((~df.ebike_owner)&((microFixedCost + microVarCost*df.ebike_time_out)/df.cost_sensitivity)),,,,,,,,,,,,,,,,,,,,,,coef_income, util_escooter_ivt,escooter utility for in-vehicle time,@(df.escooter_time_inb + df.escooter_time_out)*df.time_factor,,,,,,,,,,,,,,,,,,,,,,,coef_ivt -util_escooter_access,escooter utility for in-vehicle time,@(microConstant + microRentTime + df.micro_access_inb + df.micro_access_out)*df.time_factor,,,,,,,,,,,,,,,,,,,,,,,coef_acctime +util_escooter_access,escooter utility for in-vehicle time,@(microRentTime + df.micro_access_inb + df.micro_access_out)*df.time_factor,,,,,,,,,,,,,,,,,,,,,,,coef_acctime util_escooter_cost_inb,escooter utility for inbound cost,@((microFixedCost + microVarCost*df.escooter_time_inb)/df.cost_sensitivity),,,,,,,,,,,,,,,,,,,,,,,coef_income util_escooter_cost_out,escooter utility for outbound cost,@((microFixedCost + microVarCost*df.escooter_time_out)/df.cost_sensitivity),,,,,,,,,,,,,,,,,,,,,,,coef_income +#,Calibration from on-board survey +util_calib_onboard,Calibration coefficient to match implied number of tours from on-board survey,1,,,,,,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,coef_calib_onboard,,,,,, +#,Flexible fleet calibration for zero-auto households +util_calib_mt_zeroautohh,Calibration coefficient for zero-auto households traveling within microtransit service area,@(df.microtransit_available & (df.auto_ownership == 0)),,,,,,,,,,,,,,,,,,,,coef_calib_mt_zeroautohh,,, +util_calib_nev_zeroautohh,Calibration coefficient for zero-auto households traveling within NEV service area,@(df.nev_available & (df.auto_ownership == 0)),,,,,,,,,,,,,,,,,,,,coef_calib_nev_zeroautohh,,, +util_calib_ebike_owner,Calibration coefficient for ebike owners,@(df.ebike_owner),,,,,coef_calib_ebike_owner_BIKE,,,,,,,,,,,,,,,,,coef_calib_ebike_owner_EBIKE, +util_calib_shared_ebike,Calibration coefficient for shared ebike,@(~df.ebike_owner),,,,,,,,,,,,,,,,,,,,,,coef_calib_ebike_shared, \ No newline at end of file diff --git a/configs/resident/tour_mode_choice_annotate_choosers_preprocessor.csv b/configs/resident/tour_mode_choice_annotate_choosers_preprocessor.csv index e34fb3e..93f35f2 100644 --- a/configs/resident/tour_mode_choice_annotate_choosers_preprocessor.csv +++ b/configs/resident/tour_mode_choice_annotate_choosers_preprocessor.csv @@ -1,22 +1,33 @@ Description,Target,Expression, #,,, -#placeholder for walk time skim,ownsTransponder,1, -#Auto IVT Factor,autoIVTFactor,"np.where(useAV==0,1.0,autoIVTFactorAV)", -placeholder Auto IVT Factor,autoIVTFactor,1, -#Auto Parking Cost Factor,autoParkingCostFactor,"np.where(useAV==0,1.0,autoParkingCostFactorAV)", -placeholder for missing autoParkingCostFactorAV,autoParkingCostFactor,1, -#Auto CPM Factor,autoCPMFactor,"np.where(useAV==0,1.0,autoCostPerMileFactorAV)", -placeholder for missing autoCostPerMileFactorAV,autoCPMFactor,1, -#Auto Terminal Time Factor,autoTermTimeFactor,"np.where(useAV==0,1.0,autoTerminalTimeFactorAV)", -placeholder for missing autoTerminalTimeFactorAV,autoTermTimeFactor,1, -#MinimumAgeDriveAlone,minimumAgeDA,"np.where(useAV==0,16,minAgeDriveAloneAV)", -placeholder for missing minAgeDriveAloneAV,minimumAgeDA,16, -freeParkingEligibility placeholder,freeParkingEligibility,0, +local,_DF_IS_TOUR,'tour_type' in df.columns, +,is_atwork_subtour,(df.tour_category == 'atwork') if _DF_IS_TOUR else False, +,_parent_tour_veh,"reindex(tours['selected_vehicle'], df['parent_tour_id']) if 'selected_vehicle' in df.columns else np.nan", +,_parent_tour_mode,"reindex(tours['tour_mode'], df['parent_tour_id']) if 'tour_mode' in df.columns else np.nan", +,sov_veh_option,"np.where(is_atwork_subtour, _parent_tour_veh, df.get('vehicle_occup_1', np.nan))", +,sr2_veh_option,"np.where(is_atwork_subtour, _parent_tour_veh, df.get('vehicle_occup_2', np.nan))", +,sr3p_veh_option,"np.where(is_atwork_subtour, _parent_tour_veh, df.get('vehicle_occup_3.5', np.nan))", +#AV factors,,, +SOV tour Vehicle is AV,sov_tour_uses_av,"np.where(pd.notna(df.get('vehicle_occup_1', np.nan)), pd.Series(sov_veh_option, dtype = 'str').str.contains('AV'), False)" +SR2 tour Vehicle is AV,sr2_tour_uses_av,"np.where(pd.notna(df.get('vehicle_occup_2', np.nan)), pd.Series(sr2_veh_option, dtype = 'str').str.contains('AV'), False)" +SR3 tour Vehicle is AV,sr3_tour_uses_av,"np.where(pd.notna(df.get('vehicle_occup_3.5', np.nan)), pd.Series(sr3p_veh_option, dtype = 'str').str.contains('AV'), False)" +SOV AV IVT Factor Adjustment,autoIVTFactor_DA,"np.where(sov_tour_uses_av, autoIVTFactorAV, 1.0)" +SR2 AV IVT Factor Adjustment,autoIVTFactor_SR2,"np.where(sr2_tour_uses_av, autoIVTFactorAV, 1.0)" +SR3+ AV IVT Factor Adjustment,autoIVTFactor_SR3,"np.where(sr3_tour_uses_av, autoIVTFactorAV, 1.0)" +SOV AV Parking Cost Factor Adjustment,autoParkingCostFactor_DA,"np.where(sov_tour_uses_av, autoParkingCostFactorAV, 1.0)" +SR2 AV Parking Cost Factor Adjustment,autoParkingCostFactor_SR2,"np.where(sr2_tour_uses_av, autoParkingCostFactorAV, 1.0)" +SR3+ AV Parking Cost Factor Adjustment,autoParkingCostFactor_SR3,"np.where(sr3_tour_uses_av, autoParkingCostFactorAV, 1.0)" +SOV AV Auto Terminal Time Factor,autoTermTimeFactor_DA,"np.where(sov_tour_uses_av, autoTerminalTimeFactorAV, 1.0)" +SR2 AV Auto Terminal Time Factor,autoTermTimeFactor_SR2,"np.where(sr2_tour_uses_av, autoTerminalTimeFactorAV, 1.0)" +SR3+ AV Auto Terminal Time Factor,autoTermTimeFactor_SR3,"np.where(sr3_tour_uses_av, autoTerminalTimeFactorAV, 1.0)" +SOV AV Auto Terminal Time Factor,autoCPMFactor_DA,"np.where(sov_tour_uses_av, autoCostPerMileFactorAV, 1.0)" +SR2 AV Auto Terminal Time Factor,autoCPMFactor_SR2,"np.where(sr2_tour_uses_av, autoCostPerMileFactorAV, 1.0)" +SR3+ AV Auto Terminal Time Factor,autoCPMFactor_SR3,"np.where(sr3_tour_uses_av, autoCostPerMileFactorAV, 1.0)" +AV Min Age to Drive Alone,minimumAgeDA,"np.where(sov_tour_uses_av, minAgeDriveAloneAV, 16)" reimburseProportion placeholder,reimburseProportion,0, "Tour duration, in hours",tourDuration,df.duration/2, #,,, -local,_DF_IS_TOUR,'tour_type' in df.columns, -,_num_participants,df.number_of_participants if _DF_IS_TOUR else 1, +,num_participants,df.number_of_participants if _DF_IS_TOUR else 1, ,is_joint,(df.tour_category=='joint') if _DF_IS_TOUR else False, treat tours as work if tour_type not yet decided,tour_type,"df.get('tour_type', default='work')", #,,, @@ -24,12 +35,6 @@ treat tours as work if tour_type not yet decided,tour_type,"df.get('tour_type', ,is_indiv,~is_joint, ,is_escort,(tour_type == 'escort') if _DF_IS_TOUR else False, # Auto operating costs,,, -,is_atwork_subtour,(df.tour_category == 'atwork') if _DF_IS_TOUR else False, -,_parent_tour_veh,"reindex(tours['selected_vehicle'], df['parent_tour_id']) if 'selected_vehicle' in df.columns else np.nan", -,_parent_tour_mode,"reindex(tours['tour_mode'], df['parent_tour_id']) if 'tour_mode' in df.columns else np.nan", -,sov_veh_option,"np.where(is_atwork_subtour, _parent_tour_veh, df.get('vehicle_occup_1', np.nan))", -,sr2_veh_option,"np.where(is_atwork_subtour, _parent_tour_veh, df.get('vehicle_occup_2', np.nan))", -,sr3p_veh_option,"np.where(is_atwork_subtour, _parent_tour_veh, df.get('vehicle_occup_3.5', np.nan))", ,sov_auto_op_cost,"reindex(vehicles.groupby('vehicle_type')['auto_operating_cost'].mean(), pd.Series(sov_veh_option, df.index)) if 'vehicle_occup_1' in df.columns else np.nan", ,sov_auto_op_cost,"np.where(sov_auto_op_cost.isna() | (pd.Series(sov_veh_option, df.index) == 'non_hh_veh'), costPerMile, sov_auto_op_cost)", ,sr2_auto_op_cost,"reindex(vehicles.groupby('vehicle_type')['auto_operating_cost'].mean(), pd.Series(sr2_veh_option, df.index)) if 'vehicle_occup_2' in df.columns else np.nan", @@ -64,13 +69,6 @@ employment_density calculated in annotate_landuse in acres and is converted to s ,totalWaitSingleTNC,origSingleTNCWaitTime + destSingleTNCWaitTime, ,totalWaitSharedTNC,origSharedTNCWaitTime + destSharedTNCWaitTime, #parking,,, -#,_free_parking_available,(tour_type == 'work') & df.free_parking_at_work if _DF_IS_TOUR else False, -#,_dest_hourly_peak_parking_cost,"reindex(land_use.exp_hourly, df[dest_col_name])", -#,_dest_hourly_offpeak_parking_cost,"reindex(land_use.exp_hourly, df[dest_col_name])", -#,_hourly_peak_parking_cost,"np.where(_free_parking_available, 0, _dest_hourly_peak_parking_cost)", -#,_hourly_offpeak_parking_cost,"np.where(_free_parking_available, 0, _dest_hourly_offpeak_parking_cost)", -#,daily_parking_cost,"np.where(is_mandatory, _hourly_peak_parking_cost * df.duration, _hourly_offpeak_parking_cost * df.duration)", -# Result of employer parking provision and reimbursement model,freeParkingEligibility,"df.freeParkingEligibility*np.where(is_indiv,1,0)", ,free_parking_available,(tour_type == 'work') & df.free_parking_at_work if _DF_IS_TOUR else False, person has free on-site parking at workplace,freeOnsite,"(free_parking_available)*np.where(is_indiv,1,0)", # new reimbursement amount,reimburseProportion,"df.reimburseProportion*np.where(is_indiv,1,0)", @@ -120,7 +118,7 @@ DA skim based on Transponder ownership,da_dist_skims_out,"(np.where(ownsTranspon ,s2_time_skims_inb,(((dot_skims['HOV2_L_TIME']) * (_vot_bin_s2 == 1)) + ((dot_skims['HOV2_M_TIME']) * (_vot_bin_s2 == 2)) + ((dot_skims['HOV2_H_TIME']) * (_vot_bin_s2 == 3))), ,s2_rel_skims_out,(((odt_skims['HOV2_L_REL']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV2_M_REL']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV2_H_REL']) * (_vot_bin_s2 == 3))), ,s2_rel_skims_inb,(((dot_skims['HOV2_L_REL']) * (_vot_bin_s2 == 1)) + ((dot_skims['HOV2_M_REL']) * (_vot_bin_s2 == 2)) + ((dot_skims['HOV2_H_REL']) * (_vot_bin_s2 == 3))), -,s3_dist_skims_out,(((odt_skims['HOV3_L_DIST']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV3_M_DIST']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV3_H_DIST']) * (_vot_bin_s2 == 3))), +,s3_dist_skims_out,(((odt_skims['HOV3_L_DIST']) * (_vot_bin_s3 == 1)) + ((odt_skims['HOV3_M_DIST']) * (_vot_bin_s3 == 2)) + ((odt_skims['HOV3_H_DIST']) * (_vot_bin_s3 == 3))), ,s3_dist_skims_inb,(((dot_skims['HOV3_L_DIST']) * (_vot_bin_s3 == 1)) + ((dot_skims['HOV3_M_DIST']) * (_vot_bin_s3 == 2)) + ((dot_skims['HOV3_H_DIST']) * (_vot_bin_s3 == 3))), ,s3_cost_skims_out,(((odt_skims['HOV3_L_TOLLCOST']) * (_vot_bin_s3 == 1)) + ((odt_skims['HOV3_M_TOLLCOST']) * (_vot_bin_s3 == 2)) + ((odt_skims['HOV3_H_TOLLCOST']) * (_vot_bin_s3 == 3))), ,s3_cost_skims_inb,(((dot_skims['HOV3_L_TOLLCOST']) * (_vot_bin_s3 == 1)) + ((dot_skims['HOV3_M_TOLLCOST']) * (_vot_bin_s3 == 2)) + ((dot_skims['HOV3_H_TOLLCOST']) * (_vot_bin_s3 == 3))), @@ -163,16 +161,16 @@ Destination Terminal Time,dTermTime,"reindex(land_use.terminal_time,destination) #,,, # Below bike info is not defined and is turned off!!,,, Person is female,female,(df.sex == 2), -bike logsum inbound,bikeLSI,od_skims.reverse('BIKE_LOGSUM'), -bike logsum outbound (same as inbound),bikeLSO,od_skims['BIKE_LOGSUM'], -bike availability,bikeAvailable,(bikeLSI > -300) & (bikeLSO > -300) & (od_skims['DIST'] < max_bike_distance), -bike time inbound,bike_time_inb,od_skims.reverse('BIKE_TIME'), -bike time outbound,bike_time_out,od_skims['BIKE_TIME'], +bike logsum inbound,bikeLSI,odt_skims['BIKE_LOGSUM'], +bike logsum outbound (same as inbound),bikeLSO,dot_skims['BIKE_LOGSUM'], +bike availability,bikeAvailable,(bikeLSI > -300) & (bikeLSO > -300) & (od_skims['BIKE_TIME']>0), +bike time inbound,bike_time_inb,dot_skims['BIKE_TIME'], +bike time outbound,bike_time_out,odt_skims['BIKE_TIME'], #,,, "Cost factor for shared 2 tours, 1/(2^0.8)",costFactorS2,0.57, "Cost factor for shared 3+ tours, 1/(3.5^0.8)",costFactorS3,0.37, ,sov_available,"(age>=minimumAgeDA) * np.where(is_joint,0,1) * np.where(is_atwork_subtour==0,1,np.where(_parent_tour_mode=='DRIVEALONE',1,0))", -,sr2_available,"np.where(is_joint==0,1,np.where(_num_participants>=3,0,1))", +,sr2_available,"np.where(is_joint==0,1,np.where(num_participants>=3,0,1))", ,walkAvailable,"np.where(walk_time_skims_out < max_walk_time, 1,0) * np.where(walk_time_skims_inb < max_walk_time, 1,0)", ,SCHBUS_available,(tour_type =='school') & (personType!=3), #,,, @@ -182,18 +180,25 @@ Determining Tour Destination,destination,df.destination if 'destination' in df.c ,origin_local_dist,"reindex(land_use.walk_dist_local_bus, origin)", ,origin_prm_dist,"reindex(land_use.walk_dist_premium_transit, origin)", ,origin_mix_dist,"np.minimum(origin_local_dist, origin_prm_dist)", -,origin_micro_prm_dist,"reindex(land_use.micro_dist_premium_transit, origin)", +,origin_micro_local_dist_tncout,"odt_skims['KNROUT_LOC_ACC']/60 * driveSpeed", +,origin_micro_local_dist_tncin,"odt_skims['KNRIN_LOC_ACC']/60 * driveSpeed", +,origin_micro_prm_dist_tncout,"odt_skims['KNROUT_PRM_ACC']/60 * driveSpeed", +,origin_micro_prm_dist_tncin,"odt_skims['KNRIN_PRM_ACC']/60 * driveSpeed", +,origin_micro_mix_dist_tncout,"odt_skims['KNROUT_MIX_ACC']/60 * driveSpeed", +,origin_micro_mix_dist_tncin,"odt_skims['KNRIN_MIX_ACC']/60 * driveSpeed", ,dest_local_dist,"reindex(land_use.walk_dist_local_bus, destination)", ,dest_prm_dist,"reindex(land_use.walk_dist_premium_transit, destination)", ,dest_mix_dist,"np.minimum(dest_local_dist, dest_prm_dist)", +,dest_micro_local_dist,"reindex(land_use.micro_dist_local_bus, destination)", ,dest_micro_prm_dist,"reindex(land_use.micro_dist_premium_transit, destination)", +,dest_micro_mix_dist,"np.minimum(dest_micro_local_dist, dest_micro_prm_dist)", #access egress times,,, -,origin_local_time,origin_local_dist * 60/walk_speed, -,origin_prm_time,origin_prm_dist * 60/walk_speed, -,origin_mix_time,origin_mix_dist * 60/walk_speed, -,dest_local_time,dest_local_dist * 60/walk_speed, -,dest_prm_time,dest_prm_dist * 60/walk_speed, -,dest_mix_time,dest_mix_dist * 60/walk_speed, +,origin_local_time,origin_local_dist * 60/walkSpeed, +,origin_prm_time,origin_prm_dist * 60/walkSpeed, +,origin_mix_time,origin_mix_dist * 60/walkSpeed, +,dest_local_time,dest_local_dist * 60/walkSpeed, +,dest_prm_time,dest_prm_dist * 60/walkSpeed, +,dest_mix_time,dest_mix_dist * 60/walkSpeed, #,,, ,walk_local_available,(odt_skims['WALK_LOC_TOTALIVTT']>0) & (dot_skims['WALK_LOC_TOTALIVTT']>0), ,walk_premium_available,(odt_skims['WALK_PRM_TOTALIVTT']>0) & (dot_skims['WALK_PRM_TOTALIVTT']>0), @@ -204,26 +209,26 @@ Determining Tour Destination,destination,df.destination if 'destination' in df.c ,knr_local_available,(odt_skims['KNROUT_LOC_TOTALIVTT']>0) & (dot_skims['KNRIN_LOC_TOTALIVTT']>0), ,knr_premium_available,(odt_skims['KNROUT_PRM_TOTALIVTT']>0) & (dot_skims['KNRIN_PRM_TOTALIVTT']>0), ,knr_mix_available,(odt_skims['KNROUT_MIX_TOTALIVTT']>0) & (dot_skims['KNRIN_MIX_TOTALIVTT']>0) & (odt_skims['KNROUT_MIX_XFERS']>0) & (dot_skims['KNRIN_MIX_XFERS']>0), -,tnc_local_available,(odt_skims['TNCOUT_LOC_TOTALIVTT']>0) & (dot_skims['TNCIN_LOC_TOTALIVTT']>0), -,tnc_premium_available,(odt_skims['TNCOUT_PRM_TOTALIVTT']>0) & (dot_skims['TNCIN_PRM_TOTALIVTT']>0), -,tnc_mix_available,(odt_skims['TNCOUT_MIX_TOTALIVTT']>0) & (dot_skims['TNCIN_MIX_TOTALIVTT']>0) & (odt_skims['TNCOUT_MIX_XFERS']>0) & (dot_skims['TNCIN_MIX_XFERS']>0), +,tnc_local_available,(odt_skims['KNROUT_LOC_TOTALIVTT']>0) & (dot_skims['KNRIN_LOC_TOTALIVTT']>0), +,tnc_premium_available,(odt_skims['KNROUT_PRM_TOTALIVTT']>0) & (dot_skims['KNRIN_PRM_TOTALIVTT']>0), +,tnc_mix_available,(odt_skims['KNROUT_MIX_TOTALIVTT']>0) & (dot_skims['KNRIN_MIX_TOTALIVTT']>0) & (odt_skims['KNROUT_MIX_XFERS']>0) & (dot_skims['KNRIN_MIX_XFERS']>0), # commuter rail constants based on commuter rail IVTT,,, ,wlk_prm_out_cr_asc,"(-1.0) * (np.minimum(odt_skims['WALK_PRM_CMRIVTT'],60) + np.where(odt_skims['WALK_PRM_CMRIVTT']>40,(np.minimum(odt_skims['WALK_PRM_CMRIVTT'],60)-40)*0.6,0))", ,wlk_prm_inb_cr_asc,"(-1.0) * (np.minimum(dot_skims['WALK_PRM_CMRIVTT'],60) + np.where(dot_skims['WALK_PRM_CMRIVTT']>40,(np.minimum(dot_skims['WALK_PRM_CMRIVTT'],60)-40)*0.6,0))", ,wlk_mix_out_cr_asc,"(-1.0) * (np.minimum(odt_skims['WALK_MIX_CMRIVTT'],60) + np.where(odt_skims['WALK_MIX_CMRIVTT']>40,(np.minimum(odt_skims['WALK_MIX_CMRIVTT'],60)-40)*0.6,0))", ,wlk_mix_inb_cr_asc,"(-1.0) * (np.minimum(dot_skims['WALK_MIX_CMRIVTT'],60) + np.where(dot_skims['WALK_MIX_CMRIVTT']>40,(np.minimum(dot_skims['WALK_MIX_CMRIVTT'],60)-40)*0.6,0))", -,pnr_prm_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['PNROUT_PRM_CMRIVTT']>20,(odt_skims['PNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['PNROUT_PRM_CMRIVTT']>40,(odt_skims['PNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)", -,pnr_prm_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(dot_skims['PNRIN_PRM_CMRIVTT']>20,(dot_skims['PNRIN_PRM_CMRIVTT']-20),0)+np.where(dot_skims['PNRIN_PRM_CMRIVTT']>40,(dot_skims['PNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)", -,pnr_mix_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['PNROUT_MIX_CMRIVTT']>20,(odt_skims['PNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['PNROUT_MIX_CMRIVTT']>40,(odt_skims['PNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)", -,pnr_mix_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(dot_skims['PNRIN_MIX_CMRIVTT']>20,(dot_skims['PNRIN_MIX_CMRIVTT']-20),0)+np.where(dot_skims['PNRIN_MIX_CMRIVTT']>40,(dot_skims['PNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)", -,knr_prm_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['KNROUT_PRM_CMRIVTT']>20,(odt_skims['KNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_PRM_CMRIVTT']>40,(odt_skims['KNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)", -,knr_prm_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(dot_skims['KNRIN_PRM_CMRIVTT']>20,(dot_skims['KNRIN_PRM_CMRIVTT']-20),0)+np.where(dot_skims['KNRIN_PRM_CMRIVTT']>40,(dot_skims['KNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)", -,knr_mix_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['KNROUT_MIX_CMRIVTT']>20,(odt_skims['KNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_MIX_CMRIVTT']>40,(odt_skims['KNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)", -,knr_mix_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(dot_skims['KNRIN_MIX_CMRIVTT']>20,(dot_skims['KNRIN_MIX_CMRIVTT']-20),0)+np.where(dot_skims['KNRIN_MIX_CMRIVTT']>40,(dot_skims['KNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)", -,tnc_prm_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['TNCOUT_PRM_CMRIVTT']>20,(odt_skims['TNCOUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['TNCOUT_PRM_CMRIVTT']>40,(odt_skims['TNCOUT_PRM_CMRIVTT']-40)*1.5,0)),65)", -,tnc_prm_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(dot_skims['TNCIN_PRM_CMRIVTT']>20,(dot_skims['TNCIN_PRM_CMRIVTT']-20),0)+np.where(dot_skims['TNCIN_PRM_CMRIVTT']>40,(dot_skims['TNCIN_PRM_CMRIVTT']-40)*1.5,0)),65)", -,tnc_mix_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['TNCOUT_MIX_CMRIVTT']>20,(odt_skims['TNCOUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['TNCOUT_MIX_CMRIVTT']>40,(odt_skims['TNCOUT_MIX_CMRIVTT']-40)*1.5,0)),65)", -,tnc_mix_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(dot_skims['TNCIN_MIX_CMRIVTT']>20,(dot_skims['TNCIN_MIX_CMRIVTT']-20),0)+np.where(dot_skims['TNCIN_MIX_CMRIVTT']>40,(dot_skims['TNCIN_MIX_CMRIVTT']-40)*1.5,0)),65)", +,pnr_prm_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['PNROUT_PRM_CMRIVTT']>20,(odt_skims['PNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['PNROUT_PRM_CMRIVTT']>40,(odt_skims['PNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)", +,pnr_prm_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(dot_skims['PNRIN_PRM_CMRIVTT']>20,(dot_skims['PNRIN_PRM_CMRIVTT']-20),0)+np.where(dot_skims['PNRIN_PRM_CMRIVTT']>40,(dot_skims['PNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)", +,pnr_mix_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['PNROUT_MIX_CMRIVTT']>20,(odt_skims['PNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['PNROUT_MIX_CMRIVTT']>40,(odt_skims['PNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)", +,pnr_mix_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(dot_skims['PNRIN_MIX_CMRIVTT']>20,(dot_skims['PNRIN_MIX_CMRIVTT']-20),0)+np.where(dot_skims['PNRIN_MIX_CMRIVTT']>40,(dot_skims['PNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)", +,knr_prm_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNROUT_PRM_CMRIVTT']>20,(odt_skims['KNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_PRM_CMRIVTT']>40,(odt_skims['KNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)", +,knr_prm_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(dot_skims['KNRIN_PRM_CMRIVTT']>20,(dot_skims['KNRIN_PRM_CMRIVTT']-20),0)+np.where(dot_skims['KNRIN_PRM_CMRIVTT']>40,(dot_skims['KNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)", +,knr_mix_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNROUT_MIX_CMRIVTT']>20,(odt_skims['KNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_MIX_CMRIVTT']>40,(odt_skims['KNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)", +,knr_mix_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(dot_skims['KNRIN_MIX_CMRIVTT']>20,(dot_skims['KNRIN_MIX_CMRIVTT']-20),0)+np.where(dot_skims['KNRIN_MIX_CMRIVTT']>40,(dot_skims['KNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)", +,tnc_prm_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNROUT_PRM_CMRIVTT']>20,(odt_skims['KNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_PRM_CMRIVTT']>40,(odt_skims['KNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)", +,tnc_prm_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(dot_skims['KNRIN_PRM_CMRIVTT']>20,(dot_skims['KNRIN_PRM_CMRIVTT']-20),0)+np.where(dot_skims['KNRIN_PRM_CMRIVTT']>40,(dot_skims['KNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)", +,tnc_mix_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNROUT_MIX_CMRIVTT']>20,(odt_skims['KNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_MIX_CMRIVTT']>40,(odt_skims['KNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)", +,tnc_mix_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(dot_skims['KNRIN_MIX_CMRIVTT']>20,(dot_skims['KNRIN_MIX_CMRIVTT']-20),0)+np.where(dot_skims['KNRIN_MIX_CMRIVTT']>40,(dot_skims['KNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)", # Note: Hyperloop not implemented in ASC calculations since we arent skimming hyperloop IVTT,,, ,wlk_prm_out_asc,"np.where(odt_skims['WALK_PRM_CMRIVTT'] > 10, wlk_prm_out_cr_asc,np.where(odt_skims['WALK_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['WALK_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['WALK_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", ,wlk_prm_inb_asc,"np.where(dot_skims['WALK_PRM_CMRIVTT'] > 10, wlk_prm_inb_cr_asc,np.where(dot_skims['WALK_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(dot_skims['WALK_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['WALK_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", @@ -231,16 +236,16 @@ Determining Tour Destination,destination,df.destination if 'destination' in df.c ,pnr_prm_inb_asc,"np.where(dot_skims['PNRIN_PRM_CMRIVTT'] > 10, pnr_prm_inb_cr_asc,np.where(dot_skims['PNRIN_PRM_LRTIVTT']>0,pnr_lrt_equiv_asc,np.where(dot_skims['PNRIN_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['PNRIN_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", ,knr_prm_out_asc,"np.where(odt_skims['KNROUT_PRM_CMRIVTT'] > 10, knr_prm_out_cr_asc,np.where(odt_skims['KNROUT_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNROUT_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNROUT_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", ,knr_prm_inb_asc,"np.where(dot_skims['KNRIN_PRM_CMRIVTT'] > 10, knr_prm_inb_cr_asc,np.where(dot_skims['KNRIN_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(dot_skims['KNRIN_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['KNRIN_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", -,tnc_prm_out_asc,"np.where(odt_skims['TNCOUT_PRM_CMRIVTT'] > 10, tnc_prm_out_cr_asc,np.where(odt_skims['TNCOUT_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['TNCOUT_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['TNCOUT_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", -,tnc_prm_inb_asc,"np.where(dot_skims['TNCIN_PRM_CMRIVTT'] > 10, tnc_prm_inb_cr_asc,np.where(dot_skims['TNCIN_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(dot_skims['TNCIN_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['TNCIN_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", +,tnc_prm_out_asc,"np.where(odt_skims['KNROUT_PRM_CMRIVTT'] > 10, tnc_prm_out_cr_asc,np.where(odt_skims['KNROUT_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNROUT_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNROUT_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", +,tnc_prm_inb_asc,"np.where(dot_skims['KNRIN_PRM_CMRIVTT'] > 10, tnc_prm_inb_cr_asc,np.where(dot_skims['KNRIN_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(dot_skims['KNRIN_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['KNRIN_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))", ,wlk_mix_out_max_asc,"np.where(odt_skims['WALK_MIX_CMRIVTT'] > 10, wlk_mix_out_cr_asc,np.where(odt_skims['WALK_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['WALK_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['WALK_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", ,wlk_mix_inb_max_asc,"np.where(dot_skims['WALK_MIX_CMRIVTT'] > 10, wlk_mix_inb_cr_asc,np.where(dot_skims['WALK_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(dot_skims['WALK_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['WALK_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", ,pnr_mix_out_max_asc,"np.where(odt_skims['PNROUT_MIX_CMRIVTT'] > 10, pnr_mix_out_cr_asc,np.where(odt_skims['PNROUT_MIX_LRTIVTT']>0,pnr_lrt_equiv_asc,np.where(odt_skims['PNROUT_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['PNROUT_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", ,pnr_mix_inb_max_asc,"np.where(dot_skims['PNRIN_MIX_CMRIVTT'] > 10, pnr_mix_inb_cr_asc,np.where(dot_skims['PNRIN_MIX_LRTIVTT']>0,pnr_lrt_equiv_asc,np.where(dot_skims['PNRIN_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['PNRIN_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", ,knr_mix_out_max_asc,"np.where(odt_skims['KNROUT_MIX_CMRIVTT'] > 10,knr_mix_out_cr_asc,np.where(odt_skims['KNROUT_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNROUT_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNROUT_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", ,knr_mix_inb_max_asc,"np.where(dot_skims['KNRIN_MIX_CMRIVTT'] > 10, knr_mix_inb_cr_asc,np.where(dot_skims['KNRIN_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(dot_skims['KNRIN_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['KNRIN_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", -,tnc_mix_out_max_asc,"np.where(odt_skims['TNCOUT_MIX_CMRIVTT'] > 10, tnc_mix_out_cr_asc,np.where(odt_skims['TNCOUT_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['TNCOUT_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['TNCOUT_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", -,tnc_mix_inb_max_asc,"np.where(dot_skims['TNCIN_MIX_CMRIVTT'] > 10, tnc_mix_inb_cr_asc,np.where(dot_skims['TNCIN_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(dot_skims['TNCIN_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['TNCIN_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", +,tnc_mix_out_max_asc,"np.where(odt_skims['KNROUT_MIX_CMRIVTT'] > 10, tnc_mix_out_cr_asc,np.where(odt_skims['KNROUT_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNROUT_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNROUT_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", +,tnc_mix_inb_max_asc,"np.where(dot_skims['KNRIN_MIX_CMRIVTT'] > 10, tnc_mix_inb_cr_asc,np.where(dot_skims['KNRIN_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(dot_skims['KNRIN_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+dot_skims['KNRIN_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))", # reduce by 50% if bus transfer and constant is positive (PRM has no LB service),,, ,wlk_mix_out_asc,"np.where((wlk_mix_out_max_asc > 0) & (odt_skims['WALK_MIX_BUSIVTT'] > 0), 0.5 * wlk_mix_out_max_asc, wlk_mix_out_max_asc)", ,wlk_mix_inb_asc,"np.where((wlk_mix_inb_max_asc > 0) & (dot_skims['WALK_MIX_BUSIVTT'] > 0), 0.5 * wlk_mix_inb_max_asc, wlk_mix_inb_max_asc)", @@ -248,8 +253,8 @@ Determining Tour Destination,destination,df.destination if 'destination' in df.c ,pnr_mix_inb_asc,"np.where((pnr_mix_inb_max_asc > 0) & (dot_skims['PNRIN_MIX_BUSIVTT'] > 0), 0.5 * pnr_mix_inb_max_asc, pnr_mix_inb_max_asc)", ,knr_mix_out_asc,"np.where((knr_mix_out_max_asc > 0) & (odt_skims['KNROUT_MIX_BUSIVTT'] > 0), 0.5 * knr_mix_out_max_asc, knr_mix_out_max_asc)", ,knr_mix_inb_asc,"np.where((knr_mix_inb_max_asc > 0) & (dot_skims['KNRIN_MIX_BUSIVTT'] > 0), 0.5 * knr_mix_inb_max_asc, knr_mix_inb_max_asc)", -,tnc_mix_out_asc,"np.where((tnc_mix_out_max_asc > 0) & (odt_skims['TNCOUT_MIX_BUSIVTT'] > 0), 0.5 * tnc_mix_out_max_asc, tnc_mix_out_max_asc)", -,tnc_mix_inb_asc,"np.where((tnc_mix_inb_max_asc > 0) & (dot_skims['TNCIN_MIX_BUSIVTT'] > 0), 0.5 * tnc_mix_inb_max_asc, tnc_mix_inb_max_asc)", +,tnc_mix_out_asc,"np.where((tnc_mix_out_max_asc > 0) & (odt_skims['KNROUT_MIX_BUSIVTT'] > 0), 0.5 * tnc_mix_out_max_asc, tnc_mix_out_max_asc)", +,tnc_mix_inb_asc,"np.where((tnc_mix_inb_max_asc > 0) & (dot_skims['KNRIN_MIX_BUSIVTT'] > 0), 0.5 * tnc_mix_inb_max_asc, tnc_mix_inb_max_asc)", # reduce by 50% if transfers happen between cmr and other prm lines,,, ,wlk_prm_out_asc,"np.where((wlk_prm_out_asc > 0) & (odt_skims['WALK_PRM_XFERS'] > 0), 0.5 * wlk_prm_out_asc, wlk_prm_out_asc)", ,wlk_prm_inb_asc,"np.where((wlk_prm_inb_asc > 0) & (dot_skims['WALK_PRM_XFERS'] > 0), 0.5 * wlk_prm_inb_asc, wlk_prm_inb_asc)", @@ -257,8 +262,8 @@ Determining Tour Destination,destination,df.destination if 'destination' in df.c ,pnr_prm_inb_asc,"np.where((pnr_prm_inb_asc > 0) & (dot_skims['PNRIN_PRM_XFERS'] > 0), 0.5 * pnr_prm_inb_asc, pnr_prm_inb_asc)", ,knr_prm_out_asc,"np.where((knr_prm_out_asc > 0) & (odt_skims['KNROUT_PRM_XFERS'] > 0), 0.5 * knr_prm_out_asc, knr_prm_out_asc)", ,knr_prm_inb_asc,"np.where((knr_prm_inb_asc > 0) & (dot_skims['KNRIN_PRM_XFERS'] > 0), 0.5 * knr_prm_inb_asc, knr_prm_inb_asc)", -,tnc_prm_out_asc,"np.where((tnc_prm_out_asc > 0) & (odt_skims['TNCOUT_PRM_XFERS'] > 0), 0.5 * tnc_prm_out_asc, tnc_prm_out_asc)", -,tnc_prm_inb_asc,"np.where((tnc_prm_inb_asc > 0) & (dot_skims['TNCIN_PRM_XFERS'] > 0), 0.5 * tnc_prm_inb_asc, tnc_prm_inb_asc)", +,tnc_prm_out_asc,"np.where((tnc_prm_out_asc > 0) & (odt_skims['KNROUT_PRM_XFERS'] > 0), 0.5 * tnc_prm_out_asc, tnc_prm_out_asc)", +,tnc_prm_inb_asc,"np.where((tnc_prm_inb_asc > 0) & (dot_skims['KNRIN_PRM_XFERS'] > 0), 0.5 * tnc_prm_inb_asc, tnc_prm_inb_asc)", # Micromobility times,,, ebike time inbound,ebike_time_inb,bike_time_inb * bikeSpeed / ebikeSpeed, ebike time outbound,ebike_time_out,bike_time_out * bikeSpeed / ebikeSpeed, @@ -271,34 +276,64 @@ escooter max distance availability,escooterMaxDistance,(od_skims['DIST'] > escoo # Microtransit and NEV,,, microtransit available at origin,microtransit_orig,"reindex(land_use.microtransit, df[orig_col_name])", microtransit available at destination,microtransit_dest,"reindex(land_use.microtransit, df[dest_col_name])", -microtransit available,microtransit_available,(microtransit_orig > 0) & (microtransit_orig == microtransit_dest) & (od_skims['DIST'] < microtransitMaxDist), -microtransit direct time,microtransit_direct_time,"np.maximum(od_skims['DIST']/microtransitSpeed*60, s2_time_skims_out) + np.maximum(od_skims['DIST']/microtransitSpeed*60, s2_time_skims_inb)", +microtransit operating at time of tour,microtransit_operating,True, +microtransit available,microtransit_available,(microtransit_orig > 0) & (microtransit_orig == microtransit_dest) & (s3_dist_skims_out < microtransitMaxDist) & (s3_dist_skims_inb < microtransitMaxDist) & microtransit_operating, +microtransit direct time,microtransit_direct_time,"np.maximum(s3_dist_skims_out/microtransitSpeed*60, s3_time_skims_out) + np.maximum(s3_dist_skims_inb/microtransitSpeed*60, s3_time_skims_inb)", microtransit total time,microtransit_time,"np.maximum(microtransit_direct_time + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_time)", nev available at origin,nev_orig,"reindex(land_use.nev, df[orig_col_name])", nev available at destination,nev_dest,"reindex(land_use.nev, df[dest_col_name])", -nev available,nev_available,(nev_orig > 0) & (nev_orig == nev_dest) & (od_skims['DIST'] < nevMaxDist), -nev direct time,nev_direct_time,"np.maximum(od_skims['DIST']/nevSpeed*60, s2_time_skims_out) + np.maximum(od_skims['DIST']/nevSpeed*60, s2_time_skims_inb)", +nev operating at time of tour,nev_operating,True, +nev available,nev_available,(nev_orig > 0) & (nev_orig == nev_dest) & (s3_dist_skims_out < nevMaxDist) & (s3_dist_skims_inb < nevMaxDist) & nev_operating, +nev direct time,nev_direct_time,"np.maximum(s3_dist_skims_out/nevSpeed*60, s3_time_skims_out) + np.maximum(s3_dist_skims_inb/nevSpeed*60, s3_time_skims_inb)", nev total time,nev_time,"np.maximum(nev_direct_time + nevDiversionConstant, nevDiversionFactor*nev_direct_time)", # Microtransit and NEV access to transit,,, -microtransit access available,microtransit_access_available,(microtransit_orig>0) & (origin_micro_prm_dist0) & (origin_micro_prm_dist0) & (origin_micro_local_dist_tncout0) & (origin_micro_local_dist_tncout0) & (origin_micro_prm_dist_tncout0) & (origin_micro_prm_dist_tncout0) & (origin_micro_mix_dist_tncout0) & (origin_micro_mix_dist_tncout0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (dest_micro_local_dist>maxWalkIfMTAccessAvailable) & (dest_micro_local_dist0) & (dest_micro_local_dist>maxWalkIfMTAccessAvailable) & (dest_micro_local_dist0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (dest_micro_mix_dist>maxWalkIfMTAccessAvailable) & (dest_micro_mix_dist0) & (dest_micro_mix_dist>maxWalkIfMTAccessAvailable) & (dest_micro_mix_dist microAccessThreshold,1,0) + np.where(df.o_MicroAccessTime > microAccessThreshold,1,0)))",-10,-10,-10,-10,-10,-10,-10,-10,-10,-10 +,"@(df.microTour * (np.where(df.d_microAccTime > microAccessThreshold,1,0) + np.where(df.o_MicroAccessTime > microAccessThreshold,1,0)) * np.where(df.ebike_owner_trips * df.ebikeTour,0,1))",-10,-10,-10,-10,-10,-10,-10,-10,-10,-10 diff --git a/configs/resident/trip_mode_choice.csv b/configs/resident/trip_mode_choice.csv index cedab0c..520eecb 100644 --- a/configs/resident/trip_mode_choice.csv +++ b/configs/resident/trip_mode_choice.csv @@ -8,10 +8,11 @@ util_Drive alone - Parking cost ,Drive alone - Parking cost ,"@(df.parkingCost * util_Drive alone - Terminal Time,Drive alone - Terminal Time,(oTermTime + dTermTime) * autoTermTimeFactor * time_factor,coef_acctime,,,,,,,,,,,,,,,,,,,,,, #,Shared ride2,,,,,,,,,,,,,,,,,,,,,,,, util_sr2_available,sr2 available,sr2_available == False,,-999,,,,,,,,,,,,,,,,,,,,, +util_sr2_tourbike_disadvantage,sr2 tourbike disadvantage,tourBike,,-30,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 - In -vehicle time,Shared ride 2 - In -vehicle time,(s2_time_skims) * autoIVTFactor * time_factor,,coef_ivt,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 - reliability,Shared ride 2 - reliability,"@df.s2_rel_skims/np.maximum(df.s2_dist_skims,0.1) * df.time_factor",,coef_rel,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 - cost,Shared ride 2 - cost,"@((df.auto_op_cost * df.autoCPMFactor * df.s2_dist_skims) + df.s2_cost_skims)/(np.maximum(df.income,1000)**df.income_exponent)",,coef_income,,,,,,,,,,,,,,,,,,,,, -util_Shared ride 2 - Parking cost ,Shared ride 2 - Parking cost ,"@(df.parkingCost * df.costFactorS2 * df.autoParkingCostFactor)/(np.maximum(df.income,1000)**df.income_exponent)",,coef_income,,,,,,,,,,,,,,,,,,,,, +util_Shared ride 2 - Parking cost ,Shared ride 2 - Parking cost ,"@(df.parkingCost * df.autoParkingCostFactor * np.where(df.is_joint,1,df.costFactorS2))/(np.maximum(df.income,1000)**df.income_exponent)",,coef_income,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 Terminal Time - acc,Shared ride 2 - Terminal Time ,(oTermTime + dTermTime) * autoTermTimeFactor * time_factor,,coef_acctime,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 _Two_person_household,Shared ride 2 - Two person household,@(df.hhsize == 2),,coef_size2_sr2,,,,,,,,,,,,,,,,,,,,, util_Shared ride 2 _Three_person_household,Shared ride 2 - Three person household,@(df.hhsize == 3),,coef_size3_sr2,,,,,,,,,,,,,,,,,,,,, @@ -19,10 +20,11 @@ util_Shared ride 2 _Four+_person_household,Shared ride 2 - Four plus person hous util_Shared ride 2 - Female,Shared ride 2 - female,@(df.female == 1),,coef_female_sr2,,,,,,,,,,,,,,,,,,,,, #,Shared ride 3,,,,,,,,,,,,,,,,,,,,,,,, util_sr3_available,sr3 available,sr3_available == False,,,-999,,,,,,,,,,,,,,,,,,,, +util_sr3_tourbike_disadvantage,sr3 tourbike disadvantage,tourBike,,,-30,,,,,,,,,,,,,,,,,,,, util_Shared ride 3 - In -vehicle time,Shared ride 3 - In -vehicle time,(s3_time_skims) * autoIVTFactor * time_factor,,,coef_ivt,,,,,,,,,,,,,,,,,,,, util_Shared ride 3 - reliability,Shared ride 3 - reliability,"@df.s3_rel_skims/np.maximum(df.s3_dist_skims, 0.1) * df.time_factor",,,coef_rel,,,,,,,,,,,,,,,,,,,, util_Shared ride 3 - cost ,Shared ride 3 - cost,"@(df.auto_op_cost * df.s3_dist_skims * df.autoCPMFactor + df.s3_cost_skims)/(np.maximum(df.income,1000)**df.income_exponent)",,,coef_income,,,,,,,,,,,,,,,,,,,, -util_Shared ride 3 - Parking cost ,Shared ride 3 - Parking cost ,"@(df.parkingCost * df.costFactorS3 * df.autoParkingCostFactor)/(np.maximum(df.income,1000)**df.income_exponent)",,,coef_income,,,,,,,,,,,,,,,,,,,, +util_Shared ride 3 - Parking cost ,Shared ride 3 - Parking cost ,"@(df.parkingCost * df.autoParkingCostFactor * np.where(df.is_joint,1,df.costFactorS3))/(np.maximum(df.income,1000)**df.income_exponent)",,,coef_income,,,,,,,,,,,,,,,,,,,, util_Shared ride 3 - Terminal Time,Shared ride 3 - Terminal Time,(oTermTime + dTermTime) * autoTermTimeFactor * time_factor,,,coef_acctime,,,,,,,,,,,,,,,,,,,, util_Shared ride 3 - Two_person_household,Shared ride 3 - Two person household,@(df.hhsize == 2),,,coef_size2_sr3p,,,,,,,,,,,,,,,,,,,, util_Shared ride 3 - Three_person_household,Shared ride 3 - Three person household,@(df.hhsize == 3),,,coef_size3_sr3p,,,,,,,,,,,,,,,,,,,, @@ -41,7 +43,7 @@ util_Walk - Age 1-5 (school only),Walk - Age 1-6,"@df.age.between(1,5)",,,,coef_ util_Walk - Age 6-12 (school only),Walk - Age 6-13,"@df.age.between(6,12)",,,,coef_age6to12_nmot,,,,,,,,,,,,,,,,,,, util_Walk - Age 13-15 (school only),Walk - Age 13-16,"@df.age.between(13,15)",,,,coef_age13to15_nmot,,,,,,,,,,,,,,,,,,, #,Bike,,,,,,,,,,,,,,,,,,,,,,,, -util_BIKE_Mode unavailable,Bike - Mode unavailable unless on bike tour,tourBike == 0,,,,,-999,,,,,,,,,,,,,,,,,, +util_BIKE_Mode unavailable,Bike - Mode unavailable unless on bike tour,@(df.tourBike == 0)|(od_skims['BIKE_TIME']<=0),,,,,-999,,,,,,,,,,,,,,,,,, util_BIKE_Female - bike,Bike - Female,@df.female,,,,,coef_female_nmot,,,,,,,,,,,,,,,,,, util_BIKE_Bike - logsum,Bike - logsum clipped to allow for long bike trips on school escort tours,@df.bikeLS.clip(lower=-100),,,,,coef_bikeLogsum,,,,,,,,,,,,,,,,,, #,WalktoTransit,,,,,,,,,,,,,,,,,,,,,,,, @@ -49,11 +51,13 @@ util_WalkTransit_Unavailable,WalkTransit_Available,walk_local_available == False util_WALKLOC__In_vehicle_time,WALK_LOC - In-vehicle time,@(odt_skims['WALK_LOC_TOTALIVTT']) * df.time_factor,,,,,,coef_ivt,,,,,,,,,,,,,,,,, util_WALK_LOC_iwait_time,WALK_LOC - wait time,@(odt_skims['WALK_LOC_FIRSTWAIT']) * df.time_factor,,,,,,coef_wait,,,,,,,,,,,,,,,,, util_WALK_LOC_transfer_wait_time,WALK_LOC - transfer wait time,@(odt_skims['WALK_LOC_XFERWAIT'])* df.time_factor,,,,,,coef_xwait,,,,,,,,,,,,,,,,, -util_WALK_LOC_Walk_access_time,WALK_LOC - Walk access time,@(df.origin_local_time)* df.time_factor,,,,,,coef_acctime,,,,,,,,,,,,,,,,, -util_WALK_LOC_Walk_egress_time,WALK_LOC - Walk egress time,@(df.dest_local_time)* df.time_factor,,,,,,coef_acctime,,,,,,,,,,,,,,,,, +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.time_factor",,,,,,coef_acctime,,,,,,,,,,,,,,,,, +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.time_factor",,,,,,coef_wait,,,,,,,,,,,,,,,,, +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.time_factor",,,,,,coef_acctime,,,,,,,,,,,,,,,,, +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.time_factor",,,,,,coef_wait,,,,,,,,,,,,,,,,, util_WALK_LOC_transfer_walk_time,WALK_LOC - transfer walk time,@(odt_skims['WALK_LOC_XFERWALK'])* df.time_factor,,,,,,coef_xwalk,,,,,,,,,,,,,,,,, util_WALK_LOC_transfers_penalty,WALK_LOC - number of transfers,"@(-23+23*np.exp(0.414*df.clip_WALK_LOC_XFERS)) * df.time_factor",,,,,,coef_xfer,,,,,,,,,,,,,,,,, -util_WALK_LOC_Fare,WALK_LOC - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['WALK_LOC_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,coef_income,,,,,,,,,,,,,,,,, +util_WALK_LOC_Fare,WALK_LOC - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['WALK_LOC_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,coef_income,,,,,,,,,,,,,,,,, util_WALK_LOC - Female,WALK_LOC - Female,@(df.female),,,,,,coef_female_tran,,,,,,,,,,,,,,,,, util_WALK_LOC - Origin Mix,WALK_LOC - Origin Mix,oMGRAMix,,,,,,coef_oMix_wTran,,,,,,,,,,,,,,,,, util_WALK_LOC - Origin Intersection Density,WALK_LOC - Origin Intersection Density,oMGRATotInt,,,,,,coef_oIntDen_wTran,,,,,,,,,,,,,,,,, @@ -65,13 +69,15 @@ util_WALK_PRM_In_vehicle_time_on_LRT,WALK_PRM - In-vehicle time on LRT,@(ivt_lrt util_WALK_PRM_In_vehicle_time_on_CMR,WALK_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['WALK_PRM_CMRIVTT']) * df.time_factor,,,,,,,coef_ivt,,,,,,,,,,,,,,,, util_WALK_PRM_In_vehicle_time_on_LTD_EXP,WALK_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['WALK_PRM_LTDEXPIVTT'] + odt_skims['WALK_PRM_EXPIVTT']) * df.time_factor,,,,,,,coef_ivt,,,,,,,,,,,,,,,, util_WALK_PRM_In_vehicle_time_on_URB,WALK_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['WALK_PRM_BRTIVTT']) * df.time_factor,,,,,,,coef_ivt,,,,,,,,,,,,,,,, -util_WALK_PRM_wait_time,WALK_PRM - wait time,@(odt_skims['WALK_PRM_FIRSTWAIT']) * df.time_factor,,,,,,,coef_wait,,,,,,,,,,,,,,,, -util_WALK_PRM_transfer_wait_time,WALK_PRM - transfer wait time,@(odt_skims['WALK_PRM_XFERWAIT'])* df.time_factor,,,,,,,coef_xwait,,,,,,,,,,,,,,,, +util_WALK_PRM_wait_time,WALK_PRM - wait time,"@(odt_skims['WALK_PRM_FIRSTWAIT']) * df.time_factor * np.where(odt_skims['WALK_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,coef_wait,,,,,,,,,,,,,,,, +util_WALK_PRM_transfer_wait_time,WALK_PRM - transfer wait time,"@(odt_skims['WALK_PRM_XFERWAIT'])* df.time_factor * np.where(odt_skims['WALK_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,coef_xwait,,,,,,,,,,,,,,,, util_WALK_PRM_transfer_waLK_time,WALK_PRM - transfer walk time,@(odt_skims['WALK_PRM_XFERWALK'])* df.time_factor,,,,,,,coef_xwalk,,,,,,,,,,,,,,,, util_WALK_PRM_transfers_penalty,WALK_PRM - number of transfers,"@(-23+23*np.exp(0.414*df.clip_WALK_PRM_XFERS)) * df.time_factor",,,,,,,coef_xfer,,,,,,,,,,,,,,,, -util_WALK_PRM_Walk_access_time,WALK_PRM - Walk access time,"@np.where(df.nev_access_available_in & ~df.outbound, df.nev_access_time_in, np.where(df.microtransit_access_available_in & ~df.outbound, df.microtransit_access_time_in, df.origin_prm_time))* df.time_factor",,,,,,,coef_acctime,,,,,,,,,,,,,,,, -util_WALK_PRM_Walk_egress_time,WALK_PRM - Walk egress time,"@np.where(df.nev_egress_available_out & df.outbound, df.nev_egress_time_out, np.where(df.microtransit_egress_available_out & df.outbound, df.microtransit_egress_time_out, df.dest_prm_time))* df.time_factor",,,,,,,coef_acctime,,,,,,,,,,,,,,,, -util_WALK_PRM_Fare,WALK_PRM - Fare,"@df.transitSubsidyPassDiscount*odt_skims['WALK_PRM_FARE']*100/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,coef_income,,,,,,,,,,,,,,,, +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.time_factor",,,,,,,coef_acctime,,,,,,,,,,,,,,,, +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.time_factor",,,,,,,coef_wait,,,,,,,,,,,,,,,, +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.time_factor",,,,,,,coef_acctime,,,,,,,,,,,,,,,, +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.time_factor",,,,,,,coef_wait,,,,,,,,,,,,,,,, +util_WALK_PRM_Fare,WALK_PRM - Fare,"@df.transitSubsidyPassDiscount*odt_skims['WALK_PRM_FARE']*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,coef_income,,,,,,,,,,,,,,,, util_WALK_PRM_ASC,WALK_PRM - Alternative-specific constant,@df.wlk_prm_asc * df.time_factor,,,,,,,coef_ivt,,,,,,,,,,,,,,,, util_WALK_PRM - Female,WALK_PRM - Female,@(df.female),,,,,,,coef_female_tran,,,,,,,,,,,,,,,, util_WALK_PRM - Origin Mix,WALK_PRM - Origin Mix,oMGRAMix,,,,,,,coef_oMix_wTran,,,,,,,,,,,,,,,, @@ -84,13 +90,15 @@ util_WALK_MIX_In_vehicle_time_on_LRT,WALK_MIX - In-vehicle time on LRT,@(ivt_lrt util_WALK_MIX_In_vehicle_time_on_CMR,WALK_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['WALK_MIX_CMRIVTT'])* df.time_factor,,,,,,,,coef_ivt,,,,,,,,,,,,,,, util_WALK_MIX_In_vehicle_time_on_LTD_EXP,WALK_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['WALK_MIX_LTDEXPIVTT'] + odt_skims['WALK_MIX_EXPIVTT'])* df.time_factor,,,,,,,,coef_ivt,,,,,,,,,,,,,,, util_WALK_MIX_In_vehicle_time_on_URB,WALK_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['WALK_MIX_BRTIVTT'])* df.time_factor,,,,,,,,coef_ivt,,,,,,,,,,,,,,, -util_WALK_MIX_FIRST_wait_time,WALK_MIX - First wait time,@(odt_skims['WALK_MIX_FIRSTWAIT'])* df.time_factor,,,,,,,,coef_wait,,,,,,,,,,,,,,, -util_WALK_MIX_transfer_wait_time,WALK_MIX - transfer wait time,@(odt_skims['WALK_MIX_XFERWAIT'])* df.time_factor,,,,,,,,coef_xwait,,,,,,,,,,,,,,, +util_WALK_MIX_FIRST_wait_time,WALK_MIX - First wait time,"@(odt_skims['WALK_MIX_FIRSTWAIT'])* df.time_factor * np.where(odt_skims['WALK_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,coef_wait,,,,,,,,,,,,,,, +util_WALK_MIX_transfer_wait_time,WALK_MIX - transfer wait time,"@(odt_skims['WALK_MIX_XFERWAIT'])* df.time_factor * np.where(odt_skims['WALK_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,coef_xwait,,,,,,,,,,,,,,, util_WALK_MIX_number_of_transfers,WALK_MIX - number of transfers,"@(-23+23*np.exp(0.414*df.clip_WALK_MIX_XFERS)) * df.time_factor",,,,,,,,coef_xfer,,,,,,,,,,,,,,, -util_WALK_MIX_Walk_access_time,WALK_MIX - Walk access time,@(df.origin_mix_time)* df.time_factor,,,,,,,,coef_acctime,,,,,,,,,,,,,,, -util_WALK_MIX_Walk_egress_time,WALK_MIX - Walk egress time,@(df.dest_mix_time)* df.time_factor,,,,,,,,coef_acctime,,,,,,,,,,,,,,, +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.time_factor",,,,,,,,coef_acctime,,,,,,,,,,,,,,, +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.time_factor",,,,,,,,coef_wait,,,,,,,,,,,,,,, +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.time_factor",,,,,,,,coef_acctime,,,,,,,,,,,,,,, +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.time_factor",,,,,,,,coef_wait,,,,,,,,,,,,,,, util_WALK_MIX_Walk_other_time,WALK_MIX - Walk other time,@(odt_skims['WALK_MIX_XFERWALK'])* df.time_factor,,,,,,,,coef_xwalk,,,,,,,,,,,,,,, -util_WALK_MIX_Fare,WALK_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['WALK_MIX_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,coef_income,,,,,,,,,,,,,,, +util_WALK_MIX_Fare,WALK_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['WALK_MIX_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,coef_income,,,,,,,,,,,,,,, util_WALK_MIX_ASC,WALK_MIX - Alternative-specific constant,@df.wlk_mix_asc * df.time_factor,,,,,,,,coef_ivt,,,,,,,,,,,,,,, util_WALK_MIX - Female,WALK_MIX - Female,@(df.female),,,,,,,,coef_female_tran,,,,,,,,,,,,,,, util_WALK_MIX - Origin Mix,WALK_MIX - Origin Mix,oMGRAMix,,,,,,,,coef_oMix_wTran,,,,,,,,,,,,,,, @@ -101,21 +109,23 @@ util_PNR_LOC_Unavailable,PNR_LOC - Unavailable,(pnr_local_available == False)|(P util_PNR_LOC_In_vehicle_time,PNR_LOC - In-vehicle time,@(odt_skims['PNROUT_LOC_TOTALIVTT'])* df.time_factor * df.outbound,,,,,,,,,coef_ivt,,,,,,,,,,,,,, util_PNR_LOC_iwait_time,PNR_LOC - First iwait time,@(odt_skims['PNROUT_LOC_FIRSTWAIT'])* df.time_factor * df.outbound,,,,,,,,,coef_wait,,,,,,,,,,,,,, util_PNR_LOC_transfer_wait_time,PNR_LOC - transfer wait time,@(odt_skims['PNROUT_LOC_XFERWAIT'])* df.time_factor * df.outbound,,,,,,,,,coef_xwait,,,,,,,,,,,,,, -util_PNR_LOC_number_of_transfers,PNR_LOC - number of transfers,"@(-23+23*np.exp(0.414*np.clip(odt_skims['PNROUT_LOC_XFERS'],None,4))) * df.time_factor * df.outbound",,,,,,,,,coef_xferdrive,,,,,,,,,,,,,, +util_PNR_LOC_number_of_transfers,PNR_LOC - number of transfers,"@(-23+23*np.exp(0.414*df.clip_PNROUT_LOC_XFERS)) * df.time_factor * df.outbound",,,,,,,,,coef_xferdrive,,,,,,,,,,,,,, util_PNR_LOC_PNR_time,PNR_LOC - PNR time,@odt_skims['PNROUT_LOC_ACC']* df.time_factor * df.outbound,,,,,,,,,coef_acctime,,,,,,,,,,,,,, -util_PNR_LOC_PNR_cost,PNR_LOC - PNR cost,"@(df.auto_op_cost * (odt_skims['PNROUT_LOC_ACC']) *driveSpeed)* df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,coef_income,,,,,,,,,,,,,, -util_PNRIN_LOC_PNR_cost,PNR_LOC - PNR cost,"@(df.auto_op_cost * (dot_skims['PNRIN_LOC_ACC']) *driveSpeed) * ~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,coef_income,,,,,,,,,,,,,, -util_PNR_LOC_Walk_egress_time_(at_attraction_end),PNR_LOC - Walk egress time (at attraction end),@(df.dest_local_time)* df.time_factor * df.outbound,,,,,,,,,coef_acctime,,,,,,,,,,,,,, +util_PNR_LOC_PNR_cost,PNR_LOC - PNR cost,"@(df.auto_op_cost * (odt_skims['PNROUT_LOC_ACC']/60) *driveSpeed)* df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,coef_income,,,,,,,,,,,,,, +util_PNRIN_LOC_PNR_cost,PNR_LOC - PNR cost,"@(df.auto_op_cost * (odt_skims['PNRIN_LOC_EGR']/60) *driveSpeed) * ~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,coef_income,,,,,,,,,,,,,, +util_PNR_LOC_Walk_egress_time_(at_attraction_end),PNR_LOC - Walk egress time (at attraction end),"@np.where(df.nev_local_egress_available_out, df.nev_local_egress_time_out, np.where(df.microtransit_local_egress_available_out, df.microtransit_local_egress_time_out, df.dest_local_time))* df.time_factor * df.outbound",,,,,,,,,coef_acctime,,,,,,,,,,,,,, +util_PNR_LOC_wait_egress_time_(at_attraction_end),PNR_LOC - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_local_egress_available_out, nevWaitTime, np.where(df.microtransit_local_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,coef_wait,,,,,,,,,,,,,, util_PNR_LOC_Walk_other_time,PNR_LOC - Walk other time,@odt_skims['PNROUT_LOC_XFERWALK']* df.time_factor * df.outbound,,,,,,,,,coef_xwalk,,,,,,,,,,,,,, -util_PNR_LOC_Fare_and_operating_cost,PNR_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_LOC_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,coef_income,,,,,,,,,,,,,, +util_PNR_LOC_Fare_and_operating_cost,PNR_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_LOC_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,coef_income,,,,,,,,,,,,,, util_PNRIN_LOC_In_vehicle_time,PNRIN_LOC - In-vehicle time,@(odt_skims['PNRIN_LOC_TOTALIVTT'])* df.time_factor * ~df.outbound,,,,,,,,,coef_ivt,,,,,,,,,,,,,, util_PNRIN_LOC_iwait_time,PNRIN_LOC - First iwait time,@(odt_skims['PNRIN_LOC_FIRSTWAIT']) * df.time_factor* ~df.outbound,,,,,,,,,coef_wait,,,,,,,,,,,,,, util_PNRIN_LOC_transfer_wait_time,PNRIN_LOC - transfer wait time,@(odt_skims['PNRIN_LOC_XFERWAIT'])* ~df.outbound,,,,,,,,,coef_xwait,,,,,,,,,,,,,, util_PNRIN_LOC_number_of_transfers,PNRIN_LOC - number of transfers,"@(-23+23*np.exp(0.414*df.clip_PNRIN_LOC_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,coef_xferdrive,,,,,,,,,,,,,, util_PNRIN_LOC_PNRIN_time,PNRIN_LOC - PNR time,@odt_skims['PNRIN_LOC_EGR'] * df.time_factor * ~df.outbound,,,,,,,,,coef_acctime,,,,,,,,,,,,,, -util_PNRIN_LOC_Walk_access_time,PNRIN_LOC - Walk access time,@(df.origin_local_time)* df.time_factor * ~df.outbound,,,,,,,,,coef_acctime,,,,,,,,,,,,,, +util_PNRIN_LOC_Walk_access_time,PNRIN_LOC - Walk access time,"@np.where(df.nev_local_access_available_in, df.nev_local_access_time_in, np.where(df.microtransit_local_access_available_in, df.microtransit_local_access_time_in, df.origin_local_time)) * df.time_factor * ~df.outbound",,,,,,,,,coef_acctime,,,,,,,,,,,,,, +util_PNRIN_LOC_wait_access_time,PNRIN_LOC - Egress mt/nev wait time,"@np.where(df.nev_local_access_available_in, nevWaitTime, np.where(df.microtransit_local_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,coef_wait,,,,,,,,,,,,,, util_PNRIN_LOC_Walk_other_time,PNRIN_LOC - Walk other time,@odt_skims['PNRIN_LOC_XFERWALK']* df.time_factor * ~df.outbound,,,,,,,,,coef_xwalk,,,,,,,,,,,,,, -util_PNRIN_LOC_Fare_and_operating_cost,PNRIN_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['PNRIN_LOC_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,coef_income,,,,,,,,,,,,,, +util_PNRIN_LOC_Fare_and_operating_cost,PNRIN_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['PNRIN_LOC_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,coef_income,,,,,,,,,,,,,, util_PNRIN_LOC_Destination_zone_densityIndex,PNRIN_LOC - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,coef_ivt,,,,,,,,,,,,,, util_PNR_LOC - Female,PNR_LOC - Female,@(df.female),,,,,,,,,coef_female_tran,,,,,,,,,,,,,, util_PNR_LOC - Destination Employment Density,PNR_LOC - Destination Employment Density,dMGRAEmpDen,,,,,,,,,coef_dEmpDen_dTran,,,,,,,,,,,,,, @@ -126,28 +136,30 @@ util_PNR_PRM_In_vehicle_time_on_LRT,PNR_PRM - In-vehicle time on LRT,@(ivt_lrt_m util_PNR_PRM_In_vehicle_time_on_CMR,PNR_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['PNROUT_PRM_CMRIVTT']) * df.time_factor * df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNR_PRM_In_vehicle_time_on_LTD_EXP,PNR_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['PNROUT_PRM_LTDEXPIVTT'] + odt_skims['PNROUT_PRM_EXPIVTT']) * df.time_factor * df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNR_PRM_In_vehicle_time_on_URB,PNR_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['PNROUT_PRM_BRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, -util_PNR_PRM_FIRST_iwait_time,PNR_PRM - First iwait time,@(odt_skims['PNROUT_PRM_FIRSTWAIT']) * df.time_factor * df.outbound,,,,,,,,,,coef_wait,,,,,,,,,,,,, -util_PNR_PRM_transfer_wait_time,PNR_PRM - transfer wait time,@(odt_skims['PNROUT_PRM_XFERWAIT']) * df.time_factor * df.outbound,,,,,,,,,,coef_xwait,,,,,,,,,,,,, +util_PNR_PRM_FIRST_iwait_time,PNR_PRM - First iwait time,"@(odt_skims['PNROUT_PRM_FIRSTWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['PNROUT_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,coef_wait,,,,,,,,,,,,, +util_PNR_PRM_transfer_wait_time,PNR_PRM - transfer wait time,"@(odt_skims['PNROUT_PRM_XFERWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['PNROUT_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,coef_xwait,,,,,,,,,,,,, util_PNR_PRM_number_of_transfers,PNR_PRM - number of transfers,"@(-23+23*np.exp(0.414*df.clip_PRNOUT_PRM_XFERS)) * df.time_factor * df.outbound",,,,,,,,,,coef_xferdrive,,,,,,,,,,,,, util_PNR_PRM_PNR_time,PNR_PRM - PNR time,@(odt_skims['PNROUT_PRM_ACC']) * df.time_factor * df.outbound,,,,,,,,,,coef_acctime,,,,,,,,,,,,, -util_PNR_PRM_Walk_egress_time_(at_attraction_end),PNR_PRM - Walk egress time (at attraction end),"@np.where(df.nev_egress_available_out, df.nev_egress_time_out, np.where(df.microtransit_egress_available_out, df.microtransit_egress_time_out, df.dest_prm_time))* df.time_factor * df.outbound",,,,,,,,,,coef_acctime,,,,,,,,,,,,, +util_PNR_PRM_Walk_egress_time_(at_attraction_end),PNR_PRM - Walk egress time (at attraction end),"@np.where(df.nev_prm_egress_available_out, df.nev_prm_egress_time_out, np.where(df.microtransit_prm_egress_available_out, df.microtransit_prm_egress_time_out, df.dest_prm_time))* df.time_factor * df.outbound",,,,,,,,,,coef_acctime,,,,,,,,,,,,, +util_PNR_PRM_wait_egress_time_(at_attraction_end),PNR_PRM - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_prm_egress_available_out, nevWaitTime, np.where(df.microtransit_prm_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,,coef_wait,,,,,,,,,,,,, util_PNR_PRM_Walk_other_time,PNR_PRM - Walk other time,@(odt_skims['PNROUT_PRM_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,coef_xwalk,,,,,,,,,,,,, -util_PNR_PRM_Fare,PNR_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_PRM_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,coef_income,,,,,,,,,,,,, +util_PNR_PRM_Fare,PNR_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_PRM_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,coef_income,,,,,,,,,,,,, util_PNR_PRM_ASC,PNR_PRM - Alternative-specific constant,@df.pnr_prm_out_asc * df.time_factor * df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, -util_PNR_PRM_PNR_cost,PNR_PRM - PNR cost,"@(df.auto_op_cost * (odt_skims['PNROUT_PRM_ACC']) *driveSpeed) * df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,coef_income,,,,,,,,,,,,, -util_PNRIN_PRM_PNR_cost,PNR_PRM - PNR cost,"@(df.auto_op_cost * (odt_skims['PNRIN_PRM_EGR']) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,coef_income,,,,,,,,,,,,, +util_PNR_PRM_PNR_cost,PNR_PRM - PNR cost,"@(df.auto_op_cost * (odt_skims['PNROUT_PRM_ACC']/60) *driveSpeed) * df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,coef_income,,,,,,,,,,,,, +util_PNRIN_PRM_PNR_cost,PNR_PRM - PNR cost,"@(df.auto_op_cost * (odt_skims['PNRIN_PRM_EGR']/60) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,coef_income,,,,,,,,,,,,, util_PNRIN_PRM_In_vehicle_time,PNRIN_PRM - In-vehicle time,@(odt_skims['PNRIN_PRM_TOTALIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNRIN_PRM_In_vehicle_time_on_LRT,PNRIN_PRM - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['PNRIN_PRM_LRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNRIN_PRM_In_vehicle_time_on_CMR,PNRIN_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['PNRIN_PRM_CMRIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNRIN_PRM_In_vehicle_time_on_LTD_EXP,PNRIN_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['PNRIN_PRM_LTDEXPIVTT'] + odt_skims['PNRIN_PRM_EXPIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNRIN_PRM_In_vehicle_time_on_URB,PNRIN_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['PNRIN_PRM_BRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, -util_PNRIN_PRM_FIRST_iwait_time,PNRIN_PRM - First iwait time,@(odt_skims['PNRIN_PRM_FIRSTWAIT'])* df.time_factor * ~df.outbound,,,,,,,,,,coef_wait,,,,,,,,,,,,, -util_PNRIN_PRM_transfer_wait_time,PNRIN_PRM - transfer wait time,@(odt_skims['PNRIN_PRM_XFERWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,coef_xwait,,,,,,,,,,,,, +util_PNRIN_PRM_FIRST_iwait_time,PNRIN_PRM - First iwait time,"@(odt_skims['PNRIN_PRM_FIRSTWAIT'])* df.time_factor * ~df.outbound * np.where(odt_skims['PNRIN_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,coef_wait,,,,,,,,,,,,, +util_PNRIN_PRM_transfer_wait_time,PNRIN_PRM - transfer wait time,"@(odt_skims['PNRIN_PRM_XFERWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['PNRIN_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,coef_xwait,,,,,,,,,,,,, util_PNRIN_PRM_number_of_transfers,PNRIN_PRM - number of transfers,"@(-23+23*np.exp(0.414*df.clip_PNRIN_PRM_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,,coef_xferdrive,,,,,,,,,,,,, util_PNRIN_PRM_PNRIN_time,PNRIN_PRM - PNR time,@(odt_skims['PNRIN_PRM_EGR']) * df.time_factor * ~df.outbound,,,,,,,,,,coef_acctime,,,,,,,,,,,,, -util_PNRIN_PRM_Walk_access_time_(at_attraction_end),PNRIN_PRM - Walk access time (at attraction end),"@np.where(df.nev_access_available_in, df.nev_access_time_in, np.where(df.microtransit_access_available_in, df.microtransit_access_time_in, df.origin_prm_time)) * df.time_factor * ~df.outbound",,,,,,,,,,coef_acctime,,,,,,,,,,,,, +util_PNRIN_PRM_Walk_access_time_(at_attraction_end),PNRIN_PRM - Walk access time (at attraction end),"@np.where(df.nev_prm_access_available_in, df.nev_prm_access_time_in, np.where(df.microtransit_prm_access_available_in, df.microtransit_prm_access_time_in, df.origin_prm_time)) * df.time_factor * ~df.outbound",,,,,,,,,,coef_acctime,,,,,,,,,,,,, +util_PNRIN_PRM_wait_access_time_(at_attraction_end),PNRIN_PRM - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_prm_access_available_in, nevWaitTime, np.where(df.microtransit_prm_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,,coef_wait,,,,,,,,,,,,, util_PNRIN_PRM_Walk_other_time,PNRIN_PRM - Walk other time,@(odt_skims['PNRIN_PRM_XFERWALK']) * df.time_factor * ~df.outbound,,,,,,,,,,coef_xwalk,,,,,,,,,,,,, -util_PNRIN_PRM_Fare,PNRIN_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['PNRIN_PRM_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,coef_income,,,,,,,,,,,,, +util_PNRIN_PRM_Fare,PNRIN_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['PNRIN_PRM_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,coef_income,,,,,,,,,,,,, util_PNRIN_PRM_ASC,PNRIN_PRM - Alternative-specific constant,@df.pnr_prm_inb_asc * df.time_factor * ~df.outbound,,,,,,,,,,coef_ivt,,,,,,,,,,,,, util_PNR_PRM - Female,PNR_PRM - Female,@(df.female),,,,,,,,,,coef_female_tran,,,,,,,,,,,,, util_PNR_PRM - Destination Employment Density,PNR_PRM - Destination Employment Density,dMGRAEmpDen,,,,,,,,,,coef_dEmpDen_dTran,,,,,,,,,,,,, @@ -158,28 +170,30 @@ util_PNR_MIX_In_vehicle_time_on_LRT,PNR_MIX - In-vehicle time on LRT,@(ivt_lrt_m util_PNR_MIX_In_vehicle_time_on_CMR,PNR_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['PNROUT_MIX_CMRIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNR_MIX_In_vehicle_time_on_LTD_EXP,PNR_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['PNROUT_MIX_LTDEXPIVTT'] + odt_skims['PNROUT_MIX_EXPIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNR_MIX_In_vehicle_time_on_URB,PNR_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['PNROUT_MIX_BRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, -util_PNR_MIX_FIRST_iwait_time,PNR_MIX - First iwait time,@(odt_skims['PNROUT_MIX_FIRSTWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,coef_wait,,,,,,,,,,,, -util_PNR_MIX_transfer_wait_time,PNR_MIX - transfer wait time,@(odt_skims['PNROUT_MIX_XFERWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,coef_xwait,,,,,,,,,,,, +util_PNR_MIX_FIRST_iwait_time,PNR_MIX - First iwait time,"@(odt_skims['PNROUT_MIX_FIRSTWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['PNROUT_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,coef_wait,,,,,,,,,,,, +util_PNR_MIX_transfer_wait_time,PNR_MIX - transfer wait time,"@(odt_skims['PNROUT_MIX_XFERWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['PNROUT_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,coef_xwait,,,,,,,,,,,, util_PNR_MIX_number_of_transfers,PNR_MIX - number of transfers,"@(-23+23*np.exp(0.414*df.clip_PNROUT_MIX_XFERS)) * df.time_factor * df.outbound",,,,,,,,,,,coef_xferdrive,,,,,,,,,,,, util_PNR_MIX_PNR_time,PNR_MIX - PNR time,@odt_skims['PNROUT_MIX_ACC'] * df.time_factor * df.outbound,,,,,,,,,,,coef_acctime,,,,,,,,,,,, -util_PNR_MIX_Walk_egress_time_(at_attraction_end),PNR_MIX - Walk egress time (at attraction end),@(df.dest_mix_time) * df.time_factor * df.outbound,,,,,,,,,,,coef_acctime,,,,,,,,,,,, +util_PNR_MIX_Walk_egress_time_(at_attraction_end),PNR_MIX - Walk egress time (at attraction end),"@np.where(df.nev_mix_egress_available_out, df.nev_mix_egress_time_out, np.where(df.microtransit_mix_egress_available_out, df.microtransit_mix_egress_time_out, df.dest_mix_time))* df.time_factor * df.outbound",,,,,,,,,,,coef_acctime,,,,,,,,,,,, +util_PNR_MIX_wait_egress_time_(at_attraction_end),PNR_MIX - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_mix_egress_available_out, nevWaitTime, np.where(df.microtransit_mix_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,,,coef_wait,,,,,,,,,,,, util_PNR_MIX_Walk_other_time,PNR_MIX - Walk other time,@(odt_skims['PNROUT_MIX_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,,coef_xwalk,,,,,,,,,,,, -util_PNR_MIX_Fare,PNR_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_MIX_FARE'])*100 /(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,coef_income,,,,,,,,,,,, +util_PNR_MIX_Fare,PNR_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['PNROUT_MIX_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,coef_income,,,,,,,,,,,, util_PNR_MIX_ASC,PNR_MIX - Alternative-specific constant,@df.pnr_mix_out_asc * df.time_factor * df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, -util_PNR_MIX_PNR_cost,PNR_MIX - PNR cost,"@(df.auto_op_cost * (odt_skims['PNROUT_MIX_ACC']) *driveSpeed) * df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,coef_income,,,,,,,,,,,, -util_PNRIN_MIX_PNR_cost,PNR_MIX - PNR cost,"@(df.auto_op_cost * (dot_skims['PNRIN_MIX_ACC']) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,coef_income,,,,,,,,,,,, +util_PNR_MIX_PNR_cost,PNR_MIX - PNR cost,"@(df.auto_op_cost * (odt_skims['PNROUT_MIX_ACC']/60) *driveSpeed) * df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,coef_income,,,,,,,,,,,, +util_PNRIN_MIX_PNR_cost,PNR_MIX - PNR cost,"@(df.auto_op_cost * (odt_skims['PNRIN_MIX_EGR']/60) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,coef_income,,,,,,,,,,,, util_PNRIN_MIX_In_vehicle_time,PNRIN_MIX - In-vehicle time,@(odt_skims['PNRIN_MIX_TOTALIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNRIN_MIX_In_vehicle_time_on_LRT,PNRIN_MIX - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['PNRIN_MIX_LRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNRIN_MIX_In_vehicle_time_on_CMR,PNRIN_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['PNRIN_MIX_CMRIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNRIN_MIX_In_vehicle_time_on_LTD_EXP,PNRIN_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['PNRIN_MIX_LTDEXPIVTT'] + odt_skims['PNRIN_MIX_EXPIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNRIN_MIX_In_vehicle_time_on_URB,PNRIN_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['PNRIN_MIX_BRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, -util_PNRIN_MIX_FIRST_iwait_time,PNRIN_MIX - First iwait time,@(odt_skims['PNRIN_MIX_FIRSTWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_wait,,,,,,,,,,,, -util_PNRIN_MIX_transfer_wait_time,PNRIN_MIX - transfer wait time,@(odt_skims['PNRIN_MIX_XFERWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_xwait,,,,,,,,,,,, +util_PNRIN_MIX_FIRST_iwait_time,PNRIN_MIX - First iwait time,"@(odt_skims['PNRIN_MIX_FIRSTWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['PNRIN_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,coef_wait,,,,,,,,,,,, +util_PNRIN_MIX_transfer_wait_time,PNRIN_MIX - transfer wait time,"@(odt_skims['PNRIN_MIX_XFERWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['PNRIN_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,coef_xwait,,,,,,,,,,,, util_PNRIN_MIX_number_of_transfers,PNRIN_MIX - number of transfers,"@(-23+23*np.exp(0.414*df.clip_PNRIN_MIX_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,,,coef_xferdrive,,,,,,,,,,,, util_PNRIN_MIX_PNRIN_time,PNRIN_MIX - PNR time,@odt_skims['PNRIN_MIX_EGR'] * df.time_factor * ~df.outbound,,,,,,,,,,,coef_acctime,,,,,,,,,,,, -util_PNRIN_MIX_Walk_access_time_(at_attraction_end),PNRIN_MIX - Walk access time (at attraction end),@(df.origin_mix_time) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_acctime,,,,,,,,,,,, +util_PNRIN_MIX_Walk_access_time_(at_attraction_end),PNRIN_MIX - Walk access time (at attraction end),"@np.where(df.nev_mix_access_available_in, df.nev_mix_access_time_in, np.where(df.microtransit_mix_access_available_in, df.microtransit_mix_access_time_in, df.origin_mix_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,coef_acctime,,,,,,,,,,,, +util_PNRIN_MIX_wait_access_time_(at_attraction_end),PNRIN_MIX - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_mix_access_available_in, nevWaitTime, np.where(df.microtransit_mix_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,,,coef_wait,,,,,,,,,,,, util_PNRIN_MIX_Walk_other_time,PNRIN_MIX - Walk other time,@(odt_skims['PNRIN_MIX_XFERWALK']) * df.time_factor * ~df.outbound,,,,,,,,,,,coef_xwalk,,,,,,,,,,,, -util_PNRIN_MIX_Fare,PNRIN_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['PNRIN_MIX_FARE'])*100 /(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,coef_income,,,,,,,,,,,, +util_PNRIN_MIX_Fare,PNRIN_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['PNRIN_MIX_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,coef_income,,,,,,,,,,,, util_PNRIN_MIX_ASC,PNRIN_MIX - Alternative-specific constant,@df.pnr_mix_inb_asc * df.time_factor * ~df.outbound,,,,,,,,,,,coef_ivt,,,,,,,,,,,, util_PNR_MIX - Female,PNR_MIX - Female,@(df.female),,,,,,,,,,,coef_female_tran,,,,,,,,,,,, util_PNR_MIX - Destination Employment Density,PNR_MIX - Destination Employment Density,dMGRAEmpDen,,,,,,,,,,,coef_dEmpDen_dTran,,,,,,,,,,,, @@ -190,19 +204,21 @@ util_KNR_LOC_iwait_time,KNR_LOC - First iwait time,@(odt_skims['KNROUT_LOC_FIRST util_KNR_LOC_transfer_wait_time,KNR_LOC - transfer wait time,@(odt_skims['KNROUT_LOC_XFERWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,coef_xwait,,,,,,,,,,, util_KNR_LOC_number_of_transfers,KNR_LOC - number of transfers,"@(-23+23*np.exp(0.414*df.clip_KNROUT_LOC_XFERS)) * df.time_factor * df.outbound",,,,,,,,,,,,coef_xferdrive,,,,,,,,,,, util_KNR_LOC_KNR_time,KNR_LOC - KNR time,@(odt_skims['KNROUT_LOC_ACC']) * df.time_factor * df.outbound,,,,,,,,,,,,coef_acctime,,,,,,,,,,, -util_KNR_LOC_Walk_egress_time_(at_attraction_end),KNR_LOC - Walk egress time (at attraction end),@(df.dest_local_time) * df.time_factor * df.outbound,,,,,,,,,,,,coef_acctime,,,,,,,,,,, +util_KNR_LOC_Walk_egress_time_(at_attraction_end),KNR_LOC - Walk egress time (at attraction end),"@np.where(df.nev_local_egress_available_out, df.nev_local_egress_time_out, np.where(df.microtransit_local_egress_available_out, df.microtransit_local_egress_time_out, df.dest_local_time)) * df.time_factor * df.outbound",,,,,,,,,,,,coef_acctime,,,,,,,,,,, +util_KNR_LOC_wait_egress_time_(at_attraction_end),KNR_LOC - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_local_egress_available_out, nevWaitTime, np.where(df.microtransit_local_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,,,,coef_wait,,,,,,,,,,, util_KNR_LOC_Walk_other_time,KNR_LOC - Walk other time,@(odt_skims['KNROUT_LOC_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,,,coef_xwalk,,,,,,,,,,, -util_KNR_LOC_Fare,KNR_LOC - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_LOC_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,coef_income,,,,,,,,,,, -util_KNR_LOC_KNR_cost,KNR_LOC - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_LOC_ACC']) *driveSpeed )*df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,coef_income,,,,,,,,,,, -util_KNRIN_LOC_KNR_cost,KNR_LOC - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (dot_skims['KNRIN_LOC_ACC']) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,coef_income,,,,,,,,,,, +util_KNR_LOC_Fare,KNR_LOC - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_LOC_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,coef_income,,,,,,,,,,, +util_KNR_LOC_KNR_cost,KNR_LOC - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_LOC_ACC']/60) *driveSpeed )*df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,coef_income,,,,,,,,,,, +util_KNRIN_LOC_KNR_cost,KNR_LOC - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNRIN_LOC_EGR']/60) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,coef_income,,,,,,,,,,, util_KNRIN_LOC_In_vehicle_time,KNRIN_LOC - In-vehicle time,@(odt_skims['KNRIN_LOC_TOTALIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,coef_ivt,,,,,,,,,,, util_KNRIN_LOC_iwait_time,KNRIN_LOC - First iwait time,@(odt_skims['KNRIN_LOC_FIRSTWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,coef_wait,,,,,,,,,,, util_KNRIN_LOC_transfer_wait_time,KNRIN_LOC - transfer wait time,@(odt_skims['KNRIN_LOC_XFERWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,coef_xwait,,,,,,,,,,, util_KNRIN_LOC_number_of_transfers,KNRIN_LOC - number of transfers,"@(-23+23*np.exp(0.414*df.clip_KNRIN_LOC_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,,,,coef_xferdrive,,,,,,,,,,, util_KNRIN_LOC_KNRIN_time,KNRIN_LOC - KNR time,@odt_skims['KNRIN_LOC_EGR'] * df.time_factor * ~df.outbound,,,,,,,,,,,,coef_acctime,,,,,,,,,,, -util_KNRIN_LOC_Walk_access_time,KNRIN_LOC - Walk access time,@df.origin_local_time * df.time_factor * ~df.outbound,,,,,,,,,,,,coef_acctime,,,,,,,,,,, +util_KNRIN_LOC_Walk_access_time,KNRIN_LOC - Walk access time,"@np.where(df.nev_local_access_available_in, df.nev_local_access_time_in, np.where(df.microtransit_local_access_available_in, df.microtransit_local_access_time_in, df.origin_local_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,,coef_acctime,,,,,,,,,,, +util_KNRIN_LOC_wait_access_time,KNRIN_LOC - Egress mt/nev wait time,"@np.where(df.nev_local_access_available_in, nevWaitTime, np.where(df.microtransit_local_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,,,,coef_wait,,,,,,,,,,, util_KNRIN_LOC_Walk_other_time,KNRIN_LOC - Walk other time,@(odt_skims['KNRIN_LOC_XFERWALK']) * df.time_factor * ~df.outbound,,,,,,,,,,,,coef_xwalk,,,,,,,,,,, -util_KNRIN_LOC_Fare_and_operating_cost,KNRIN_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_LOC_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,coef_income,,,,,,,,,,, +util_KNRIN_LOC_Fare_and_operating_cost,KNRIN_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_LOC_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,coef_income,,,,,,,,,,, util_KNR_LOC - Female,KNR_LOC - Female,@(df.female),,,,,,,,,,,,coef_female_tran,,,,,,,,,,, util_KNR_LOC - Destination Employment Density,KNR_LOC - Destination Employment Density,dMGRAEmpDen,,,,,,,,,,,,coef_dEmpDen_dTran,,,,,,,,,,, #,KNR_PRM,,,,,,,,,,,,,,,,,,,,,,,, @@ -212,28 +228,30 @@ util_KNR_PRM_In_vehicle_time_on_LRT,KNR_PRM - In-vehicle time on LRT,@(ivt_lrt_m util_KNR_PRM_In_vehicle_time_on_CMR,KNR_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNROUT_PRM_CMRIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNR_PRM_In_vehicle_time_on_LTD_EXP,KNR_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNROUT_PRM_LTDEXPIVTT'] + odt_skims['KNROUT_PRM_EXPIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNR_PRM_In_vehicle_time_on_URB,KNR_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNROUT_PRM_BRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, -util_KNR_PRM_FIRST_iwait_time,KNR_PRM - First iwait time,@(odt_skims['KNROUT_PRM_FIRSTWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,,coef_wait,,,,,,,,,, -util_KNR_PRM_transfer_wait_time,KNR_PRM - transfer wait time,@(odt_skims['KNROUT_PRM_XFERWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,,coef_xwait,,,,,,,,,, +util_KNR_PRM_FIRST_iwait_time,KNR_PRM - First iwait time,"@(odt_skims['KNROUT_PRM_FIRSTWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['KNROUT_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,coef_wait,,,,,,,,,, +util_KNR_PRM_transfer_wait_time,KNR_PRM - transfer wait time,"@(odt_skims['KNROUT_PRM_XFERWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['KNROUT_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,coef_xwait,,,,,,,,,, util_KNR_PRM_number_of_transfers,KNR_PRM - number of transfers,"@(-23+23*np.exp(0.414*df.clip_KNROUT_PRM_XFERS)) * df.time_factor * df.outbound",,,,,,,,,,,,,coef_xferdrive,,,,,,,,,, util_KNR_PRM_KNR_time,KNR_PRM - KNR time,@(odt_skims['KNROUT_PRM_ACC']) * df.time_factor * df.outbound,,,,,,,,,,,,,coef_acctime,,,,,,,,,, -util_KNR_PRM_Walk_egress_time_(at_attraction_end),KNR_PRM - Walk egress time (at attraction end),"@np.where(df.nev_egress_available_out, df.nev_egress_time_out, np.where(df.microtransit_egress_available_out, df.microtransit_egress_time_out, df.dest_prm_time)) * df.time_factor * df.outbound",,,,,,,,,,,,,coef_acctime,,,,,,,,,, +util_KNR_PRM_Walk_egress_time_(at_attraction_end),KNR_PRM - Walk egress time (at attraction end),"@np.where(df.nev_prm_egress_available_out, df.nev_prm_egress_time_out, np.where(df.microtransit_prm_egress_available_out, df.microtransit_prm_egress_time_out, df.dest_prm_time)) * df.time_factor * df.outbound",,,,,,,,,,,,,coef_acctime,,,,,,,,,, +util_KNR_PRM_wait_egress_time_(at_attraction_end),KNR_PRM - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_prm_egress_available_out, nevWaitTime, np.where(df.microtransit_prm_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,,,,,coef_wait,,,,,,,,,, util_KNR_PRM_Walk_other_time,KNR_PRM - Walk other time,@(odt_skims['KNROUT_PRM_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,,,,coef_xwalk,,,,,,,,,, -util_KNR_PRM_Fare,KNR_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,coef_income,,,,,,,,,, +util_KNR_PRM_Fare,KNR_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,coef_income,,,,,,,,,, util_KNR_PRM_ASC,PNR_PRM - Alternative-specific constant,@df.knr_prm_out_asc * df.time_factor * df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, -util_KNR_PRM_KNR_cost,KNR_PRM - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_PRM_ACC']) *driveSpeed)*df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,coef_income,,,,,,,,,, -util_KNRIN_PRM_KNR_cost,KNR_PRM - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (dot_skims['KNRIN_PRM_ACC']) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,coef_income,,,,,,,,,, +util_KNR_PRM_KNR_cost,KNR_PRM - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_PRM_ACC']/60) *driveSpeed)*df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,coef_income,,,,,,,,,, +util_KNRIN_PRM_KNR_cost,KNR_PRM - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNRIN_PRM_EGR']/60) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,coef_income,,,,,,,,,, util_KNRIN_PRM_In_vehicle_time,KNRIN_PRM - In-vehicle time,@(odt_skims['KNRIN_PRM_TOTALIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNRIN_PRM_In_vehicle_time_on_LRT,KNRIN_PRM - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['KNRIN_PRM_LRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNRIN_PRM_In_vehicle_time_on_CMR,KNRIN_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNRIN_PRM_CMRIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNRIN_PRM_In_vehicle_time_on_LTD_EXP,KNRIN_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNRIN_PRM_LTDEXPIVTT'] + odt_skims['KNRIN_PRM_EXPIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNRIN_PRM_In_vehicle_time_on_URB,KNRIN_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNRIN_PRM_BRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, -util_KNRIN_PRM_FIRST_iwait_time,KNRIN_PRM - First iwait time,@(odt_skims['KNRIN_PRM_FIRSTWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_wait,,,,,,,,,, -util_KNRIN_PRM_transfer_wait_time,KNRIN_PRM - transfer wait time,@(odt_skims['KNRIN_PRM_XFERWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_xwait,,,,,,,,,, +util_KNRIN_PRM_FIRST_iwait_time,KNRIN_PRM - First iwait time,"@(odt_skims['KNRIN_PRM_FIRSTWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['KNRIN_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,coef_wait,,,,,,,,,, +util_KNRIN_PRM_transfer_wait_time,KNRIN_PRM - transfer wait time,"@(odt_skims['KNRIN_PRM_XFERWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['KNRIN_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,coef_xwait,,,,,,,,,, util_KNRIN_PRM_number_of_transfers,KNRIN_PRM - number of transfers,"@(-23+23*np.exp(0.414*df.clip_KNRIN_PRM_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,coef_xferdrive,,,,,,,,,, util_KNRIN_PRM_KNRIN_time,KNRIN_PRM - KNR time,@(odt_skims['KNRIN_PRM_EGR']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_acctime,,,,,,,,,, -util_KNRIN_PRM_Walk_access_time_(at_attraction_end),KNRIN_PRM - Walk access time (at attraction end),"@np.where(df.nev_access_available_in, df.nev_access_time_in, np.where(df.microtransit_access_available_in, df.microtransit_access_time_in, df.origin_prm_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,coef_acctime,,,,,,,,,, +util_KNRIN_PRM_Walk_access_time_(at_attraction_end),KNRIN_PRM - Walk access time (at attraction end),"@np.where(df.nev_prm_access_available_in, df.nev_prm_access_time_in, np.where(df.microtransit_prm_access_available_in, df.microtransit_prm_access_time_in, df.origin_prm_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,coef_acctime,,,,,,,,,, +util_KNRIN_PRM_wait_access_time_(at_attraction_end),KNRIN_PRM - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_prm_access_available_in, nevWaitTime, np.where(df.microtransit_prm_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,coef_wait,,,,,,,,,, util_KNRIN_PRM_Walk_other_time,KNRIN_PRM - Walk other time,@(odt_skims['KNRIN_PRM_XFERWALK']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_xwalk,,,,,,,,,, -util_KNRIN_PRM_Fare,KNRIN_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_PRM_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,coef_income,,,,,,,,,, +util_KNRIN_PRM_Fare,KNRIN_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_PRM_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,coef_income,,,,,,,,,, util_KNRIN_PRM_ASC,KNRIN_PRM - Alternative-specific constant,@df.knr_prm_inb_asc * df.time_factor * ~df.outbound,,,,,,,,,,,,,coef_ivt,,,,,,,,,, util_KNR_PRM - Female,KNR_PRM - Female,@(df.female),,,,,,,,,,,,,coef_female_tran,,,,,,,,,, util_KNR_PRM - Destination Employment Density,KNR_PRM - Destination Employment Density,dMGRAEmpDen,,,,,,,,,,,,,coef_dEmpDen_dTran,,,,,,,,,, @@ -244,129 +262,150 @@ util_KNR_MIX_In_vehicle_time_on_LRT,KNR_MIX - In-vehicle time on LRT,@(ivt_lrt_m util_KNR_MIX_In_vehicle_time_on_CMR,KNR_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNROUT_MIX_CMRIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNR_MIX_In_vehicle_time_on_LTD_EXP,KNR_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNROUT_MIX_LTDEXPIVTT'] + odt_skims['KNROUT_MIX_EXPIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNR_MIX_In_vehicle_time_on_URB,KNR_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNROUT_MIX_BRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, -util_KNR_MIX_FIRST_iwait_time,KNR_MIX - First iwait time,@(odt_skims['KNROUT_MIX_FIRSTWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_wait,,,,,,,,, -util_KNR_MIX_transfer_wait_time,KNR_MIX - transfer wait time,@(odt_skims['KNROUT_MIX_XFERWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_xwait,,,,,,,,, +util_KNR_MIX_FIRST_iwait_time,KNR_MIX - First iwait time,"@(odt_skims['KNROUT_MIX_FIRSTWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['KNROUT_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,coef_wait,,,,,,,,, +util_KNR_MIX_transfer_wait_time,KNR_MIX - transfer wait time,"@(odt_skims['KNROUT_MIX_XFERWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['KNROUT_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,coef_xwait,,,,,,,,, util_KNR_MIX_number_of_transfers,KNR_MIX - number of transfers,"@(-23+23*np.exp(0.414*df.clip_KNROUT_MIX_XFERS)) * df.time_factor * df.outbound",,,,,,,,,,,,,,coef_xferdrive,,,,,,,,, util_KNR_MIX_KNR_time,KNR_MIX - KNR time,@(odt_skims['KNROUT_MIX_ACC']) * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_acctime,,,,,,,,, -util_KNR_MIX_Walk_egress_time_(at_attraction_end),KNR_MIX - Walk egress time (at attraction end),@(df.dest_mix_time) * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_acctime,,,,,,,,, +util_KNR_MIX_Walk_egress_time_(at_attraction_end),KNR_MIX - Walk egress time (at attraction end),"@np.where(df.nev_mix_egress_available_out, df.nev_mix_egress_time_out, np.where(df.microtransit_mix_egress_available_out, df.microtransit_mix_egress_time_out, df.dest_mix_time)) * df.time_factor * df.outbound",,,,,,,,,,,,,,coef_acctime,,,,,,,,, +util_KNR_MIX_wait_egress_time_(at_attraction_end),KNR_MIX - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_mix_egress_available_out, nevWaitTime, np.where(df.microtransit_mix_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,,,,,,coef_wait,,,,,,,,, util_KNR_MIX_Walk_other_time,KNR_MIX - Walk other time,@(odt_skims['KNROUT_MIX_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_xwalk,,,,,,,,, -util_KNR_MIX_Fare,KNR_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_MIX_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,,coef_income,,,,,,,,, +util_KNR_MIX_Fare,KNR_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_MIX_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,,coef_income,,,,,,,,, util_KNR_MIX_ASC,PNR_MIX - Alternative-specific constant,@df.knr_mix_out_asc * df.time_factor * df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, -util_KNR_MIX_KNR_cost,KNR_MIX - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_MIX_ACC']) *driveSpeed)*df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,coef_income,,,,,,,,, -util_KNRIN_MIX_KNR_cost,KNR_MIX - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (dot_skims['KNRIN_MIX_ACC']) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,coef_income,,,,,,,,, +util_KNR_MIX_KNR_cost,KNR_MIX - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_MIX_ACC']/60) *driveSpeed)*df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,coef_income,,,,,,,,, +util_KNRIN_MIX_KNR_cost,KNR_MIX - KNR cost,"@(df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNRIN_MIX_EGR']/60) *driveSpeed)*~df.outbound/(np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,coef_income,,,,,,,,, util_KNRIN_MIX_In_vehicle_time,KNRIN_MIX - In-vehicle time,@(odt_skims['KNRIN_MIX_TOTALIVTT']) * df.time_factor,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNRIN_MIX_In_vehicle_time_on_LRT,KNRIN_MIX - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['KNRIN_MIX_LRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNRIN_MIX_In_vehicle_time_on_CMR,KNRIN_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNRIN_MIX_CMRIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNRIN_MIX_In_vehicle_time_on_LTD_EXP,KNRIN_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNRIN_MIX_LTDEXPIVTT'] + odt_skims['KNRIN_MIX_EXPIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNRIN_MIX_In_vehicle_time_on_URB,KNRIN_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNRIN_MIX_BRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, -util_KNRIN_MIX_FIRST_iwait_time,KNRIN_MIX - First iwait time,@(odt_skims['KNRIN_MIX_FIRSTWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_wait,,,,,,,,, -util_KNRIN_MIX_transfer_wait_time,KNRIN_MIX - transfer wait time,@(odt_skims['KNRIN_MIX_XFERWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_xwait,,,,,,,,, +util_KNRIN_MIX_FIRST_iwait_time,KNRIN_MIX - First iwait time,"@(odt_skims['KNRIN_MIX_FIRSTWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['KNRIN_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,coef_wait,,,,,,,,, +util_KNRIN_MIX_transfer_wait_time,KNRIN_MIX - transfer wait time,"@(odt_skims['KNRIN_MIX_XFERWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['KNRIN_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,coef_xwait,,,,,,,,, util_KNRIN_MIX_number_of_transfers,KNRIN_MIX - number of transfers,"@(-23+23*np.exp(0.414*df.clip_KNRIN_MIX_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,coef_xferdrive,,,,,,,,, util_KNRIN_MIX_KNRIN_time,KNRIN_MIX - KNR time,@(odt_skims['KNRIN_MIX_EGR']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_acctime,,,,,,,,, -util_KNRIN_MIX_Walk_access_time_(at_attraction_end),KNRIN_MIX - Walk access time (at attraction end),@(df.origin_mix_time) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_acctime,,,,,,,,, +util_KNRIN_MIX_Walk_access_time_(at_attraction_end),KNRIN_MIX - Walk access time (at attraction end),"@np.where(df.nev_mix_access_available_in, df.nev_mix_access_time_in, np.where(df.microtransit_mix_access_available_in, df.microtransit_mix_access_time_in, df.origin_mix_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,coef_acctime,,,,,,,,, +util_KNRIN_MIX_wait_access_time_(at_attraction_end),KNRIN_MIX - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_mix_access_available_in, nevWaitTime, np.where(df.microtransit_mix_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,coef_wait,,,,,,,,, util_KNRIN_MIX_Walk_other_time,KNRIN_MIX - Walk other time,@(odt_skims['KNRIN_MIX_XFERWALK']) * ~df.outbound,,,,,,,,,,,,,,coef_xwalk,,,,,,,,, -util_KNRIN_MIX_Fare,KNRIN_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_MIX_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,,coef_income,,,,,,,,, +util_KNRIN_MIX_Fare,KNRIN_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_MIX_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,,coef_income,,,,,,,,, util_KNRIN_MIX_ASC,KNRIN_MIX - Alternative-specific constant,@df.knr_mix_inb_asc * df.time_factor * ~df.outbound,,,,,,,,,,,,,,coef_ivt,,,,,,,,, util_KNR_MIX - Female,KNR_MIX - Female,@(df.female),,,,,,,,,,,,,,coef_female_tran,,,,,,,,, util_KNR_MIX - Destination Employment Density,KNR_MIX - Destination Employment Density,dMGRAEmpDen,,,,,,,,,,,,,,coef_dEmpDen_dTran,,,,,,,,, #,,,,,,,,,,,,,,,,,,,,,,,,, util_TNC_LOC_Unavailable,TNC_LOC - Unavailable,(tnc_local_available == False)|(TNR_available==0),,,,,,,,,,,,,,,-999,,,,,,,, util_TNC_LOC_Unavailable_for_persons_less_than_16,TNC_LOC - Unavailable for persons less than 16,age < 12,,,,,,,,,,,,,,,-999,,,,,,,, -util_TNC_LOC_In_vehicle_time,TNC_LOC - In-vehicle time,@(odt_skims['TNCOUT_LOC_TOTALIVTT'])* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_ivt,,,,,,,, -util_TNC_LOC_iwait_time,TNC_LOC - First iwait time,@(odt_skims['TNCOUT_LOC_FIRSTWAIT'])* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_wait,,,,,,,, -util_TNC_LOC_transfer_wait_time,TNC_LOC - transfer wait time,@odt_skims['TNCOUT_LOC_XFERWAIT']* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_xwait,,,,,,,, +util_TNC_LOC_In_vehicle_time,TNC_LOC - In-vehicle time,@(odt_skims['KNROUT_LOC_TOTALIVTT'])* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_ivt,,,,,,,, +util_TNC_LOC_iwait_time,TNC_LOC - First iwait time,@(odt_skims['KNROUT_LOC_FIRSTWAIT'])* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_transfer_wait_time,TNC_LOC - transfer wait time,@odt_skims['KNROUT_LOC_XFERWAIT']* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_xwait,,,,,,,, util_TNC_LOC_number_of_transfers,TNC_LOC - number of transfers,"@(-23+23*np.exp(0.414*df.clip_TNCOUT_LOC_XFERS)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,coef_xferdrive,,,,,,,, -util_TNC_LOC_TNC_time,TNC_LOC - TNC time,@odt_skims['TNCOUT_LOC_ACC']* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_acctime,,,,,,,, -util_TNC_LOC_Walk_egress_time_(at_attraction_end),TNC_LOC - Walk egress time (at attraction end),@df.dest_local_time* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_acctime,,,,,,,, -util_TNC_LOC_Walk_other_time,TNC_LOC - Walk other time,@odt_skims['TNCOUT_LOC_XFERWALK']* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_xwalk,,,,,,,, -util_TNC_LOC_Fare_and_operating_cost,TNC_LOC - Fare ,"@odt_skims['TNCOUT_LOC_FARE']*100/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,,,coef_income,,,,,,,, -util_TNC_LOC_In_vehicle_time,TNC_LOC - In-vehicle time,@(odt_skims['TNCIN_LOC_TOTALIVTT'])* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_ivt,,,,,,,, -util_TNC_LOC_iwait_time,TNC_LOC - First iwait time,@(odt_skims['TNCIN_LOC_FIRSTWAIT'])* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_wait,,,,,,,, -util_TNC_LOC_transfer_wait_time,TNC_LOC - transfer wait time,@odt_skims['TNCIN_LOC_XFERWAIT']* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_xwait,,,,,,,, +util_TNC_LOC_TNC_time,TNC_LOC - TNC time,"@np.where(df.nev_local_access_available_out, df.nev_local_access_time_out, np.where(df.microtransit_local_access_available_out, df.microtransit_local_access_time_out, odt_skims['KNROUT_LOC_ACC'])) * df.time_factor * df.outbound",,,,,,,,,,,,,,,coef_acctime,,,,,,,, +util_TNC_LOC_TNC_wait_time,TNC_LOC - TNC wait time,"@np.where(df.nev_local_access_available_out, nevWaitTime, np.where(df.microtransit_local_access_available_out, microtransitWaitTime, df.origSingleTNCWaitTime)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_TNC_fare,TNC_LOC - TNC fare,"@(~df.nev_local_access_available_out) * (~df.microtransit_local_access_available_out) * (df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNROUT_LOC_ACC']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNROUT_LOC_ACC'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100) / (np.maximum(df.income,1000)**df.income_exponent))",,,,,,,,,,,,,,,coef_income,,,,,,,, +util_TNC_LOC_Walk_egress_time_(at_attraction_end),TNC_LOC - Walk egress time (at attraction end),"@np.where(df.nev_local_egress_available_out, df.nev_local_egress_time_out, np.where(df.microtransit_local_egress_available_out, df.microtransit_local_egress_time_out, df.dest_local_time)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,coef_acctime,,,,,,,, +util_TNC_LOC_wait_egress_time_(at_attraction_end),TNC_LOC - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_local_egress_available_out, nevWaitTime, np.where(df.microtransit_local_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_Walk_other_time,TNC_LOC - Walk other time,@odt_skims['KNROUT_LOC_XFERWALK']* df.time_factor * df.outbound,,,,,,,,,,,,,,,coef_xwalk,,,,,,,, +util_TNC_LOC_Fare_and_operating_cost,TNC_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_LOC_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,,,coef_income,,,,,,,, +util_TNC_LOC_In_vehicle_time,TNC_LOC - In-vehicle time,@(odt_skims['KNRIN_LOC_TOTALIVTT'])* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_ivt,,,,,,,, +util_TNC_LOC_iwait_time,TNC_LOC - First iwait time,@(odt_skims['KNRIN_LOC_FIRSTWAIT'])* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_transfer_wait_time,TNC_LOC - transfer wait time,@odt_skims['KNRIN_LOC_XFERWAIT']* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_xwait,,,,,,,, util_TNC_LOC_number_of_transfers,TNC_LOC - number of transfers,"@(-23+23*np.exp(0.414*df.clip_TNCIN_LOC_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,coef_xferdrive,,,,,,,, -util_TNC_LOC_TNC_time,TNC_LOC - TNC time,@odt_skims['TNCIN_LOC_EGR']* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_acctime,,,,,,,, -util_TNC_LOC_Walk_egress_time_(at_attraction_end),TNC_LOC - Walk egress time (at attraction end),@df.origin_local_time* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_acctime,,,,,,,, -util_TNC_LOC_Walk_other_time,TNC_LOC - Walk other time,@odt_skims['TNCIN_LOC_XFERWALK']* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_xwalk,,,,,,,, -util_TNC_LOC_Fare,TNC_LOC - Fare ,"@odt_skims['TNCIN_LOC_FARE']*100/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,,,coef_income,,,,,,,, +util_TNC_LOC_TNC_time,TNC_LOC - TNC time,"@np.where(df.nev_local_egress_available_in, df.nev_local_egress_time_in, np.where(df.microtransit_local_egress_available_in, df.microtransit_local_egress_time_in, odt_skims['KNRIN_LOC_EGR'])) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,coef_acctime,,,,,,,, +util_TNC_LOC_TNC_wait_time,TNC_LOC - TNC wait time,"@np.where(df.nev_local_egress_available_in, nevWaitTime, np.where(df.microtransit_local_egress_available_in, microtransitWaitTime, df.destSingleTNCWaitTime)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_TNC_fare,TNC_LOC - TNC fare,"@(~df.nev_local_egress_available_in) * (~df.microtransit_local_egress_available_in) * (~df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNRIN_LOC_EGR']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNRIN_LOC_EGR'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100) / (np.maximum(df.income,1000)**df.income_exponent))",,,,,,,,,,,,,,,coef_income,,,,,,,, +util_TNC_LOC_Walk_egress_time_(at_attraction_end),TNC_LOC - Walk egress time (at attraction end),"@np.where(df.nev_local_access_available_in, df.nev_local_access_time_in, np.where(df.microtransit_local_access_available_in, df.microtransit_local_access_time_in, df.origin_local_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,coef_acctime,,,,,,,, +util_TNC_LOC_wait_egress_time_(at_attraction_end),TNC_LOC - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_local_access_available_in, nevWaitTime, np.where(df.microtransit_local_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,coef_wait,,,,,,,, +util_TNC_LOC_Walk_other_time,TNC_LOC - Walk other time,@odt_skims['KNRIN_LOC_XFERWALK']* df.time_factor * ~df.outbound,,,,,,,,,,,,,,,coef_xwalk,,,,,,,, +util_TNC_LOC_Fare,TNC_LOC - Fare ,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_LOC_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,,,coef_income,,,,,,,, util_TNC_LOC - Female,TNC_LOC - Female,@(df.female),,,,,,,,,,,,,,,coef_female_tran,,,,,,,, util_TNC_LOC - Destination Employment Density,TNC_LOC - Destination Employment Density,dMGRAEmpDen,,,,,,,,,,,,,,,coef_dEmpDen_dTran,,,,,,,, #,TNC_PRM,,,,,,,,,,,,,,,,,,,,,,,, util_TNC_PRM_Unavailable,TNC_PRM - Unavailable,(tnc_premium_available == False)|(TNR_available==0),,,,,,,,,,,,,,,,-999,,,,,,, util_TNC_PRM_Unavailable_for_persons_less_than_16,TNC_PRM - Unavailable for persons less than 16,@df.age < 12,,,,,,,,,,,,,,,,-999,,,,,,, -util_TNC_PRM_In_vehicle_time,TNC_PRM - In-vehicle time,@(odt_skims['TNCOUT_PRM_TOTALIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_In_vehicle_time_on_LRT,TNC_PRM - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['TNCOUT_PRM_LRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_In_vehicle_time_on_CMR,TNC_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['TNCOUT_PRM_CMRIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_In_vehicle_time_on_LTD_EXP,TNC_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['TNCOUT_PRM_LTDEXPIVTT'] + odt_skims['TNCOUT_PRM_EXPIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_In_vehicle_time_on_URB,TNC_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['TNCOUT_PRM_BRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNC_PRM_FIRST_iwait_time,TNC_PRM - First iwait time,@(odt_skims['TNCOUT_PRM_FIRSTWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_wait,,,,,,, -util_TNC_PRM_transfer_wait_time,TNC_PRM - transfer wait time,@(odt_skims['TNCOUT_PRM_XFERWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_xwait,,,,,,, +util_TNC_PRM_In_vehicle_time,TNC_PRM - In-vehicle time,@(odt_skims['KNROUT_PRM_TOTALIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_In_vehicle_time_on_LRT,TNC_PRM - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['KNROUT_PRM_LRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_In_vehicle_time_on_CMR,TNC_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNROUT_PRM_CMRIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_In_vehicle_time_on_LTD_EXP,TNC_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNROUT_PRM_LTDEXPIVTT'] + odt_skims['KNROUT_PRM_EXPIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_In_vehicle_time_on_URB,TNC_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNROUT_PRM_BRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNC_PRM_FIRST_iwait_time,TNC_PRM - First iwait time,"@(odt_skims['KNROUT_PRM_FIRSTWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['KNROUT_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNC_PRM_transfer_wait_time,TNC_PRM - transfer wait time,"@(odt_skims['KNROUT_PRM_XFERWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['KNROUT_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,coef_xwait,,,,,,, util_TNC_PRM_number_of_transfers,TNC_PRM - number of transfers,"@(-23+23*np.exp(0.414*df.clip_TNCOUT_PRM_XFERS)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,coef_xferdrive,,,,,,, -util_TNC_PRM_TNC_time,TNC_PRM - TNC time,"@np.where(df.nev_access_available_out, df.nev_access_time_out, np.where(df.microtransit_access_available_out, df.microtransit_access_time_out, odt_skims['TNCOUT_PRM_ACC'])) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,coef_acctime,,,,,,, -util_TNC_PRM_Walk_egress_time_(at_attraction_end),TNC_PRM - Walk egress time (at attraction end),"@np.where(df.nev_egress_available_out, df.nev_egress_time_out, np.where(df.microtransit_egress_available_out, df.microtransit_egress_time_out, df.dest_prm_time)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,coef_acctime,,,,,,, -util_TNC_PRM_Walk_other_time,TNC_PRM - Walk other time,@(odt_skims['TNCOUT_PRM_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_xwalk,,,,,,, -util_TNC_PRM_Fare,TNC_PRM - Fare,"@np.where(df.microtransit_access_available_out | df.nev_access_available_out, df.transitSubsidyPassDiscount*odt_skims['KNROUT_PRM_FARE'], df.transitSubsidyPassDiscount*odt_skims['TNCOUT_PRM_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,,,,coef_income,,,,,,, +util_TNC_PRM_TNC_time,TNC_PRM - TNC time,"@np.where(df.nev_prm_access_available_out, df.nev_prm_access_time_out, np.where(df.microtransit_prm_access_available_out, df.microtransit_prm_access_time_out, odt_skims['KNROUT_PRM_ACC'])) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,coef_acctime,,,,,,, +util_TNC_PRM_TNC_wait_time,TNC_PRM - TNC wait time,"@np.where(df.nev_prm_access_available_out, nevWaitTime, np.where(df.microtransit_prm_access_available_out, microtransitWaitTime, df.origSingleTNCWaitTime)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNC_PRM_TNC_fare,TNC_PRM - TNC fare,"@(~df.nev_prm_access_available_out) * (~df.microtransit_prm_access_available_out) * (df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNROUT_PRM_ACC']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNROUT_PRM_ACC'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100) / (np.maximum(df.income,1000)**df.income_exponent))",,,,,,,,,,,,,,,,coef_income,,,,,,, +util_TNC_PRM_Walk_egress_time_(at_attraction_end),TNC_PRM - Walk egress time (at attraction end),"@np.where(df.nev_prm_egress_available_out, df.nev_prm_egress_time_out, np.where(df.microtransit_prm_egress_available_out, df.microtransit_prm_egress_time_out, df.dest_prm_time)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,coef_acctime,,,,,,, +util_TNC_PRM_wait_egress_time_(at_attraction_end),TNC_PRM - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_prm_egress_available_out, nevWaitTime, np.where(df.microtransit_prm_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNC_PRM_Walk_other_time,TNC_PRM - Walk other time,@(odt_skims['KNROUT_PRM_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_xwalk,,,,,,, +util_TNC_PRM_Fare,TNC_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,,,,coef_income,,,,,,, util_TNC_PRM_ASC,TNC_PRM - Alternative-specific constant,@df.tnc_prm_out_asc * df.time_factor * df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNCIN_PRM_In_vehicle_time,TNCIN_PRM - In-vehicle time,@(odt_skims['TNCIN_PRM_TOTALIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNCIN_PRM_In_vehicle_time_on_LRT,TNCIN_PRM - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['TNCIN_PRM_LRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNCIN_PRM_In_vehicle_time_on_CMR,TNCIN_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['TNCIN_PRM_CMRIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNCIN_PRM_In_vehicle_time_on_LTD_EXP,TNCIN_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['TNCIN_PRM_LTDEXPIVTT'] + odt_skims['TNCIN_PRM_EXPIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNCIN_PRM_In_vehicle_time_on_URB,TNCIN_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['TNCIN_PRM_BRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, -util_TNCIN_PRM_FIRST_iwait_time,TNCIN_PRM - First iwait time,@(odt_skims['TNCIN_PRM_FIRSTWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_wait,,,,,,, -util_TNCIN_PRM_transfer_wait_time,TNCIN_PRM - transfer wait time,@(odt_skims['TNCIN_PRM_XFERWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_xwait,,,,,,, +util_TNCIN_PRM_In_vehicle_time,TNCIN_PRM - In-vehicle time,@(odt_skims['KNRIN_PRM_TOTALIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNCIN_PRM_In_vehicle_time_on_LRT,TNCIN_PRM - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['KNRIN_PRM_LRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNCIN_PRM_In_vehicle_time_on_CMR,TNCIN_PRM - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNRIN_PRM_CMRIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNCIN_PRM_In_vehicle_time_on_LTD_EXP,TNCIN_PRM - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNRIN_PRM_LTDEXPIVTT'] + odt_skims['KNRIN_PRM_EXPIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNCIN_PRM_In_vehicle_time_on_URB,TNCIN_PRM - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNRIN_PRM_BRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, +util_TNCIN_PRM_FIRST_iwait_time,TNCIN_PRM - First iwait time,"@(odt_skims['KNRIN_PRM_FIRSTWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['KNRIN_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNCIN_PRM_transfer_wait_time,TNCIN_PRM - transfer wait time,"@(odt_skims['KNRIN_PRM_XFERWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['KNRIN_PRM_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,coef_xwait,,,,,,, util_TNCIN_PRM_number_of_transfers,TNCIN_PRM - number of transfers,"@(-23+23*np.exp(0.414*df.clip_TNCIN_PRM_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,coef_xferdrive,,,,,,, -util_TNCIN_PRM_TNCIN_time,TNCIN_PRM - TNC time,"@np.where(df.nev_egress_available_in, df.nev_egress_time_in, np.where(df.microtransit_egress_available_in, df.microtransit_egress_time_in, odt_skims['TNCIN_PRM_EGR'])) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,coef_acctime,,,,,,, -util_TNCIN_PRM_Walk_access_time_(at_attraction_end),TNCIN_PRM - Walk access time (at attraction end),"@np.where(df.nev_access_available_in, df.nev_access_time_in, np.where(df.microtransit_access_available_in, df.microtransit_access_time_in, df.origin_prm_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,coef_acctime,,,,,,, -util_TNCIN_PRM_Walk_other_time,TNCIN_PRM - Walk other time,@(odt_skims['TNCOUT_PRM_XFERWALK']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_xwalk,,,,,,, -util_TNCIN_PRM_Fare,TNCIN_PRM - Fare,"@np.where(df.microtransit_egress_available_in | df.nev_egress_available_in, df.transitSubsidyPassDiscount*odt_skims['KNRIN_PRM_FARE'], df.transitSubsidyPassDiscount*odt_skims['TNCIN_PRM_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,,,,coef_income,,,,,,, +util_TNCIN_PRM_time,TNCIN_PRM - TNC time,"@np.where(df.nev_prm_egress_available_in, df.nev_prm_egress_time_in, np.where(df.microtransit_prm_egress_available_in, df.microtransit_prm_egress_time_in, odt_skims['KNRIN_PRM_EGR'])) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,coef_acctime,,,,,,, +util_TNCIN_PRM_wait_time,TNCIN_PRM - TNC wait time,"@np.where(df.nev_prm_egress_available_in, nevWaitTime, np.where(df.microtransit_prm_egress_available_in, microtransitWaitTime, df.destSingleTNCWaitTime)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNCIN_PRM_fare,TNCIN_PRM - TNC fare,"@(~df.nev_prm_egress_available_in) * (~df.microtransit_prm_egress_available_in) * (~df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNRIN_PRM_EGR']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNRIN_PRM_EGR'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100) / (np.maximum(df.income,1000)**df.income_exponent))",,,,,,,,,,,,,,,,coef_income,,,,,,, +util_TNCIN_PRM_Walk_access_time_(at_attraction_end),TNCIN_PRM - Walk access time (at attraction end),"@np.where(df.nev_prm_access_available_in, df.nev_prm_access_time_in, np.where(df.microtransit_prm_access_available_in, df.microtransit_prm_access_time_in, df.origin_prm_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,coef_acctime,,,,,,, +util_TNCIN_PRM_wait_access_time_(at_attraction_end),TNCIN_PRM - Access mt/nev wait time (at attraction end),"@np.where(df.nev_prm_access_available_in, nevWaitTime, np.where(df.microtransit_prm_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,coef_wait,,,,,,, +util_TNCIN_PRM_Walk_other_time,TNCIN_PRM - Walk other time,@(odt_skims['KNROUT_PRM_XFERWALK']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_xwalk,,,,,,, +util_TNCIN_PRM_Fare,TNCIN_PRM - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_PRM_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,,,,coef_income,,,,,,, util_TNCIN_PRM_ASC,TNCIN_PRM - Alternative-specific constant,@df.tnc_prm_inb_asc * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,coef_ivt,,,,,,, util_TNC_PRM - Female,TNC_PRM - Female,@(df.female),,,,,,,,,,,,,,,,coef_female_tran,,,,,,, util_TNC_PRM - Destination Employment Density,TNC_PRM - Destination Employment Density,dMGRAEmpDen,,,,,,,,,,,,,,,,coef_dEmpDen_dTran,,,,,,, #,TNC_MIX,,,,,,,,,,,,,,,,,,,,,,,, util_TNC_MIX_Unavailable,TNC_mix - Unavailable,(tnc_mix_available == False)|(TNR_available==0),,,,,,,,,,,,,,,,,-999,,,,,, util_TNC_PRM_Unavailable_for_persons_less_than_16,TNC_mix - Unavailable for persons less than 16,@df.age < 12,,,,,,,,,,,,,,,,,-999,,,,,, -util_TNC_MIX_In_vehicle_time,TNC_MIX - In-vehicle time,@(odt_skims['TNCOUT_MIX_TOTALIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_In_vehicle_time_on_LRT,TNC_MIX - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['TNCOUT_MIX_LRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_In_vehicle_time_on_CMR,TNC_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['TNCOUT_MIX_CMRIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_In_vehicle_time_on_LTD_EXP,TNC_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['TNCOUT_MIX_LTDEXPIVTT']+ odt_skims['TNCOUT_MIX_EXPIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_In_vehicle_time_on_URB,TNC_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['TNCOUT_MIX_BRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNC_MIX_FIRST_iwait_time,TNC_MIX - First iwait time,@(odt_skims['TNCOUT_MIX_FIRSTWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_wait,,,,,, -util_TNC_MIX_transfer_wait_time,TNC_MIX - transfer wait time,@(odt_skims['TNCOUT_MIX_XFERWAIT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_xwait,,,,,, +util_TNC_MIX_In_vehicle_time,TNC_MIX - In-vehicle time,@(odt_skims['KNROUT_MIX_TOTALIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_In_vehicle_time_on_LRT,TNC_MIX - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['KNROUT_MIX_LRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_In_vehicle_time_on_CMR,TNC_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNROUT_MIX_CMRIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_In_vehicle_time_on_LTD_EXP,TNC_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNROUT_MIX_LTDEXPIVTT']+ odt_skims['KNROUT_MIX_EXPIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_In_vehicle_time_on_URB,TNC_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNROUT_MIX_BRTIVTT']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNC_MIX_FIRST_iwait_time,TNC_MIX - First iwait time,"@(odt_skims['KNROUT_MIX_FIRSTWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['KNROUT_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNC_MIX_transfer_wait_time,TNC_MIX - transfer wait time,"@ (odt_skims['KNROUT_MIX_XFERWAIT']) * df.time_factor * df.outbound * np.where(odt_skims['KNROUT_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,,coef_xwait,,,,,, util_TNC_MIX_number_of_transfers,TNC_MIX - number of transfers,"@(-23+23*np.exp(0.414*df.clip_TNCOUT_MIX_XFERS)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,,coef_xferdrive,,,,,, -util_TNC_MIX_TNC_time,TNC_MIX - TNC time,@(odt_skims['TNCOUT_MIX_ACC']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_acctime,,,,,, -util_TNC_MIX_Walk_egress_time_(at_attraction_end),TNC_MIX - Walk egress time (at attraction end),@(df.dest_mix_time) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_acctime,,,,,, -util_TNC_MIX_Walk_other_time,TNC_MIX - Walk other time,@(odt_skims['TNCOUT_MIX_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_xwalk,,,,,, -util_TNC_MIX_Fare,TNC_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['TNCOUT_MIX_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,,,,,coef_income,,,,,, +util_TNC_MIX_TNC_time,TNC_MIX - TNC time,"@np.where(df.nev_mix_access_available_out, df.nev_mix_access_time_out, np.where(df.microtransit_mix_access_available_out, df.microtransit_mix_access_time_out, odt_skims['KNROUT_MIX_ACC'])) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,,coef_acctime,,,,,, +util_TNC_MIX_TNC_wait_time,TNC_MIX - TNC wait time,"@np.where(df.nev_mix_access_available_out, nevWaitTime, np.where(df.microtransit_mix_access_available_out, microtransitWaitTime, df.origSingleTNCWaitTime)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNC_MIX_TNC_fare,TNC_MIX - TNC fare,"@(~df.nev_mix_access_available_out) * (~df.microtransit_mix_access_available_out) * (df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNROUT_MIX_ACC']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNROUT_MIX_ACC'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100) / (np.maximum(df.income,1000)**df.income_exponent))",,,,,,,,,,,,,,,,,coef_income,,,,,, +util_TNC_MIX_Walk_egress_time_(at_attraction_end),TNC_MIX - Walk egress time (at attraction end),"@np.where(df.nev_mix_egress_available_out, df.nev_mix_egress_time_out, np.where(df.microtransit_mix_egress_available_out, df.microtransit_mix_egress_time_out, df.dest_mix_time)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,,coef_acctime,,,,,, +util_TNC_MIX_wait_egress_time_(at_attraction_end),TNC_MIX - Egress mt/nev wait time (at attraction end),"@np.where(df.nev_mix_egress_available_out, nevWaitTime, np.where(df.microtransit_mix_egress_available_out, microtransitWaitTime, 0)) * df.time_factor * df.outbound",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNC_MIX_Walk_other_time,TNC_MIX - Walk other time,@(odt_skims['KNROUT_MIX_XFERWALK']) * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_xwalk,,,,,, +util_TNC_MIX_Fare,TNC_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNROUT_MIX_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * df.outbound",,,,,,,,,,,,,,,,,coef_income,,,,,, util_TNC_MIX_ASC,TNC_MIX - Alternative-specific constant,@df.tnc_mix_out_asc * df.time_factor * df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNCIN_MIX_In_vehicle_time,TNCIN_MIX - In-vehicle time,@(odt_skims['TNCIN_MIX_TOTALIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNCIN_MIX_In_vehicle_time_on_LRT,TNCIN_MIX - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['TNCIN_MIX_LRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNCIN_MIX_In_vehicle_time_on_CMR,TNCIN_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['TNCIN_MIX_CMRIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNCIN_MIX_In_vehicle_time_on_LTD_EXP,TNCIN_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['TNCIN_MIX_LTDEXPIVTT'] + odt_skims['TNCIN_MIX_EXPIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNCIN_MIX_In_vehicle_time_on_URB,TNCIN_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['TNCIN_MIX_BRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, -util_TNCIN_MIX_FIRST_iwait_time,TNCIN_MIX - First iwait time,@(odt_skims['TNCIN_MIX_FIRSTWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_wait,,,,,, -util_TNCIN_MIX_transfer_wait_time,TNCIN_MIX - transfer wait time,@(odt_skims['TNCIN_MIX_XFERWAIT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_xwait,,,,,, +util_TNCIN_MIX_In_vehicle_time,TNCIN_MIX - In-vehicle time,@(odt_skims['KNRIN_MIX_TOTALIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNCIN_MIX_In_vehicle_time_on_LRT,TNCIN_MIX - In-vehicle time on LRT,@(ivt_lrt_multiplier - 1) * (odt_skims['KNRIN_MIX_LRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNCIN_MIX_In_vehicle_time_on_CMR,TNCIN_MIX - In-vehicle time on CMR,@(ivt_cmr_multiplier - 1) * (odt_skims['KNRIN_MIX_CMRIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNCIN_MIX_In_vehicle_time_on_LTD_EXP,TNCIN_MIX - In-vehicle time on LTD and EXP,@(ivt_ltd_multiplier - 1) * (odt_skims['KNRIN_MIX_LTDEXPIVTT'] + odt_skims['KNRIN_MIX_EXPIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNCIN_MIX_In_vehicle_time_on_URB,TNCIN_MIX - In-vehicle time on BRT,@(ivt_brt_multiplier - 1) * (odt_skims['KNRIN_MIX_BRTIVTT']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, +util_TNCIN_MIX_FIRST_iwait_time,TNCIN_MIX - First iwait time,"@(odt_skims['KNRIN_MIX_FIRSTWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['KNRIN_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNCIN_MIX_transfer_wait_time,TNCIN_MIX - transfer wait time,"@(odt_skims['KNRIN_MIX_XFERWAIT']) * df.time_factor * ~df.outbound * np.where(odt_skims['KNRIN_MIX_BRTIVTT'] > 0,WAIT_TIME_DISC,1)",,,,,,,,,,,,,,,,,coef_xwait,,,,,, util_TNCIN_MIX_number_of_transfers,TNCIN_MIX - number of transfers,"@(-23+23*np.exp(0.414*df.clip_TNCIN_MIX_XFERS)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,,coef_xferdrive,,,,,, -util_TNCIN_MIX_TNCIN_time,TNCIN_MIX - TNC time,@(odt_skims['TNCIN_MIX_EGR']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_acctime,,,,,, -util_TNCIN_MIX_Walk_access_time_(at_attraction_end),TNCIN_MIX - Walk access time (at attraction end),@(df.origin_mix_time) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_acctime,,,,,, -util_TNCIN_MIX_Walk_other_time,TNCIN_MIX - Walk other time,@(odt_skims['TNCIN_MIX_XFERWALK']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_xwalk,,,,,, -util_TNCIN_MIX_Fare,TNCIN_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['TNCIN_MIX_FARE'])*100/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,,,,,coef_income,,,,,, +util_TNCIN_MIX_time,TNCIN_MIX - TNC time,"@np.where(df.nev_mix_egress_available_in, df.nev_mix_egress_time_in, np.where(df.microtransit_mix_egress_available_in, df.microtransit_mix_egress_time_in, odt_skims['KNRIN_MIX_EGR'])) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,,coef_acctime,,,,,, +util_TNCIN_MIX_wait_time,TNCIN_MIX - TNC wait time,"@np.where(df.nev_mix_egress_available_in, nevWaitTime, np.where(df.microtransit_mix_egress_available_in, microtransitWaitTime, df.destSingleTNCWaitTime)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNCIN_MIX_fare,TNCIN_MIX - TNC fare,"@(~df.nev_mix_egress_available_in) * (~df.microtransit_mix_egress_available_in) * (~df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNRIN_MIX_EGR']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNRIN_MIX_EGR'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100) / (np.maximum(df.income,1000)**df.income_exponent))",,,,,,,,,,,,,,,,,coef_income,,,,,, +util_TNCIN_MIX_Walk_access_time_(at_attraction_end),TNCIN_MIX - Walk access time (at attraction end),"@np.where(df.nev_mix_access_available_in, df.nev_mix_access_time_in, np.where(df.microtransit_mix_access_available_in, df.microtransit_mix_access_time_in, df.origin_mix_time)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,,coef_acctime,,,,,, +util_TNCIN_MIX_wait_access_time_(at_attraction_end),TNCIN_MIX - Access mt/nev wait time (at attraction end),"@np.where(df.nev_mix_access_available_in, nevWaitTime, np.where(df.microtransit_mix_access_available_in, microtransitWaitTime, 0)) * df.time_factor * ~df.outbound",,,,,,,,,,,,,,,,,coef_wait,,,,,, +util_TNCIN_MIX_Walk_other_time,TNCIN_MIX - Walk other time,@(odt_skims['KNRIN_MIX_XFERWALK']) * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_xwalk,,,,,, +util_TNCIN_MIX_Fare,TNCIN_MIX - Fare,"@df.transitSubsidyPassDiscount*(odt_skims['KNRIN_MIX_FARE'])*100*df.number_of_participants/(np.maximum(df.income,1000)**df.income_exponent) * ~df.outbound",,,,,,,,,,,,,,,,,coef_income,,,,,, util_TNCIN_MIX_ASC,TNCIN_MIX - Alternative-specific constant,@df.tnc_mix_inb_asc * df.time_factor * ~df.outbound,,,,,,,,,,,,,,,,,coef_ivt,,,,,, util_TNC_MIX - Female,TNC_MIX - Female,@(df.female),,,,,,,,,,,,,,,,,coef_female_tran,,,,,, util_TNC_MIX - Destination Employment Density,TNC_MIX - Destination Employment Density,dMGRAEmpDen,,,,,,,,,,,,,,,,,coef_dEmpDen_dTran,,,,,, #,Taxi,,,,,,,,,,,,,,,,,,,,,,,, util_Taxi_Unavailable,Taxi - Unavailable,RideHail_available==0,,,,,,,,,,,,,,,,,,-999,,,,, util_Taxi - In-vehicle time,Taxi - In-vehicle time,(s2_time_skims) * time_factor,,,,,,,,,,,,,,,,,,coef_ivt,,,,, -util_Taxi - Wait time,Taxi - Wait time,totalWaitTaxi * time_factor,,,,,,,,,,,,,,,,,,coef_wait,,,,, -util_Taxi - Fare,Taxi - Fare,"@((Taxi_baseFare + df.s2_dist_skims * Taxi_costPerMile + df.s2_time_skims * Taxi_costPerMinute) * 100 + df.s2_cost_skims) / (np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,,,,,coef_income,,,,, +util_Taxi - Wait time,Taxi - Wait time,origTaxiWaitTime * time_factor,,,,,,,,,,,,,,,,,,coef_wait,,,,, +util_Taxi - Fare,Taxi - Fare,"@(((Taxi_baseFare + df.s2_dist_skims * Taxi_costPerMile + df.s2_time_skims * Taxi_costPerMinute) * 100 + df.s2_cost_skims)) / (np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,,,,,coef_income,,,,, #,TNC Single,,,,,,,,,,,,,,,,,,,,,,,, util_TNC Single_Unavailable,TNC Single - Unavailable,RideHail_available==0,,,,,,,,,,,,,,,,,,,-999,,,, util_TNC Single - In-vehicle time,TNC Single - In-vehicle time,(s2_time_skims) * time_factor,,,,,,,,,,,,,,,,,,,coef_ivt,,,, -util_TNC Single - Wait time,TNC Single - Wait time,totalWaitSingleTNC * time_factor,,,,,,,,,,,,,,,,,,,coef_wait,,,, -util_TNC Single - Cost,TNC Single - Cost,"@(np.maximum(TNC_single_baseFare + df.s2_dist_skims * TNC_single_costPerMile + df.s2_time_skims * TNC_single_costPerMinute, TNC_single_baseFare) * 100 + df.s2_cost_skims) / (np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,,,,,,coef_income,,,, +util_TNC Single - Wait time,TNC Single - Wait time,origSingleTNCWaitTime * time_factor,,,,,,,,,,,,,,,,,,,coef_wait,,,, +util_TNC Single - Cost,TNC Single - Cost,"@((np.maximum(TNC_single_baseFare + df.s2_dist_skims * TNC_single_costPerMile + df.s2_time_skims * TNC_single_costPerMinute, TNC_single_costMinimum) * 100 + df.s2_cost_skims)) / (np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,,,,,,coef_income,,,, #,TNC Shared,,,,,,,,,,,,,,,,,,,,,,,, -util_TNC Shared_switch,TNC Shared - switch turn-off (depends on data availability),@scenarioYear==2022,,,,,,,,,,,,,,,,,,,,-999,,, -util_TNC Shared - In-vehicle time,TNC Shared - In-vehicle time,"@(np.where(df.nev_available, df.nev_time, np.where(df.microtransit_available, df.microtransit_time, df.s2_time_skims))) * TNC_shared_IVTFactor * df.time_factor",,,,,,,,,,,,,,,,,,,,coef_ivt,,, -util_TNC Shared - Wait time,TNC Shared - Wait time,"@np.where(df.nev_available, nevWaitTime, np.where(df.microtransit_available, microtransitWaitTime, df.totalWaitSharedTNC)) * df.time_factor",,,,,,,,,,,,,,,,,,,,coef_wait,,, -util_TNC Shared - Cost,TNC Shared - Cost,"@np.where(df.nev_available, nevCost, np.where(df.microtransit_available, microtransitCost, (np.maximum(TNC_shared_baseFare + df.s2_dist_skims * TNC_shared_costPerMile + df.s2_time_skims * TNC_shared_costPerMinute, TNC_shared_baseFare) * 100 + df.s2_cost_skims))) / (np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,,,,,,,coef_income,,, +util_TNC Shared_switch,TNC Shared - switch turn-off (depends on data availability),@(((~df.nev_available) & (~df.microtransit_available) & (scenarioYear==2022)) | (df.RideHail_available==0)),,,,,,,,,,,,,,,,,,,,-999,,, +util_TNC Shared - In-vehicle time,TNC Shared - In-vehicle time,"@(np.where(df.nev_available, df.nev_time, np.where(df.microtransit_available, df.microtransit_time, df.s3_time_skims * TNC_shared_IVTFactor))) * df.time_factor",,,,,,,,,,,,,,,,,,,,coef_ivt,,, +util_TNC Shared - Wait time,TNC Shared - Wait time,"@np.where(df.nev_available, nevWaitTime, np.where(df.microtransit_available, microtransitWaitTime, df.origSharedTNCWaitTime)) * df.time_factor",,,,,,,,,,,,,,,,,,,,coef_wait,,, +util_TNC Shared - Cost,TNC Shared - Cost,"@np.where(df.nev_available, nevCost, np.where(df.microtransit_available, microtransitCost, (np.maximum(TNC_shared_baseFare + df.s3_dist_skims * TNC_shared_costPerMile + df.s3_time_skims * TNC_shared_costPerMinute, TNC_shared_costMinimum) * 100 + df.s3_cost_skims))) / (np.maximum(df.income,1000)**df.income_exponent)",,,,,,,,,,,,,,,,,,,,coef_income,,, +util_calib_flexfleet,Calibration for flexible fleets,"microtransit_available | nev_available",,,,,,,,,,,,,,,,,,,,coef_calib_flexfleet,,, #,School bus,,,,,,,,,,,,,,,,,,,,,,,, util_School Bus - Unavailable,School Bus - Unavailable,SCHBUS_available==0,,,,,,,,,,,,,,,,,,,,,-999,, util_School Bus - In-vehicle Time at 20 miles per hour,School Bus - In-vehicle Time at 20 miles per hour,(da_dist_skims)* 3 * time_factor,,,,,,,,,,,,,,,,,,,,,coef_ivt,, @@ -397,7 +436,6 @@ util_calib_tourmaas,abm 2+ calibration,tourMaaS,coef_calib_tourmaas_DRIVEALONE,c util_calib_tourschbus,abm 2+ calibration,tourSchBus,coef_calib_tourschbus_DRIVEALONE,coef_calib_tourschbus_SHARED2,coef_calib_tourschbus_SHARED3,coef_calib_tourschbus_WALK,coef_calib_tourschbus_BIKE,coef_calib_tourschbus_WALK_TRANSIT,coef_calib_tourschbus_WALK_TRANSIT,coef_calib_tourschbus_WALK_TRANSIT,coef_calib_tourschbus_PNR_TRANSIT,coef_calib_tourschbus_PNR_TRANSIT,coef_calib_tourschbus_PNR_TRANSIT,coef_calib_tourschbus_KNR_TRANSIT,coef_calib_tourschbus_KNR_TRANSIT,coef_calib_tourschbus_KNR_TRANSIT,coef_calib_tourschbus_TNC_TRANSIT,coef_calib_tourschbus_TNC_TRANSIT,coef_calib_tourschbus_TNC_TRANSIT,coef_calib_tourschbus_TAXI,coef_calib_tourschbus_TNC_SINGLE,coef_calib_tourschbus_TNC_SHARED,0,-999,-999 util_availability_tourebike,,tourEbike,-999,-999,-999,0,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,0,-999 util_availability_tourescooter,,tourEscooter,-999,-999,-999,0,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,0 -,,,,,,,,,,,,,,,,,,,,,,,,, #,,,,,,,,,,,,,,,,,,,,,,,,, util_calib_jointtour1,abm 2+ calibration,jointTour==1,0,0,0,coef_calib_jointtour1_WALK,0,coef_calib_jointtour1_WALK_TRANSIT,coef_calib_jointtour1_WALK_TRANSIT,coef_calib_jointtour1_WALK_TRANSIT,coef_calib_jointtour1_PNR_TRANSIT,coef_calib_jointtour1_PNR_TRANSIT,coef_calib_jointtour1_PNR_TRANSIT,coef_calib_jointtour1_KNR_TRANSIT,coef_calib_jointtour1_KNR_TRANSIT,coef_calib_jointtour1_KNR_TRANSIT,coef_calib_jointtour1_TNC_TRANSIT,coef_calib_jointtour1_TNC_TRANSIT,coef_calib_jointtour1_TNC_TRANSIT,0,0,0,0,, util_calib_tourbikejointtour0,abm 2+ calibration,tourBike*(jointTour==0),coef_calib_tourbikejointtour0_DRIVEALONE,coef_calib_tourbikejointtour0_SHARED2,coef_calib_tourbikejointtour0_SHARED3,coef_calib_tourbikejointtour0_WALK,coef_calib_tourbikejointtour0_BIKE,coef_calib_tourbikejointtour0_WALK_TRANSIT,coef_calib_tourbikejointtour0_WALK_TRANSIT,coef_calib_tourbikejointtour0_WALK_TRANSIT,coef_calib_tourbikejointtour0_PNR_TRANSIT,coef_calib_tourbikejointtour0_PNR_TRANSIT,coef_calib_tourbikejointtour0_PNR_TRANSIT,coef_calib_tourbikejointtour0_KNR_TRANSIT,coef_calib_tourbikejointtour0_KNR_TRANSIT,coef_calib_tourbikejointtour0_KNR_TRANSIT,coef_calib_tourbikejointtour0_TNC_TRANSIT,coef_calib_tourbikejointtour0_TNC_TRANSIT,coef_calib_tourbikejointtour0_TNC_TRANSIT,coef_calib_tourbikejointtour0_TAXI,coef_calib_tourbikejointtour0_TNC_SINGLE,coef_calib_tourbikejointtour0_TNC_SHARED,0,, @@ -414,7 +452,6 @@ util_calib_tourebikejointtour0,,tourEbike*(jointTour==0),,,,coef_calib_tourebike util_calib_tourebikejointtour1,,tourEbike*(jointTour==1),,,,coef_calib_tourebikejointtour1_WALK,,,,,,,,,,,,,,,,,,coef_calib_tourebikejointtour1_EBIKE, util_calib_tourescooterjointtour0,,tourEscooter*(jointTour==0),,,,coef_calib_tourescooterjointtour0_WALK,,,,,,,,,,,,,,,,,,,coef_calib_tourescooterjointtour0_ESCOOTER util_calib_tourescooterjointtour1,,tourEscooter*(jointTour==1),,,,coef_calib_tourescooterjointtour1_WALK,,,,,,,,,,,,,,,,,,,coef_calib_tourescooterjointtour1_ESCOOTER -,,,,,,,,,,,,,,,,,,,,,,,,, #,,,,,,,,,,,,,,,,,,,,,,,,, util_calib_tourmaasjointtour0,abm 2+ calibration,tourMaaS*(jointTour==0),0,coef_calib_tourmaasjointtour0_SHARED2,coef_calib_tourmaasjointtour0_SHARED3,coef_calib_tourmaasjointtour0_WALK,0,0,0,0,0,0,0,0,0,0,0,0,0,coef_calib_tourmaasjointtour0_TAXI,coef_calib_tourmaasjointtour0_TNC_SINGLE,coef_calib_tourmaasjointtour0_TNC_SHARED,0,, util_calib_tourmaasjointtour1,abm 2+ calibration,tourMaaS*(jointTour==1),0,coef_calib_tourmaasjointtour1_SHARED2,coef_calib_tourmaasjointtour1_SHARED3,coef_calib_tourmaasjointtour1_WALK,0,0,0,0,0,0,0,0,0,0,0,0,0,0,coef_calib_tourmaasjointtour1_TNC_SINGLE,coef_calib_tourmaasjointtour1_TNC_SHARED,0,, @@ -451,12 +488,13 @@ util_calib_tourwalkjointtour0,abm 2+ calibration,tourWalk*(jointTour==0),coef_ca util_calib_tourwalkjointtour1,abm 2+ calibration,tourWalk*(jointTour==1),coef_calib_tourwalkjointtour1_DRIVEALONE,coef_calib_tourwalkjointtour1_SHARED2,coef_calib_tourwalkjointtour1_SHARED3,0,coef_calib_tourwalkjointtour1_BIKE,coef_calib_tourwalkjointtour1_WALK_TRANSIT,coef_calib_tourwalkjointtour1_WALK_TRANSIT,coef_calib_tourwalkjointtour1_WALK_TRANSIT,coef_calib_tourwalkjointtour1_PNR_TRANSIT,coef_calib_tourwalkjointtour1_PNR_TRANSIT,coef_calib_tourwalkjointtour1_PNR_TRANSIT,coef_calib_tourwalkjointtour1_KNR_TRANSIT,coef_calib_tourwalkjointtour1_KNR_TRANSIT,coef_calib_tourwalkjointtour1_KNR_TRANSIT,coef_calib_tourwalkjointtour1_TNC_TRANSIT,coef_calib_tourwalkjointtour1_TNC_TRANSIT,coef_calib_tourwalkjointtour1_TNC_TRANSIT,coef_calib_tourwalkjointtour1_TAXI,coef_calib_tourwalkjointtour1_TNC_SINGLE,coef_calib_tourwalkjointtour1_TNC_SHARED,0,, #,Micromobility,,,,,,,,,,,,,,,,,,,,,,,, util_micromobility_long_access,Shut off micromobility if access time > threshold and not micromobility tour,@((df.MicroAccessTime > microAccessThreshold)& ~(df.tourEbike | df.tourEscooter)),,,,,,,,,,,,,,,,,,,,,,-999,-999 -util_micromobility_long_access_microTour,Decrease micromobility if access time > threshold but tour is micromobility,@((df.MicroAccessTime > microAccessThreshold) & (df.tourEbike | df.tourEscooter)),,,,,,,,,,,,,,,,,,,,,,-20,-20 +util_ebike_long_access_microTour,Decrease ebike if access time > threshold but tour is micromobility,@((df.MicroAccessTime > microAccessThreshold) & (df.tourEbike | df.tourEscooter) & ((~df.ebike_owner) | (~df.tourEbike))),,,,,,,,,,,,,,,,,,,,,,-20, +util_escooter_long_access_microTour,Decrease escooter if access time > threshold but tour is micromobility,@((df.MicroAccessTime > microAccessThreshold) & (df.tourEbike | df.tourEscooter)),,,,,,,,,,,,,,,,,,,,,,,-20 #util_micromobility_long_trip,Shut off ebike if distance > threshold,ebikeMaxDistance,,,,,,,,,,,,,,,,,,,,,,-999, #util_micromobility_long_trip,Shut off escooter if distance > threshold,escooterMaxDistance,,,,,,,,,,,,,,,,,,,,,,,-999 util_ebike_ivt,Ebike utility for in-vehicle time,@(df.ebike_time * df.time_factor),,,,,,,,,,,,,,,,,,,,,,coef_ivt, -util_ebike_access,Ebike utility for access time time,@(microConstant + ((~df.ebike_owner)&(microRentTime + df.MicroAccessTime).astype(bool)))*df.time_factor,,,,,,,,,,,,,,,,,,,,,,coef_acctime, -util_ebike_cost_inb,Ebike utility for inbound cost,@((~df.ebike_owner)&((microFixedCost + microVarCost*df.ebike_time)/df.cost_sensitivity).astype(bool)),,,,,,,,,,,,,,,,,,,,,,coef_income, +util_ebike_access,Ebike utility for access time time,@((((~df.ebike_owner) | (~df.tourEbike))&(microRentTime + df.MicroAccessTime)))*df.time_factor,,,,,,,,,,,,,,,,,,,,,,coef_acctime, +util_ebike_cost_inb,Ebike utility for inbound cost,@(((~df.ebike_owner) | (~df.tourEbike)) & ((microFixedCost + microVarCost*df.ebike_time)/df.cost_sensitivity)),,,,,,,,,,,,,,,,,,,,,,coef_income, util_escooter_ivt,Escooter utility for in-vehicle time,@(df.escooter_time)*df.time_factor,,,,,,,,,,,,,,,,,,,,,,,coef_ivt -util_escooter_access,Escooter utility for access time,@(microRentTime + microConstant + df.MicroAccessTime) *df.time_factor,,,,,,,,,,,,,,,,,,,,,,,coef_acctime -util_escooter_cost_inb,Escooter utility for inbound cost,@(microFixedCost + microVarCost*df.escooter_time)/df.cost_sensitivity,,,,,,,,,,,,,,,,,,,,,,,coef_income +util_escooter_access,Escooter utility for access time,@(microRentTime + df.MicroAccessTime) *df.time_factor,,,,,,,,,,,,,,,,,,,,,,,coef_acctime +util_escooter_cost_inb,Escooter utility for inbound cost,@(microFixedCost + microVarCost*df.escooter_time)/df.cost_sensitivity,,,,,,,,,,,,,,,,,,,,,,,coef_income \ No newline at end of file diff --git a/configs/resident/trip_mode_choice.yaml b/configs/resident/trip_mode_choice.yaml index 5bf0436..fe450c8 100644 --- a/configs/resident/trip_mode_choice.yaml +++ b/configs/resident/trip_mode_choice.yaml @@ -118,9 +118,83 @@ CHOOSER_COLS_TO_KEEP: - vot_s2 - vot_s3 - ownsTransponder + - ebike_owner - parkingCost - - totalWaitSingleTNC - - totalWaitSharedTNC + - auto_op_cost + - autoCPMFactor + - autoParkingCostFactor + - autoTermTimeFactor + - costFactorS2 + - costFactorS3 + - transitSubsidyPassDiscount + - origTaxiWaitTime + - origSingleTNCWaitTime + - destSingleTNCWaitTime + - origSharedTNCWaitTime + - da_dist_skims - s2_time_skims - s2_dist_skims - - s2_cost_skims \ No newline at end of file + - s2_cost_skims + - s3_time_skims + - s3_dist_skims + - s3_cost_skims + - ebike_time + - escooter_time + - microtransit_orig + - microtransit_dest + - microtransit_operating + - microtransit_available + - microtransit_time + - nev_orig + - nev_dest + - nev_operating + - nev_available + - nev_time + - microtransit_local_access_available_out + - microtransit_prm_access_available_out + - microtransit_mix_access_available_out + - nev_local_access_available_out + - nev_prm_access_available_out + - nev_mix_access_available_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 + - 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_local_egress_available_in + - microtransit_prm_egress_available_in + - microtransit_mix_egress_available_in + - nev_local_egress_available_in + - nev_prm_egress_available_in + - nev_mix_egress_available_in + - microtransit_local_access_time_out + - microtransit_prm_access_time_out + - microtransit_mix_access_time_out + - nev_local_access_time_out + - nev_prm_access_time_out + - nev_mix_access_time_out + - microtransit_local_egress_time_out + - microtransit_prm_egress_time_out + - microtransit_mix_egress_time_out + - nev_local_egress_time_out + - nev_prm_egress_time_out + - nev_mix_egress_time_out + - microtransit_local_access_time_in + - microtransit_prm_access_time_in + - microtransit_mix_access_time_in + - nev_local_access_time_in + - nev_prm_access_time_in + - nev_mix_access_time_in + - microtransit_local_egress_time_in + - microtransit_prm_egress_time_in + - microtransit_mix_egress_time_in + - nev_local_egress_time_in + - nev_prm_egress_time_in + - nev_mix_egress_time_in \ No newline at end of file diff --git a/configs/resident/trip_mode_choice_annotate_trips.csv b/configs/resident/trip_mode_choice_annotate_trips.csv index ce3e85e..87bb2bd 100644 --- a/configs/resident/trip_mode_choice_annotate_trips.csv +++ b/configs/resident/trip_mode_choice_annotate_trips.csv @@ -5,50 +5,234 @@ Description,Target,Expression ,_dest_local_dist,"reindex(land_use.walk_dist_local_bus, df.destination)" ,_dest_prm_dist,"reindex(land_use.walk_dist_premium_transit, df.destination)" ,_dest_mix_dist,"np.minimum(_dest_local_dist, _dest_prm_dist)" -# -,cost_parking,"np.where(df.trip_mode.isin(['DRIVEALONE','SHARED2','SHARED3']),df.parkingCost,0)" +,_origin_local_time,_origin_local_dist * 60/walkSpeed +,_origin_prm_time,_origin_prm_dist * 60/walkSpeed +,_origin_mix_time,_origin_mix_dist * 60/walkSpeed +,_dest_local_time,_dest_local_dist * 60/walkSpeed +,_dest_prm_time,_dest_prm_dist * 60/walkSpeed +,_dest_mix_time,_dest_mix_dist * 60/walkSpeed +,_MicroAccessTime,"reindex(land_use.MicroAccessTime,df.origin)" +Origin Terminal Time,_oTermTime,"reindex(land_use.terminal_time,df.origin)" +Destination Terminal Time,_dTermTime,"reindex(land_use.terminal_time,df.destination)" +,_tour_participants,df.tour_id.map(tours.number_of_participants) +,_tour_mode,df.tour_id.map(tours.tour_mode) +,_tourEbike,(_tour_mode == 'EBIKE') +,_is_joint,(_tour_participants > 1) +#,, +,_time_drive_terminal,0 +,time_drive_terminal,"_time_drive_terminal + df.trip_mode.isin(['DRIVEALONE','SHARED2','SHARED3']) * (_oTermTime + _dTermTime) * df.autoTermTimeFactor" +#,, +,_cost_parking,0 +,_cost_parking,"_cost_parking + df.trip_mode.isin(['DRIVEALONE']) * (df.parkingCost * df.autoParkingCostFactor)" +,_cost_parking,"_cost_parking + df.trip_mode.isin(['SHARED2']) * (df.parkingCost * df.autoParkingCostFactor)/np.where(_is_joint,_tour_participants,OCC_SHARED2)" +,cost_parking,"_cost_parking + df.trip_mode.isin(['SHARED3']) * (df.parkingCost * df.autoParkingCostFactor)/np.where(_is_joint,_tour_participants,OCC_SHARED3)" +#,, +,_costOperatingDrive,0 +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['DRIVEALONE'])) * df.auto_op_cost * df.autoCPMFactor * df.da_dist_skims" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['SHARED2'])) * (df.auto_op_cost * df.autoCPMFactor * df.s2_dist_skims)/np.where(_is_joint,_tour_participants,OCC_SHARED2)" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['SHARED3'])) * (df.auto_op_cost * df.s3_dist_skims * df.autoCPMFactor)/np.where(_is_joint,_tour_participants,OCC_SHARED3)" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['PNR_LOC'])) * (df.auto_op_cost * (odt_skims['PNROUT_LOC_ACC']/60) *driveSpeed)* df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['PNR_LOC'])) * (df.auto_op_cost * (odt_skims['PNRIN_LOC_EGR']/60) *driveSpeed) * ~df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['PNR_PRM'])) * (df.auto_op_cost * (odt_skims['PNROUT_PRM_ACC']/60) *driveSpeed) * df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['PNR_PRM'])) * (df.auto_op_cost * (odt_skims['PNRIN_PRM_EGR']/60) *driveSpeed)*~df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['PNR_MIX'])) * (df.auto_op_cost * (odt_skims['PNROUT_MIX_ACC']/60) *driveSpeed) * df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['PNR_MIX'])) * (df.auto_op_cost * (odt_skims['PNRIN_MIX_EGR']/60) *driveSpeed)*~df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['KNR_LOC'])) * (df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_LOC_ACC']/60) *driveSpeed )*df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['KNR_LOC'])) * (df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNRIN_LOC_EGR']/60) *driveSpeed)*~df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['KNR_PRM'])) * (df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_PRM_ACC']/60) *driveSpeed)*df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['KNR_PRM'])) * (df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNRIN_PRM_EGR']/60) *driveSpeed)*~df.outbound / _tour_participants" +,_costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['KNR_MIX'])) * (df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNROUT_MIX_ACC']/60) *driveSpeed)*df.outbound / _tour_participants" +,costOperatingDrive,"_costOperatingDrive + (df.trip_mode.isin(['KNR_MIX'])) * (df.auto_op_cost * df.autoCPMFactor * (odt_skims['KNRIN_MIX_EGR']/60) *driveSpeed)*~df.outbound / _tour_participants" #,, ,_cost_fare_drive,0 -,_cost_fare_drive,"_cost_fare_drive + np.where(df.trip_mode == 'TAXI',1,0) * ((Taxi_baseFare + df.s2_dist_skims * Taxi_costPerMile + df.s2_time_skims * Taxi_costPerMinute) * 100 + df.s2_cost_skims)" -,_cost_fare_drive,"_cost_fare_drive + np.where(df.trip_mode=='TNC_SINGLE',1,0)*((TNC_single_baseFare + df.s2_dist_skims * TNC_single_costPerMile + df.s2_time_skims * TNC_single_costPerMinute) * 100 + df.s2_cost_skims)" -,_cost_fare_drive,"_cost_fare_drive + np.where(df.trip_mode=='TNC_SHARED',1,0)*((TNC_shared_baseFare + df.s2_dist_skims * TNC_shared_costPerMile + df.s2_time_skims * TNC_shared_costPerMinute) * 100 + df.s2_cost_skims)" -,_cost_fare_drive,"_cost_fare_drive + df.trip_mode.isin(['TNC_LOC','TNC_PRM','TNC_MIX'])*df.outbound*(TNC_single_baseFare + odt_skims['TNCOUT_LOC_ACC']*25/60 * TNC_single_costPerMile + odt_skims['TNCOUT_LOC_ACC'] * TNC_single_costPerMinute) * 100" -,cost_fare_drive,"_cost_fare_drive + df.trip_mode.isin(['TNC_LOC','TNC_PRM','TNC_MIX'])*~df.outbound*(TNC_single_baseFare + odt_skims['TNCIN_LOC_ACC']*25/60 * TNC_single_costPerMile + odt_skims['TNCIN_LOC_ACC'] * TNC_single_costPerMinute) * 100" +,_cost_fare_drive,"_cost_fare_drive + np.where(df.trip_mode == 'TAXI',1,0) * ((Taxi_baseFare + df.s2_dist_skims * Taxi_costPerMile + df.s2_time_skims * Taxi_costPerMinute) * 100 + df.s2_cost_skims) / _tour_participants" +,_cost_fare_drive,"_cost_fare_drive + np.where(df.trip_mode=='TNC_SINGLE',1,0)*(np.maximum(TNC_single_baseFare + df.s2_dist_skims * TNC_single_costPerMile + df.s2_time_skims * TNC_single_costPerMinute, TNC_single_costMinimum) * 100 + df.s2_cost_skims) / _tour_participants" +,_cost_fare_drive,"_cost_fare_drive + np.where(df.trip_mode=='TNC_SHARED',1,0)*np.where(df.nev_available, 0, np.where(df.microtransit_available, 0, (np.maximum(TNC_shared_baseFare + df.s3_dist_skims * TNC_shared_costPerMile + df.s3_time_skims * TNC_shared_costPerMinute, TNC_shared_costMinimum) * 100 + df.s3_cost_skims))) / _tour_participants" +,_cost_fare_drive,"_cost_fare_drive + df.trip_mode.isin(['TNC_LOC']) * (~df.nev_local_access_available_out) * (~df.microtransit_local_access_available_out) * (df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNROUT_LOC_ACC']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNROUT_LOC_ACC'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100)) / _tour_participants" +,_cost_fare_drive,"_cost_fare_drive + df.trip_mode.isin(['TNC_PRM']) * (~df.nev_prm_access_available_out) * (~df.microtransit_prm_access_available_out) * (df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNROUT_PRM_ACC']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNROUT_PRM_ACC'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100)) / _tour_participants" +,_cost_fare_drive,"_cost_fare_drive + df.trip_mode.isin(['TNC_MIX']) * (~df.nev_mix_access_available_out) * (~df.microtransit_mix_access_available_out) * (df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNROUT_MIX_ACC']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNROUT_MIX_ACC'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100)) / _tour_participants" +,_cost_fare_drive,"_cost_fare_drive + df.trip_mode.isin(['TNC_LOC']) * (~df.nev_local_egress_available_in) * (~df.microtransit_local_egress_available_in) * (~df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNRIN_LOC_EGR']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNRIN_LOC_EGR'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100)) / _tour_participants" +,_cost_fare_drive,"_cost_fare_drive + df.trip_mode.isin(['TNC_PRM']) * (~df.nev_prm_egress_available_in) * (~df.microtransit_prm_egress_available_in) * (~df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNRIN_PRM_EGR']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNRIN_PRM_EGR'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100)) / _tour_participants" +,cost_fare_drive,"_cost_fare_drive + df.trip_mode.isin(['TNC_MIX']) * (~df.nev_mix_egress_available_in) * (~df.microtransit_mix_egress_available_in) * (~df.outbound) * ((np.maximum(TNC_single_baseFare + (odt_skims['KNRIN_MIX_EGR']/60 * driveSpeed) * TNC_single_costPerMile + odt_skims['KNRIN_MIX_EGR'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100)) / _tour_participants" +#,, +,_time_transit_drive,0 +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['PNR_LOC'])) * odt_skims['PNROUT_LOC_ACC'] * df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['PNR_LOC'])) * odt_skims['PNRIN_LOC_EGR'] * ~df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['KNR_LOC'])) * odt_skims['KNROUT_LOC_ACC'] * df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['KNR_LOC'])) * odt_skims['KNRIN_LOC_EGR'] * ~df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['TNC_LOC'])) * odt_skims['KNROUT_LOC_ACC'] * df.outbound * ~df.nev_local_access_available_out * ~df.microtransit_local_access_available_out" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['TNC_LOC'])) * odt_skims['KNRIN_LOC_EGR'] * ~df.outbound * ~df.nev_local_egress_available_in * ~df.microtransit_local_egress_available_in" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['PNR_PRM'])) * odt_skims['PNROUT_PRM_ACC'] * df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['PNR_PRM'])) * odt_skims['PNRIN_PRM_EGR'] * ~df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['KNR_PRM'])) * odt_skims['KNROUT_PRM_ACC'] * df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['KNR_PRM'])) * odt_skims['KNRIN_PRM_EGR'] * ~df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['TNC_PRM'])) * odt_skims['KNROUT_PRM_ACC'] * df.outbound * ~df.nev_prm_access_available_out * ~df.microtransit_prm_access_available_out" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['TNC_PRM'])) * odt_skims['KNRIN_PRM_EGR'] * ~df.outbound * ~df.nev_prm_egress_available_in * ~df.microtransit_prm_egress_available_in" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['PNR_MIX'])) * odt_skims['PNROUT_MIX_ACC'] * df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['PNR_MIX'])) * odt_skims['PNRIN_MIX_EGR'] * ~df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['KNR_MIX'])) * odt_skims['KNROUT_MIX_ACC'] * df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['KNR_MIX'])) * odt_skims['KNRIN_MIX_EGR'] * ~df.outbound" +,_time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['TNC_MIX'])) * odt_skims['KNROUT_MIX_ACC'] * df.outbound * ~df.nev_mix_access_available_out * ~df.microtransit_mix_access_available_out" +,time_transit_drive,"_time_transit_drive + (df.trip_mode.isin(['TNC_MIX'])) * odt_skims['KNRIN_MIX_EGR'] * ~df.outbound * ~df.nev_mix_egress_available_in * ~df.microtransit_mix_egress_available_in" +#,, +,_time_sch_bus_in_vehicle,0 +,time_sch_bus_in_vehicle,"_time_sch_bus_in_vehicle + (df.trip_mode=='SCH_BUS') * df.da_dist_skims * 3" +#,, +,_time_nev_in_vehicle,0 +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode=='TNC_SHARED') * df.nev_available * df.nev_time" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['WALK_LOC','PNR_LOC','KNR_LOC','TNC_LOC'])) * df.nev_local_access_available_in * (df.nev_local_access_time_in)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['WALK_LOC','PNR_LOC','KNR_LOC','TNC_LOC'])) * df.nev_local_egress_available_out * (df.nev_local_egress_time_out)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['WALK_PRM','PNR_PRM','KNR_PRM','TNC_PRM'])) * df.nev_prm_access_available_in * (df.nev_prm_access_time_in)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['WALK_PRM','PNR_PRM','KNR_PRM','TNC_PRM'])) * df.nev_prm_egress_available_out * (df.nev_prm_egress_time_out)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['WALK_MIX','PNR_MIX','KNR_MIX','TNC_MIX'])) * df.nev_mix_access_available_in * (df.nev_mix_access_time_in)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['WALK_MIX','PNR_MIX','KNR_MIX','TNC_MIX'])) * df.nev_mix_egress_available_out * (df.nev_mix_egress_time_out)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['TNC_LOC'])) * df.nev_local_access_available_out * (df.nev_local_access_time_out)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['TNC_LOC'])) * df.nev_local_egress_available_in * (df.nev_local_egress_time_in)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['TNC_PRM'])) * df.nev_prm_access_available_out * (df.nev_prm_access_time_out)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['TNC_PRM'])) * df.nev_prm_egress_available_in * (df.nev_prm_egress_time_in)" +,_time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['TNC_MIX'])) * df.nev_mix_access_available_out * (df.nev_mix_access_time_out)" +,time_nev_in_vehicle,"_time_nev_in_vehicle + (df.trip_mode.isin(['TNC_MIX'])) * df.nev_mix_egress_available_in * (df.nev_mix_egress_time_in)" +#,, +,_time_microtransit_in_vehicle,0 +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode=='TNC_SHARED') * ~df.nev_available * df.microtransit_available * df.microtransit_time" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['WALK_LOC','PNR_LOC','KNR_LOC','TNC_LOC'])) * ~df.nev_local_access_available_in * df.microtransit_local_access_available_in * (df.microtransit_local_access_time_in)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['WALK_LOC','PNR_LOC','KNR_LOC','TNC_LOC'])) * ~df.nev_local_egress_available_out * df.microtransit_local_egress_available_out * (df.microtransit_local_egress_time_out)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['WALK_PRM','PNR_PRM','KNR_PRM','TNC_PRM'])) * ~df.nev_prm_access_available_in * df.microtransit_prm_access_available_in * (df.microtransit_prm_access_time_in)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['WALK_PRM','PNR_PRM','KNR_PRM','TNC_PRM'])) * ~df.nev_prm_egress_available_out * df.microtransit_prm_egress_available_out * (df.microtransit_prm_egress_time_out)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['WALK_MIX','PNR_MIX','KNR_MIX','TNC_MIX'])) * ~df.nev_mix_access_available_in * df.microtransit_mix_access_available_in * (df.microtransit_mix_access_time_in)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['WALK_MIX','PNR_MIX','KNR_MIX','TNC_MIX'])) * ~df.nev_mix_egress_available_out * df.microtransit_mix_egress_available_out * (df.microtransit_mix_egress_time_out)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['TNC_LOC'])) * ~df.nev_local_access_available_out * df.microtransit_local_access_available_out * (df.microtransit_local_access_time_out)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['TNC_LOC'])) * ~df.nev_local_egress_available_in * df.microtransit_local_egress_available_in * (df.microtransit_local_egress_time_in)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['TNC_PRM'])) * ~df.nev_prm_access_available_out * df.microtransit_prm_access_available_out * (df.microtransit_prm_access_time_out)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['TNC_PRM'])) * ~df.nev_prm_egress_available_in * df.microtransit_prm_egress_available_in * (df.microtransit_prm_egress_time_in)" +,_time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['TNC_MIX'])) * ~df.nev_mix_access_available_out * df.microtransit_mix_access_available_out * (df.microtransit_mix_access_time_out)" +,time_microtransit_in_vehicle,"_time_microtransit_in_vehicle + (df.trip_mode.isin(['TNC_MIX'])) * ~df.nev_mix_egress_available_in * df.microtransit_mix_egress_available_in * (df.microtransit_mix_egress_time_in)" +#,, +,_time_nev_mt_wait,0 +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode=='TNC_SHARED') * df.nev_available * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_LOC','PNR_LOC','KNR_LOC','TNC_LOC'])) * df.nev_local_access_available_in * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_LOC','PNR_LOC','KNR_LOC','TNC_LOC'])) * df.nev_local_egress_available_out * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_PRM','PNR_PRM','KNR_PRM','TNC_PRM'])) * df.nev_prm_access_available_in * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_PRM','PNR_PRM','KNR_PRM','TNC_PRM'])) * df.nev_prm_egress_available_out * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_MIX','PNR_MIX','KNR_MIX','TNC_MIX'])) * df.nev_mix_access_available_in * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_MIX','PNR_MIX','KNR_MIX','TNC_MIX'])) * df.nev_mix_egress_available_out * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_LOC'])) * df.nev_local_access_available_out * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_LOC'])) * df.nev_local_egress_available_in * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_PRM'])) * df.nev_prm_access_available_out * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_PRM'])) * df.nev_prm_egress_available_in * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_MIX'])) * df.nev_mix_access_available_out * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_MIX'])) * df.nev_mix_egress_available_in * nevWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode=='TNC_SHARED') * ~df.nev_available * df.microtransit_available * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_LOC','PNR_LOC','KNR_LOC','TNC_LOC'])) * ~df.nev_local_access_available_in * df.microtransit_local_access_available_in * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_LOC','PNR_LOC','KNR_LOC','TNC_LOC'])) * ~df.nev_local_egress_available_out * df.microtransit_local_egress_available_out * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_PRM','PNR_PRM','KNR_PRM','TNC_PRM'])) * ~df.nev_prm_access_available_in * df.microtransit_prm_access_available_in * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_PRM','PNR_PRM','KNR_PRM','TNC_PRM'])) * ~df.nev_prm_egress_available_out * df.microtransit_prm_egress_available_out * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_MIX','PNR_MIX','KNR_MIX','TNC_MIX'])) * ~df.nev_mix_access_available_in * df.microtransit_mix_access_available_in * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['WALK_MIX','PNR_MIX','KNR_MIX','TNC_MIX'])) * ~df.nev_mix_egress_available_out * df.microtransit_mix_egress_available_out * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_LOC'])) * ~df.nev_local_access_available_out * df.microtransit_local_access_available_out * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_LOC'])) * ~df.nev_local_egress_available_in * df.microtransit_local_egress_available_in * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_PRM'])) * ~df.nev_prm_access_available_out * df.microtransit_prm_access_available_out * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_PRM'])) * ~df.nev_prm_egress_available_in * df.microtransit_prm_egress_available_in * microtransitWaitTime" +,_time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_MIX'])) * ~df.nev_mix_access_available_out * df.microtransit_mix_access_available_out * microtransitWaitTime" +,time_nev_mt_wait,"_time_nev_mt_wait + (df.trip_mode.isin(['TNC_MIX'])) * ~df.nev_mix_egress_available_in * df.microtransit_mix_egress_available_in * microtransitWaitTime" +#,, +,_time_walk,0 +,_time_walk,"_time_walk + (df.trip_mode=='WALK') * od_skims['walkTime']" +,_time_walk,"_time_walk + (df.trip_mode=='EBIKE') * np.where(((~df.ebike_owner) | (~_tourEbike)),1,0) * (microRentTime + _MicroAccessTime)" +,_time_walk,"_time_walk + (df.trip_mode=='ESCOOTER') * (microRentTime + _MicroAccessTime)" +,_time_walk,"_time_walk + (df.trip_mode=='SCH_BUS') * 10" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_LOC') * ~df.nev_local_access_available_in * ~df.microtransit_local_access_available_in * _origin_local_time" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_LOC') * ~df.nev_local_egress_available_out * ~df.microtransit_local_egress_available_out * _dest_local_time" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_LOC') * odt_skims['WALK_LOC_XFERWALK']" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_PRM') * ~df.nev_prm_access_available_in * ~df.microtransit_prm_access_available_in * _origin_prm_time" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_PRM') * ~df.nev_prm_egress_available_out * ~df.microtransit_prm_egress_available_out * _dest_prm_time" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_PRM') * odt_skims['WALK_PRM_XFERWALK']" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_MIX') * ~df.nev_mix_access_available_in * ~df.microtransit_mix_access_available_in * _origin_mix_time" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_MIX') * ~df.nev_mix_egress_available_out * ~df.microtransit_mix_egress_available_out * _dest_mix_time" +,_time_walk,"_time_walk + (df.trip_mode=='WALK_MIX') * odt_skims['WALK_MIX_XFERWALK']" +,_time_walk,"_time_walk + (df.trip_mode.isin(['PNR_LOC','KNR_LOC','TNC_LOC'])) * df.outbound * ~df.nev_local_egress_available_out * ~df.microtransit_local_egress_available_out * _dest_local_time" +,_time_walk,"_time_walk + (df.trip_mode.isin(['PNR_LOC','KNR_LOC','TNC_LOC'])) * ~df.outbound * ~df.nev_local_access_available_in * ~df.microtransit_local_access_available_in * _origin_local_time" +,_time_walk,"_time_walk + (df.trip_mode=='PNR_LOC') * odt_skims['PNROUT_LOC_XFERWALK'] * df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='PNR_LOC') * odt_skims['PNRIN_LOC_XFERWALK'] * ~df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='KNR_LOC') * odt_skims['KNROUT_LOC_XFERWALK'] * df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='KNR_LOC') * odt_skims['KNRIN_LOC_XFERWALK'] * ~df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='TNC_LOC') * odt_skims['KNROUT_LOC_XFERWALK'] * df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='TNC_LOC') * odt_skims['KNRIN_LOC_XFERWALK'] * ~df.outbound" +,_time_walk,"_time_walk + (df.trip_mode.isin(['PNR_PRM','KNR_PRM','TNC_PRM'])) * df.outbound * ~df.nev_prm_egress_available_out * ~df.microtransit_prm_egress_available_out * _dest_prm_time" +,_time_walk,"_time_walk + (df.trip_mode.isin(['PNR_PRM','KNR_PRM','TNC_PRM'])) * ~df.outbound * ~df.nev_prm_access_available_in * ~df.microtransit_prm_access_available_in * _origin_prm_time" +,_time_walk,"_time_walk + (df.trip_mode=='PNR_PRM') * odt_skims['PNROUT_PRM_XFERWALK'] * df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='PNR_PRM') * odt_skims['PNRIN_PRM_XFERWALK'] * ~df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='KNR_PRM') * odt_skims['KNROUT_PRM_XFERWALK'] * df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='KNR_PRM') * odt_skims['KNRIN_PRM_XFERWALK'] * ~df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='TNC_PRM') * odt_skims['KNROUT_PRM_XFERWALK'] * df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='TNC_PRM') * odt_skims['KNRIN_PRM_XFERWALK'] * ~df.outbound" +,_time_walk,"_time_walk + (df.trip_mode.isin(['PNR_MIX','KNR_MIX','TNC_MIX'])) * df.outbound * ~df.nev_mix_egress_available_out * ~df.microtransit_mix_egress_available_out * _dest_mix_time" +,_time_walk,"_time_walk + (df.trip_mode.isin(['PNR_MIX','KNR_MIX','TNC_MIX'])) * ~df.outbound * ~df.nev_mix_access_available_in * ~df.microtransit_mix_access_available_in * _origin_mix_time" +,_time_walk,"_time_walk + (df.trip_mode=='PNR_MIX') * odt_skims['PNROUT_MIX_XFERWALK'] * df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='PNR_MIX') * odt_skims['PNRIN_MIX_XFERWALK'] * ~df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='KNR_MIX') * odt_skims['KNROUT_MIX_XFERWALK'] * df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='KNR_MIX') * odt_skims['KNRIN_MIX_XFERWALK'] * ~df.outbound" +,_time_walk,"_time_walk + (df.trip_mode=='TNC_MIX') * odt_skims['KNROUT_MIX_XFERWALK'] * df.outbound" +,time_walk,"_time_walk + (df.trip_mode=='TNC_MIX') * odt_skims['KNRIN_MIX_XFERWALK'] * ~df.outbound" #,, ,_distance_walk,0 -,_distance_walk,"_distance_walk + (df.trip_mode=='WALK') * od_skims['walkTime']/walkSpeed*60" -,_distance_walk,"(_origin_local_dist+_dest_local_dist) * np.where(df.trip_mode == 'WALK_LOC',1,0)" -,_distance_walk,"(_origin_prm_dist+_dest_prm_dist) * np.where(df.trip_mode == 'WALK_PRM',1,0)" -,_distance_walk,"(_origin_mix_dist+_dest_mix_dist) * np.where(df.trip_mode == 'WALK_MIX',1,0)" -,_distance_walk,"_distance_walk + _dest_local_dist * np.where(df.trip_mode == 'PNR_LOC',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_prm_dist * np.where(df.trip_mode == 'PNR_PRM',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_mix_dist * np.where(df.trip_mode == 'PNR_MIX',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_local_dist * np.where(df.trip_mode == 'KNR_LOC',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_prm_dist * np.where(df.trip_mode == 'KNR_PRM',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_mix_dist * np.where(df.trip_mode == 'KNR_MIX',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_local_dist * np.where(df.trip_mode == 'TNC_LOC',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_prm_dist * np.where(df.trip_mode == 'TNC_PRM',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_mix_dist * np.where(df.trip_mode == 'TNC_MIX',1,0) * np.where(df.outbound,1,0)" -,_distance_walk,"_distance_walk + _origin_local_dist * np.where(df.trip_mode == 'PNR_LOC',1,0) * np.where(~df.outbound,1,0)" -,_distance_walk,"_distance_walk + _origin_prm_dist * np.where(df.trip_mode == 'PNR_PRM',1,0) * np.where(~df.outbound,1,0)" -,_distance_walk,"_distance_walk + _origin_mix_dist * np.where(df.trip_mode == 'PNR_MIX',1,0) * np.where(~df.outbound,1,0)" -,_distance_walk,"_distance_walk + _dest_local_dist * np.where(df.trip_mode == 'KNR_LOC',1,0) * np.where(~df.outbound,1,0)" -,_distance_walk,"_distance_walk + _origin_prm_dist * np.where(df.trip_mode == 'KNR_PRM',1,0) * np.where(~df.outbound,1,0)" -,_distance_walk,"_distance_walk + _origin_mix_dist * np.where(df.trip_mode == 'KNR_MIX',1,0) * np.where(~df.outbound,1,0)" -,_distance_walk,"_distance_walk + _origin_local_dist * np.where(df.trip_mode == 'TNC_LOC',1,0) * np.where(~df.outbound,1,0)" -,_distance_walk,"_distance_walk + _origin_prm_dist * np.where(df.trip_mode == 'TNC_PRM',1,0) * np.where(~df.outbound,1,0)" -,distance_walk,"_distance_walk + _origin_mix_dist * np.where(df.trip_mode == 'TNC_MIX',1,0) * np.where(~df.outbound,1,0)" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK') * od_skims['walkTime']/60 * walkSpeed" +,_distance_walk,"_distance_walk + (df.trip_mode=='EBIKE') * np.where(((~df.ebike_owner) | (~_tourEbike)),1,0) * _MicroAccessTime/60 * walkSpeed" +,_distance_walk,"_distance_walk + (df.trip_mode=='ESCOOTER') * _MicroAccessTime/60 * walkSpeed" +,_distance_walk,"_distance_walk + (df.trip_mode=='SCH_BUS') * 10/60 * walkSpeed" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_LOC') * ~df.nev_local_access_available_in * ~df.microtransit_local_access_available_in * _origin_local_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_LOC') * ~df.nev_local_egress_available_out * ~df.microtransit_local_egress_available_out * _dest_local_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_LOC') * odt_skims['WALK_LOC_XFERWALK']/60 * walkSpeed" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_PRM') * ~df.nev_prm_access_available_in * ~df.microtransit_prm_access_available_in * _origin_prm_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_PRM') * ~df.nev_prm_egress_available_out * ~df.microtransit_prm_egress_available_out * _dest_prm_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_PRM') * odt_skims['WALK_PRM_XFERWALK']/60 * walkSpeed" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_MIX') * ~df.nev_mix_access_available_in * ~df.microtransit_mix_access_available_in * _origin_mix_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_MIX') * ~df.nev_mix_egress_available_out * ~df.microtransit_mix_egress_available_out * _dest_mix_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='WALK_MIX') * odt_skims['WALK_MIX_XFERWALK']/60 * walkSpeed" +,_distance_walk,"_distance_walk + (df.trip_mode.isin(['PNR_LOC','KNR_LOC','TNC_LOC'])) * df.outbound * ~df.nev_local_egress_available_out * ~df.microtransit_local_egress_available_out * _dest_local_dist" +,_distance_walk,"_distance_walk + (df.trip_mode.isin(['PNR_LOC','KNR_LOC','TNC_LOC'])) * ~df.outbound * ~df.nev_local_access_available_in * ~df.microtransit_local_access_available_in * _origin_local_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='PNR_LOC') * odt_skims['PNROUT_LOC_XFERWALK']/60 * walkSpeed * df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='PNR_LOC') * odt_skims['PNRIN_LOC_XFERWALK']/60 * walkSpeed * ~df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='KNR_LOC') * odt_skims['KNROUT_LOC_XFERWALK']/60 * walkSpeed * df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='KNR_LOC') * odt_skims['KNRIN_LOC_XFERWALK']/60 * walkSpeed * ~df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='TNC_LOC') * odt_skims['KNROUT_LOC_XFERWALK']/60 * walkSpeed * df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='TNC_LOC') * odt_skims['KNRIN_LOC_XFERWALK']/60 * walkSpeed * ~df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode.isin(['PNR_PRM','KNR_PRM','TNC_PRM'])) * df.outbound * ~df.nev_prm_egress_available_out * ~df.microtransit_prm_egress_available_out * _dest_prm_dist" +,_distance_walk,"_distance_walk + (df.trip_mode.isin(['PNR_PRM','KNR_PRM','TNC_PRM'])) * ~df.outbound * ~df.nev_prm_access_available_in * ~df.microtransit_prm_access_available_in * _origin_prm_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='PNR_PRM') * odt_skims['PNROUT_PRM_XFERWALK']/60 * walkSpeed * df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='PNR_PRM') * odt_skims['PNRIN_PRM_XFERWALK']/60 * walkSpeed * ~df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='KNR_PRM') * odt_skims['KNROUT_PRM_XFERWALK']/60 * walkSpeed * df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='KNR_PRM') * odt_skims['KNRIN_PRM_XFERWALK']/60 * walkSpeed * ~df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='TNC_PRM') * odt_skims['KNROUT_PRM_XFERWALK']/60 * walkSpeed * df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='TNC_PRM') * odt_skims['KNRIN_PRM_XFERWALK']/60 * walkSpeed * ~df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode.isin(['PNR_MIX','KNR_MIX','TNC_MIX'])) * df.outbound * ~df.nev_mix_egress_available_out * ~df.microtransit_mix_egress_available_out * _dest_mix_dist" +,_distance_walk,"_distance_walk + (df.trip_mode.isin(['PNR_MIX','KNR_MIX','TNC_MIX'])) * ~df.outbound * ~df.nev_mix_access_available_in * ~df.microtransit_mix_access_available_in * _origin_mix_dist" +,_distance_walk,"_distance_walk + (df.trip_mode=='PNR_MIX') * odt_skims['PNROUT_MIX_XFERWALK']/60 * walkSpeed * df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='PNR_MIX') * odt_skims['PNRIN_MIX_XFERWALK']/60 * walkSpeed * ~df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='KNR_MIX') * odt_skims['KNROUT_MIX_XFERWALK']/60 * walkSpeed * df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='KNR_MIX') * odt_skims['KNRIN_MIX_XFERWALK']/60 * walkSpeed * ~df.outbound" +,_distance_walk,"_distance_walk + (df.trip_mode=='TNC_MIX') * odt_skims['KNROUT_MIX_XFERWALK']/60 * walkSpeed * df.outbound" +,distance_walk,"_distance_walk + (df.trip_mode=='TNC_MIX') * odt_skims['KNRIN_MIX_XFERWALK']/60 * walkSpeed * ~df.outbound" #,, ,_time_mm,0 -,_time_mm,"_time_mm + df.trip_mode.isin(['EBIKE'])* od_skims['BIKE_TIME'] * bikeSpeed / ebikeSpeed" -,time_mm,"_time_mm + df.trip_mode.isin(['ESCOOTER'])*od_skims['BIKE_TIME'] * bikeSpeed / escooterSpeed" +,_time_mm,"_time_mm + df.trip_mode.isin(['EBIKE'])* df.ebike_time" +,time_mm,"_time_mm + df.trip_mode.isin(['ESCOOTER'])* df.escooter_time" ,_distance_mm,0 ,_distance_mm,"_distance_mm + df.trip_mode.isin(['EBIKE'])*od_skims['BIKE_TIME'] * (bikeSpeed/ebikeSpeed)/60 * ebikeSpeed" ,distance_mm,"_distance_mm + df.trip_mode.isin(['ESCOOTER'])*od_skims['BIKE_TIME'] * (bikeSpeed/escooterSpeed)/60 * escooterSpeed" ,_cost_fare_mm,0 -,_cost_fare_mm,"_cost_fare_mm + df.trip_mode.isin(['EBIKE'])*(microFixedCost + microVarCost*time_mm)" +,_cost_fare_mm,"_cost_fare_mm + df.trip_mode.isin(['EBIKE'])*np.where(((~df.ebike_owner) | (~_tourEbike)),1,0)*(microFixedCost + microVarCost*time_mm)" ,cost_fare_mm,"_cost_fare_mm + df.trip_mode.isin(['ESCOOTER'])*(microFixedCost + microVarCost*time_mm)" ,_distance_bike,0 ,distance_bike,"_distance_bike + df.trip_mode.isin(['BIKE'])*od_skims['BIKE_TIME']/60 * bikeSpeed" #,, -,time_wait_drive,df.totalWaitSingleTNC+df.totalWaitSharedTNC +,_time_wait_drive,0 +,_time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TAXI']) * df.origTaxiWaitTime" +,_time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TNC_SINGLE']) * df.origSingleTNCWaitTime" +,_time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TNC_SHARED']) * np.where(df.nev_available, 0, np.where(df.microtransit_available, 0, df.origSharedTNCWaitTime))" +,_time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TNC_LOC']) * np.where(df.nev_local_access_available_out, 0, np.where(df.microtransit_local_access_available_out, 0, df.origSingleTNCWaitTime)) * df.outbound" +,_time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TNC_LOC']) * np.where(df.nev_local_egress_available_in, 0, np.where(df.microtransit_local_egress_available_in, 0, df.destSingleTNCWaitTime)) * ~df.outbound" +,_time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TNC_PRM']) * np.where(df.nev_prm_access_available_out, 0, np.where(df.microtransit_prm_access_available_out, 0, df.origSingleTNCWaitTime)) * df.outbound" +,_time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TNC_PRM']) * np.where(df.nev_prm_egress_available_in, 0, np.where(df.microtransit_prm_egress_available_in, 0, df.destSingleTNCWaitTime)) * ~df.outbound" +,_time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TNC_MIX']) * np.where(df.nev_mix_access_available_out, 0, np.where(df.microtransit_mix_access_available_out, 0, df.origSingleTNCWaitTime)) * df.outbound" +,time_wait_drive,"_time_wait_drive + df.trip_mode.isin(['TNC_MIX']) * np.where(df.nev_mix_egress_available_in, 0, np.where(df.microtransit_mix_egress_available_in, 0, df.destSingleTNCWaitTime)) * ~df.outbound" \ No newline at end of file diff --git a/configs/resident/trip_mode_choice_annotate_trips_preprocessor.csv b/configs/resident/trip_mode_choice_annotate_trips_preprocessor.csv index a984107..fcc4e14 100644 --- a/configs/resident/trip_mode_choice_annotate_trips_preprocessor.csv +++ b/configs/resident/trip_mode_choice_annotate_trips_preprocessor.csv @@ -49,11 +49,11 @@ DA skim based on Transponder ownership,da_dist_skims,"(np.where(ownsTransponder= ,s2_dist_skims,(((odt_skims['HOV2_L_DIST']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV2_M_DIST']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV2_H_DIST']) * (_vot_bin_s2 == 3))) ,s2_cost_skims,(((odt_skims['HOV2_L_TOLLCOST']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV2_M_TOLLCOST']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV2_H_TOLLCOST']) * (_vot_bin_s2 == 3))) ,s2_time_skims,(((odt_skims['HOV2_L_TIME']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV2_M_TIME']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV2_H_TIME']) * (_vot_bin_s2 == 3))) -,s2_rel_skims,(((odt_skims['HOV2_L_REL']) * (_vot_bin_da == 1)) + ((odt_skims['HOV2_M_REL']) * (_vot_bin_da == 2)) + ((odt_skims['HOV2_H_REL']) * (_vot_bin_da == 3))) -,s3_dist_skims,(((odt_skims['HOV3_L_DIST']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV3_M_DIST']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV3_H_DIST']) * (_vot_bin_s2 == 3))) -,s3_cost_skims,(((odt_skims['HOV3_L_TOLLCOST']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV3_M_TOLLCOST']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV3_H_TOLLCOST']) * (_vot_bin_s2 == 3))) -,s3_time_skims,(((odt_skims['HOV3_L_TIME']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV3_M_TIME']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV3_H_TIME']) * (_vot_bin_s2 == 3))) -,s3_rel_skims,(((odt_skims['HOV3_L_REL']) * (_vot_bin_da == 1)) + ((odt_skims['HOV3_M_REL']) * (_vot_bin_da == 2)) + ((odt_skims['HOV3_H_REL']) * (_vot_bin_da == 3))) +,s2_rel_skims,(((odt_skims['HOV2_L_REL']) * (_vot_bin_s2 == 1)) + ((odt_skims['HOV2_M_REL']) * (_vot_bin_s2 == 2)) + ((odt_skims['HOV2_H_REL']) * (_vot_bin_s2 == 3))) +,s3_dist_skims,(((odt_skims['HOV3_L_DIST']) * (_vot_bin_s3 == 1)) + ((odt_skims['HOV3_M_DIST']) * (_vot_bin_s3 == 2)) + ((odt_skims['HOV3_H_DIST']) * (_vot_bin_s3 == 3))) +,s3_cost_skims,(((odt_skims['HOV3_L_TOLLCOST']) * (_vot_bin_s3 == 1)) + ((odt_skims['HOV3_M_TOLLCOST']) * (_vot_bin_s3 == 2)) + ((odt_skims['HOV3_H_TOLLCOST']) * (_vot_bin_s3 == 3))) +,s3_time_skims,(((odt_skims['HOV3_L_TIME']) * (_vot_bin_s3 == 1)) + ((odt_skims['HOV3_M_TIME']) * (_vot_bin_s3 == 2)) + ((odt_skims['HOV3_H_TIME']) * (_vot_bin_s3 == 3))) +,s3_rel_skims,(((odt_skims['HOV3_L_REL']) * (_vot_bin_s3 == 1)) + ((odt_skims['HOV3_M_REL']) * (_vot_bin_s3 == 2)) + ((odt_skims['HOV3_H_REL']) * (_vot_bin_s3 == 3))) ,walk_time_skims,od_skims['walkTime'] #,, ,inbound,~df.outbound @@ -115,11 +115,11 @@ Person is female,female,(df.sex == 2) ,auto_op_cost,"np.where(pd.isna(auto_op_cost), costPerMile, auto_op_cost)" #,, Does tour use an AV,useAV,selected_tour_vehicle.str.contains('AV') -Auto IVT Factor,autoIVTFactor,"np.where(useAV,1.0,autoIVTFactorAV)" -Auto Parking Cost Factor,autoParkingCostFactor,"np.where(useAV,1.0,autoParkingCostFactorAV)" -Auto CPM Factor,autoCPMFactor,"np.where(useAV,1.0,autoCostPerMileFactorAV)" -Auto Terminal Time Factor,autoTermTimeFactor,"np.where(useAV,1.0,autoTerminalTimeFactorAV)" -MinimumAgeDriveAlone,minimumAgeDA,"np.where(useAV,16,minAgeDriveAloneAV)" +Auto IVT Factor,autoIVTFactor,"np.where(useAV,autoIVTFactorAV,1)" +Auto Parking Cost Factor,autoParkingCostFactor,"np.where(useAV,autoParkingCostFactorAV,1)" +Auto CPM Factor,autoCPMFactor,"np.where(useAV,autoCostPerMileFactorAV,1)" +Auto Terminal Time Factor,autoTermTimeFactor,"np.where(useAV,autoTerminalTimeFactorAV,1)" +MinimumAgeDriveAlone,minimumAgeDA,"np.where(useAV,minAgeDriveAloneAV,16)" #,, Zero auto households,zeroAutoHH,"np.where(autos==0,1,0)" Auto deficient household (more adults than autos),autoDeficientHH,"np.where(autos=minimumAgeDA) * is_indiv * ,sr2_available,"np.where((tourPNR)|(tourKNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEbike)|(tourEscooter)|(df.number_of_participants>2),0,1)" ,sr3_available,"np.where((tourPNR)|(tourKNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEbike)|(tourEscooter)|(df.number_of_participants==2),0,1)" no long walks,walkAvailable,"np.where((walk_time_skims < max_walk_time),1,0) * np.where((tourPNR)|(tourKNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEbike)|(tourEscooter),0,1)" -,Escooter_available,"np.where((tourDA)|(tourS2)|(tourS3)|(tourWalk)|(tourBike)|(tourWTran)|(tourPNR)|(tourKNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEbike),0,1)" -,Ebike_available,"np.where((tourDA)|(tourS2)|(tourS3)|(tourWalk)|(tourBike)|(tourWTran)|(tourPNR)|(tourKNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEscooter),0,1)" +,Escooter_available,"(od_skims['BIKE_TIME']>0) * np.where((tourDA)|(tourS2)|(tourS3)|(tourWalk)|(tourBike)|(tourWTran)|(tourPNR)|(tourKNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEbike),0,1)" +,Ebike_available,"(od_skims['BIKE_TIME']>0) * np.where((tourDA)|(tourS2)|(tourS3)|(tourWalk)|(tourBike)|(tourWTran)|(tourPNR)|(tourKNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEscooter),0,1)" ,PNR_available,"(autos>0) * (age>15) * np.where((tourDA)|(tourS2)|(tourS3)|(tourWalk)|(tourBike)|(tourWTran)|(tourKNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEbike)|(tourEscooter),0,1)" ,KNR_available,"np.where((tourDA)|(tourS2)|(tourS3)|(tourWalk)|(tourBike)|(tourWTran)|(tourPNR)|(tourTNR)|(tourMaaS)|(tourSchBus)|(tourEbike)|(tourEscooter),0,1)" ,TNR_available,"np.where((tourDA)|(tourS2)|(tourS3)|(tourWalk)|(tourBike)|(tourWTran)|(tourPNR)|(tourKNR)|(tourMaaS)|(tourSchBus)|(tourEbike)|(tourEscooter),0,1)" @@ -212,73 +212,83 @@ no long walks,walkAvailable,"np.where((walk_time_skims < max_walk_time),1,0) * n ,knr_local_available,((df.outbound & (odt_skims['KNROUT_LOC_TOTALIVTT']>0)) | (~df.outbound & (odt_skims['KNRIN_LOC_TOTALIVTT']>0)))&(tourKNR) ,knr_premium_available,((df.outbound & (odt_skims['KNROUT_PRM_TOTALIVTT']>0)) | (~df.outbound & (odt_skims['KNRIN_PRM_TOTALIVTT']>0)))&(tourKNR) ,knr_mix_available,((df.outbound & (odt_skims['KNROUT_MIX_TOTALIVTT']>0)&(odt_skims['KNROUT_MIX_XFERS']>0)) | (~df.outbound & (odt_skims['KNRIN_MIX_TOTALIVTT']>0)&(odt_skims['KNRIN_MIX_XFERS']>0)))&(tourKNR) -,tnc_local_available,((df.outbound & (odt_skims['TNCOUT_LOC_TOTALIVTT']>0)) | (~df.outbound & (odt_skims['TNCIN_LOC_TOTALIVTT']>0)))&(tourTNR) -,tnc_premium_available,((df.outbound & (odt_skims['TNCOUT_PRM_TOTALIVTT']>0)) | (~df.outbound & (odt_skims['TNCIN_PRM_TOTALIVTT']>0)))&(tourTNR) -,tnc_mix_available,((df.outbound & (odt_skims['TNCOUT_MIX_TOTALIVTT']>0)&(odt_skims['TNCOUT_MIX_XFERS']>0)) | (~df.outbound & (odt_skims['TNCIN_MIX_TOTALIVTT']>0)&(odt_skims['TNCIN_MIX_XFERS']>0)))&(tourTNR) +,tnc_local_available,((df.outbound & (odt_skims['KNROUT_LOC_TOTALIVTT']>0)) | (~df.outbound & (odt_skims['KNRIN_LOC_TOTALIVTT']>0)))&(tourTNR) +,tnc_premium_available,((df.outbound & (odt_skims['KNROUT_PRM_TOTALIVTT']>0)) | (~df.outbound & (odt_skims['KNRIN_PRM_TOTALIVTT']>0)))&(tourTNR) +,tnc_mix_available,((df.outbound & (odt_skims['KNROUT_MIX_TOTALIVTT']>0)&(odt_skims['KNROUT_MIX_XFERS']>0)) | (~df.outbound & (odt_skims['KNRIN_MIX_TOTALIVTT']>0)&(odt_skims['KNRIN_MIX_XFERS']>0)))&(tourTNR) #access egress distances,, ,origin_local_dist,"reindex(land_use.walk_dist_local_bus, origin)" ,origin_prm_dist,"reindex(land_use.walk_dist_premium_transit, origin)" ,origin_mix_dist,"np.minimum(origin_local_dist, origin_prm_dist)" +,origin_micro_local_dist,"reindex(land_use.micro_dist_local_bus, origin)" ,origin_micro_prm_dist,"reindex(land_use.micro_dist_premium_transit, origin)" +,origin_micro_mix_dist,"np.minimum(origin_micro_local_dist, origin_micro_prm_dist)" ,dest_local_dist,"reindex(land_use.walk_dist_local_bus, destination)" ,dest_prm_dist,"reindex(land_use.walk_dist_premium_transit, destination)" ,dest_mix_dist,"np.minimum(dest_local_dist, dest_prm_dist)" +,dest_micro_local_dist,"reindex(land_use.micro_dist_local_bus, destination)" ,dest_micro_prm_dist,"reindex(land_use.micro_dist_premium_transit, destination)" +,dest_micro_mix_dist,"np.minimum(dest_micro_local_dist, dest_micro_prm_dist)" +,micro_local_dist_tncout,"odt_skims['KNROUT_LOC_ACC']/60 * driveSpeed" +,micro_local_dist_tncin,"odt_skims['KNRIN_LOC_ACC']/60 * driveSpeed" +,micro_prm_dist_tncout,"odt_skims['KNROUT_PRM_ACC']/60 * driveSpeed" +,micro_prm_dist_tncin,"odt_skims['KNRIN_PRM_ACC']/60 * driveSpeed" +,micro_mix_dist_tncout,"odt_skims['KNROUT_MIX_ACC']/60 * driveSpeed" +,micro_mix_dist_tncin,"odt_skims['KNRIN_MIX_ACC']/60 * driveSpeed" #access egress times,, -,origin_local_time,origin_local_dist * 60/walk_speed -,origin_prm_time,origin_prm_dist * 60/walk_speed -,origin_mix_time,origin_mix_dist * 60/walk_speed -,dest_local_time,dest_local_dist * 60/walk_speed -,dest_prm_time,dest_prm_dist * 60/walk_speed -,dest_mix_time,dest_mix_dist * 60/walk_speed +,origin_local_time,origin_local_dist * 60/walkSpeed +,origin_prm_time,origin_prm_dist * 60/walkSpeed +,origin_mix_time,origin_mix_dist * 60/walkSpeed +,dest_local_time,dest_local_dist * 60/walkSpeed +,dest_prm_time,dest_prm_dist * 60/walkSpeed +,dest_mix_time,dest_mix_dist * 60/walkSpeed # added for school escorting model,, Number of school children in vehicle on trip,num_escortees,df.escort_participants.fillna('').apply(lambda x: len(x.split('_')) if len(x)>0 else 0) # commuter rail constants based on commuter rail IVTT,, ,wlk_prm_cr_asc,"(-1.0) * (np.minimum(odt_skims['WALK_PRM_CMRIVTT'],60) + np.where(odt_skims['WALK_PRM_CMRIVTT']>40,(np.minimum(odt_skims['WALK_PRM_CMRIVTT'],60)-40)*0.6,0))" ,wlk_mix_cr_asc,"(-1.0) * (np.minimum(odt_skims['WALK_MIX_CMRIVTT'],60) + np.where(odt_skims['WALK_MIX_CMRIVTT']>40,(np.minimum(odt_skims['WALK_MIX_CMRIVTT'],60)-40)*0.6,0))" -,pnr_prm_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['PNROUT_PRM_CMRIVTT']>20,(odt_skims['PNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['PNROUT_PRM_CMRIVTT']>40,(odt_skims['PNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)" -,pnr_prm_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['PNRIN_PRM_CMRIVTT']>20,(odt_skims['PNRIN_PRM_CMRIVTT']-20),0)+np.where(odt_skims['PNRIN_PRM_CMRIVTT']>40,(odt_skims['PNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)" -,pnr_mix_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['PNROUT_MIX_CMRIVTT']>20,(odt_skims['PNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['PNROUT_MIX_CMRIVTT']>40,(odt_skims['PNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)" -,pnr_mix_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['PNRIN_MIX_CMRIVTT']>20,(odt_skims['PNRIN_MIX_CMRIVTT']-20),0)+np.where(odt_skims['PNRIN_MIX_CMRIVTT']>40,(odt_skims['PNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)" -,knr_prm_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['KNROUT_PRM_CMRIVTT']>20,(odt_skims['KNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_PRM_CMRIVTT']>40,(odt_skims['KNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)" -,knr_prm_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['KNRIN_PRM_CMRIVTT']>20,(odt_skims['KNRIN_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNRIN_PRM_CMRIVTT']>40,(odt_skims['KNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)" -,knr_mix_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['KNROUT_MIX_CMRIVTT']>20,(odt_skims['KNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_MIX_CMRIVTT']>40,(odt_skims['KNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)" -,knr_mix_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['KNRIN_MIX_CMRIVTT']>20,(odt_skims['KNRIN_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNRIN_MIX_CMRIVTT']>40,(odt_skims['KNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)" -,tnc_prm_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['TNCOUT_PRM_CMRIVTT']>20,(odt_skims['TNCOUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['TNCOUT_PRM_CMRIVTT']>40,(odt_skims['TNCOUT_PRM_CMRIVTT']-40)*1.5,0)),65)" -,tnc_prm_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['TNCIN_PRM_CMRIVTT']>20,(odt_skims['TNCIN_PRM_CMRIVTT']-20),0)+np.where(odt_skims['TNCIN_PRM_CMRIVTT']>40,(odt_skims['TNCIN_PRM_CMRIVTT']-40)*1.5,0)),65)" -,tnc_mix_out_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['TNCOUT_MIX_CMRIVTT']>20,(odt_skims['TNCOUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['TNCOUT_MIX_CMRIVTT']>40,(odt_skims['TNCOUT_MIX_CMRIVTT']-40)*1.5,0)),65)" -,tnc_mix_inb_cr_asc,"(-1.0) * np.minimum((15 + np.where(odt_skims['TNCIN_MIX_CMRIVTT']>20,(odt_skims['TNCIN_MIX_CMRIVTT']-20),0)+np.where(odt_skims['TNCIN_MIX_CMRIVTT']>40,(odt_skims['TNCIN_MIX_CMRIVTT']-40)*1.5,0)),65)" +,pnr_prm_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['PNROUT_PRM_CMRIVTT']>20,(odt_skims['PNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['PNROUT_PRM_CMRIVTT']>40,(odt_skims['PNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)" +,pnr_prm_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['PNRIN_PRM_CMRIVTT']>20,(odt_skims['PNRIN_PRM_CMRIVTT']-20),0)+np.where(odt_skims['PNRIN_PRM_CMRIVTT']>40,(odt_skims['PNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)" +,pnr_mix_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['PNROUT_MIX_CMRIVTT']>20,(odt_skims['PNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['PNROUT_MIX_CMRIVTT']>40,(odt_skims['PNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)" +,pnr_mix_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['PNRIN_MIX_CMRIVTT']>20,(odt_skims['PNRIN_MIX_CMRIVTT']-20),0)+np.where(odt_skims['PNRIN_MIX_CMRIVTT']>40,(odt_skims['PNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)" +,knr_prm_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNROUT_PRM_CMRIVTT']>20,(odt_skims['KNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_PRM_CMRIVTT']>40,(odt_skims['KNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)" +,knr_prm_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNRIN_PRM_CMRIVTT']>20,(odt_skims['KNRIN_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNRIN_PRM_CMRIVTT']>40,(odt_skims['KNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)" +,knr_mix_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNROUT_MIX_CMRIVTT']>20,(odt_skims['KNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_MIX_CMRIVTT']>40,(odt_skims['KNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)" +,knr_mix_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNRIN_MIX_CMRIVTT']>20,(odt_skims['KNRIN_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNRIN_MIX_CMRIVTT']>40,(odt_skims['KNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)" +,tnc_prm_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNROUT_PRM_CMRIVTT']>20,(odt_skims['KNROUT_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_PRM_CMRIVTT']>40,(odt_skims['KNROUT_PRM_CMRIVTT']-40)*1.5,0)),65)" +,tnc_prm_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNRIN_PRM_CMRIVTT']>20,(odt_skims['KNRIN_PRM_CMRIVTT']-20),0)+np.where(odt_skims['KNRIN_PRM_CMRIVTT']>40,(odt_skims['KNRIN_PRM_CMRIVTT']-40)*1.5,0)),65)" +,tnc_mix_out_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNROUT_MIX_CMRIVTT']>20,(odt_skims['KNROUT_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNROUT_MIX_CMRIVTT']>40,(odt_skims['KNROUT_MIX_CMRIVTT']-40)*1.5,0)),65)" +,tnc_mix_inb_cr_asc,"(-1.0) * np.minimum((45 + np.where(odt_skims['KNRIN_MIX_CMRIVTT']>20,(odt_skims['KNRIN_MIX_CMRIVTT']-20),0)+np.where(odt_skims['KNRIN_MIX_CMRIVTT']>40,(odt_skims['KNRIN_MIX_CMRIVTT']-40)*1.5,0)),65)" # Note: Hyperloop not implemented in ASC calculations since we arent skimming hyperloop IVTT,, ,wlk_prm_asc,"np.where(odt_skims['WALK_PRM_CMRIVTT'] > 10, wlk_prm_cr_asc,np.where(odt_skims['WALK_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['WALK_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['WALK_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" ,pnr_prm_out_asc,"np.where(odt_skims['PNROUT_PRM_CMRIVTT'] > 10, pnr_prm_out_cr_asc,np.where(odt_skims['PNROUT_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['PNROUT_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['PNROUT_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" ,pnr_prm_inb_asc,"np.where(odt_skims['PNRIN_PRM_CMRIVTT'] > 10, pnr_prm_inb_cr_asc,np.where(odt_skims['PNRIN_PRM_LRTIVTT']>0,pnr_lrt_equiv_asc,np.where(odt_skims['PNRIN_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['PNRIN_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" ,knr_prm_out_asc,"np.where(odt_skims['KNROUT_PRM_CMRIVTT'] > 10, knr_prm_out_cr_asc,np.where(odt_skims['KNROUT_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNROUT_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNROUT_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" ,knr_prm_inb_asc,"np.where(odt_skims['KNRIN_PRM_CMRIVTT'] > 10, knr_prm_inb_cr_asc,np.where(odt_skims['KNRIN_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNRIN_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNRIN_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" -,tnc_prm_out_asc,"np.where(odt_skims['TNCOUT_PRM_CMRIVTT'] > 10, tnc_prm_out_cr_asc,np.where(odt_skims['TNCOUT_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['TNCOUT_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['TNCOUT_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" -,tnc_prm_inb_asc,"np.where(odt_skims['TNCIN_PRM_CMRIVTT'] > 10, tnc_prm_inb_cr_asc,np.where(odt_skims['TNCIN_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['TNCIN_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['TNCIN_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" +,tnc_prm_out_asc,"np.where(odt_skims['KNROUT_PRM_CMRIVTT'] > 10, tnc_prm_out_cr_asc,np.where(odt_skims['KNROUT_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNROUT_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNROUT_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" +,tnc_prm_inb_asc,"np.where(odt_skims['KNRIN_PRM_CMRIVTT'] > 10, tnc_prm_inb_cr_asc,np.where(odt_skims['KNRIN_PRM_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNRIN_PRM_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNRIN_PRM_LTDEXPIVTT'] > 0, eb_equiv_asc,0))))" ,wlk_mix_max_asc,"np.where(odt_skims['WALK_MIX_CMRIVTT'] > 10, wlk_mix_cr_asc,np.where(odt_skims['WALK_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['WALK_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['WALK_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" ,pnr_mix_out_max_asc,"np.where(odt_skims['PNROUT_MIX_CMRIVTT'] > 10, pnr_mix_out_cr_asc,np.where(odt_skims['PNROUT_MIX_LRTIVTT']>0,pnr_lrt_equiv_asc,np.where(odt_skims['PNROUT_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['PNROUT_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" ,pnr_mix_inb_max_asc,"np.where(odt_skims['PNRIN_MIX_CMRIVTT'] > 10, pnr_mix_inb_cr_asc,np.where(odt_skims['PNRIN_MIX_LRTIVTT']>0,pnr_lrt_equiv_asc,np.where(odt_skims['PNRIN_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['PNRIN_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" ,knr_mix_out_max_asc,"np.where(odt_skims['KNROUT_MIX_CMRIVTT'] > 10,knr_mix_out_cr_asc,np.where(odt_skims['KNROUT_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNROUT_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNROUT_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" ,knr_mix_inb_max_asc,"np.where(odt_skims['KNRIN_MIX_CMRIVTT'] > 10, knr_mix_inb_cr_asc,np.where(odt_skims['KNRIN_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNRIN_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNRIN_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" -,tnc_mix_out_max_asc,"np.where(odt_skims['TNCOUT_MIX_CMRIVTT'] > 10, tnc_mix_out_cr_asc,np.where(odt_skims['TNCOUT_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['TNCOUT_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['TNCOUT_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" -,tnc_mix_inb_max_asc,"np.where(odt_skims['TNCIN_MIX_CMRIVTT'] > 10, tnc_mix_inb_cr_asc,np.where(odt_skims['TNCIN_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['TNCIN_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['TNCIN_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" +,tnc_mix_out_max_asc,"np.where(odt_skims['KNROUT_MIX_CMRIVTT'] > 10, tnc_mix_out_cr_asc,np.where(odt_skims['KNROUT_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNROUT_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNROUT_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" +,tnc_mix_inb_max_asc,"np.where(odt_skims['KNRIN_MIX_CMRIVTT'] > 10, tnc_mix_inb_cr_asc,np.where(odt_skims['KNRIN_MIX_LRTIVTT']>0,lrt_equiv_asc,np.where(odt_skims['KNRIN_MIX_BRTIVTT']>0,brt_equiv_asc,np.where(odt_skims['WALK_PRM_EXPIVTT']+odt_skims['KNRIN_MIX_LTDEXPIVTT']> 0, eb_equiv_asc,0))))" # reduce by 50% if bus transfer and constant is positive,, ,wlk_mix_asc,"np.where((wlk_mix_max_asc > 0) & (odt_skims['WALK_MIX_BUSIVTT'] > 0), 0.5 * wlk_mix_max_asc, wlk_mix_max_asc)" ,pnr_mix_out_asc,"np.where((pnr_mix_out_max_asc > 0) & (odt_skims['PNROUT_MIX_BUSIVTT'] > 0), 0.5 * pnr_mix_out_max_asc, pnr_mix_out_max_asc)" ,pnr_mix_inb_asc,"np.where((pnr_mix_inb_max_asc > 0) & (odt_skims['PNRIN_MIX_BUSIVTT'] > 0), 0.5 * pnr_mix_inb_max_asc, pnr_mix_inb_max_asc)" ,knr_mix_out_asc,"np.where((knr_mix_out_max_asc > 0) & (odt_skims['KNROUT_MIX_BUSIVTT'] > 0), 0.5 * knr_mix_out_max_asc, knr_mix_out_max_asc)" ,knr_mix_inb_asc,"np.where((knr_mix_inb_max_asc > 0) & (odt_skims['KNRIN_MIX_BUSIVTT'] > 0), 0.5 * knr_mix_inb_max_asc, knr_mix_inb_max_asc)" -,tnc_mix_out_asc,"np.where((tnc_mix_out_max_asc > 0) & (odt_skims['TNCOUT_MIX_BUSIVTT'] > 0), 0.5 * tnc_mix_out_max_asc, tnc_mix_out_max_asc)" -,tnc_mix_inb_asc,"np.where((tnc_mix_inb_max_asc > 0) & (odt_skims['TNCIN_MIX_BUSIVTT'] > 0), 0.5 * tnc_mix_inb_max_asc, tnc_mix_inb_max_asc)" -# reduce by 50% if transfers happen between cmr and other prm lines,,, +,tnc_mix_out_asc,"np.where((tnc_mix_out_max_asc > 0) & (odt_skims['KNROUT_MIX_BUSIVTT'] > 0), 0.5 * tnc_mix_out_max_asc, tnc_mix_out_max_asc)" +,tnc_mix_inb_asc,"np.where((tnc_mix_inb_max_asc > 0) & (odt_skims['KNRIN_MIX_BUSIVTT'] > 0), 0.5 * tnc_mix_inb_max_asc, tnc_mix_inb_max_asc)" +# reduce by 50% if transfers happen between cmr and other prm lines,, ,wlk_prm_asc,"np.where((wlk_prm_asc > 0) & (odt_skims['WALK_PRM_XFERS'] > 0), 0.5 * wlk_prm_asc, wlk_prm_asc)" ,pnr_prm_out_asc,"np.where((pnr_prm_out_asc > 0) & (odt_skims['PNROUT_PRM_XFERS'] > 0), 0.5 * pnr_prm_out_asc, pnr_prm_out_asc)" ,pnr_prm_inb_asc,"np.where((pnr_prm_inb_asc > 0) & (dot_skims['PNRIN_PRM_XFERS'] > 0), 0.5 * pnr_prm_inb_asc, pnr_prm_inb_asc)" ,knr_prm_out_asc,"np.where((knr_prm_out_asc > 0) & (odt_skims['KNROUT_PRM_XFERS'] > 0), 0.5 * knr_prm_out_asc, knr_prm_out_asc)" ,knr_prm_inb_asc,"np.where((knr_prm_inb_asc > 0) & (dot_skims['KNRIN_PRM_XFERS'] > 0), 0.5 * knr_prm_inb_asc, knr_prm_inb_asc)" -,tnc_prm_out_asc,"np.where((tnc_prm_out_asc > 0) & (odt_skims['TNCOUT_PRM_XFERS'] > 0), 0.5 * tnc_prm_out_asc, tnc_prm_out_asc)" -,tnc_prm_inb_asc,"np.where((tnc_prm_inb_asc > 0) & (dot_skims['TNCIN_PRM_XFERS'] > 0), 0.5 * tnc_prm_inb_asc, tnc_prm_inb_asc)" +,tnc_prm_out_asc,"np.where((tnc_prm_out_asc > 0) & (odt_skims['KNROUT_PRM_XFERS'] > 0), 0.5 * tnc_prm_out_asc, tnc_prm_out_asc)" +,tnc_prm_inb_asc,"np.where((tnc_prm_inb_asc > 0) & (dot_skims['KNRIN_PRM_XFERS'] > 0), 0.5 * tnc_prm_inb_asc, tnc_prm_inb_asc)" # Micromobility times,, ebike time,ebike_time,bike_time * bikeSpeed / ebikeSpeed escooter time,escooter_time,bike_time * bikeSpeed / escooterSpeed @@ -288,66 +298,120 @@ escooter max distance availability,escooterMaxDistance,(od_skims['DIST'] > escoo # Microtransit and NEV,, microtransit available at origin,microtransit_orig,"reindex(land_use.microtransit, df[orig_col_name])" microtransit available at destination,microtransit_dest,"reindex(land_use.microtransit, df[dest_col_name])" -microtransit available,microtransit_available,(microtransit_orig > 0) & (microtransit_orig == microtransit_dest) & (od_skims['DIST'] < microtransitMaxDist) -microtransit direct time,microtransit_direct_time,"np.maximum(od_skims['DIST']/microtransitSpeed*60, s2_time_skims)" +microtransit operating at time of trip,microtransit_operating,True +microtransit available,microtransit_available,(microtransit_orig > 0) & (microtransit_orig == microtransit_dest) & (s3_dist_skims < microtransitMaxDist) & microtransit_operating +microtransit direct time,microtransit_direct_time,"np.maximum(s3_dist_skims/microtransitSpeed*60, s3_time_skims)" microtransit total time,microtransit_time,"np.maximum(microtransit_direct_time + microtransitDiversionConstant, microtransitDiversionFactor*microtransit_direct_time)" nev available at origin,nev_orig,"reindex(land_use.nev, df[orig_col_name])" nev available at destination,nev_dest,"reindex(land_use.nev, df[dest_col_name])" -nev available,nev_available,(nev_orig > 0) & (nev_orig == nev_dest) & (od_skims['DIST'] < nevMaxDist) -nev direct time,nev_direct_time,"np.maximum(od_skims['DIST']/nevSpeed*60, s2_time_skims)" +nev operating at time of trip,nev_operating,True +nev available,nev_available,(nev_orig > 0) & (nev_orig == nev_dest) & (s3_dist_skims < nevMaxDist) & nev_operating +nev direct time,nev_direct_time,"np.maximum(s3_dist_skims/nevSpeed*60, s3_time_skims)" nev total time,nev_time,"np.maximum(nev_direct_time + nevDiversionConstant, nevDiversionFactor*nev_direct_time)" # Microtransit and NEV access to transit,, -outbound microtransit access available,microtransit_access_available_out,df.outbound & (microtransit_orig>0) & (origin_micro_prm_dist0) & (dest_micro_prm_dist0) & (origin_micro_prm_dist0) & (dest_micro_prm_dist0) & (micro_local_dist_tncout0) & (micro_local_dist_tncin0) & (micro_local_dist_tncout0) & (micro_local_dist_tncin0) & (micro_prm_dist_tncout0) & (micro_prm_dist_tncin0) & (micro_prm_dist_tncout0) & (micro_prm_dist_tncin0) & (micro_mix_dist_tncout0) & (micro_mix_dist_tncin0) & (micro_mix_dist_tncout0) & (micro_mix_dist_tncin0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (origin_micro_prm_dist>maxWalkIfMTAccessAvailable) & (origin_micro_prm_dist0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (origin_micro_prm_dist>maxWalkIfMTAccessAvailable) & (origin_micro_prm_dist0) & (dest_micro_local_dist>maxWalkIfMTAccessAvailable) & (dest_micro_local_dist0) & (origin_micro_local_dist>maxWalkIfMTAccessAvailable) & (origin_micro_local_dist0) & (dest_micro_local_dist>maxWalkIfMTAccessAvailable) & (dest_micro_local_dist0) & (origin_micro_local_dist>maxWalkIfMTAccessAvailable) & (origin_micro_local_dist0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (origin_micro_prm_dist>maxWalkIfMTAccessAvailable) & (origin_micro_prm_dist0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (origin_micro_prm_dist>maxWalkIfMTAccessAvailable) & (origin_micro_prm_dist0) & (dest_micro_mix_dist>maxWalkIfMTAccessAvailable) & (dest_micro_mix_dist0) & (origin_micro_mix_dist>maxWalkIfMTAccessAvailable) & (origin_micro_mix_dist0) & (dest_micro_mix_dist>maxWalkIfMTAccessAvailable) & (dest_micro_mix_dist0) & (origin_micro_mix_dist>maxWalkIfMTAccessAvailable) & (origin_micro_mix_dist -1)) * NewPrice",coef_cprice0 -util_cprice25,New Purchase Price (2017$) Segmented by Income,"((income < 50000) & (income >= 25000)) * NewPrice",coef_cprice25 -util_cprice50,New Purchase Price (2017$) Segmented by Income,"((income < 100000) & (income >=50000)) * NewPrice",coef_cprice50 -util_cprice100,New Purchase Price (2017$) Segmented by Income,"((income < 150000) & (income >= 100000)) * NewPrice",coef_cprice100 -util_cprice150,New Purchase Price (2017$) Segmented by Income,"(income > 150000) * NewPrice",coef_cprice150 -util_cpricem,New Purchase Price (2017$) Missing Income,"((income < 0) | income.isna()) * NewPrice",coef_cpricem -util_i025_age,Vehicle Age Segmented by Income,"((income < 25000) & (income > -1)) * age",coef_i025_age -util_i2550_age,Vehicle Age Segmented by Income,"((income < 50000) & (income >= 25000)) * age",coef_i2550_age -util_i100_age,Vehicle Age Segmented by Income,"((income < 150000) & (income >= 100000)) * age",coef_i100_age -util_i150p_age,Vehicle Age Segmented by Income,"((income < 150000) & (income >= 100000)) * age",coef_i150p_age -util_imiss_age,Vehicle Age Missing Income,"((income < 0) | income.isna()) * age",coef_imiss_age +util_cprice0,New Purchase Price (2017$) Segmented by Income,"((income17 < 25000) & (income17 > -1)) * (NewPrice - (fuel_type_num_coded==1)*PEV_rebate - (fuel_type_num_coded==5)*BEV_rebate)",coef_cprice0 +util_cprice25,New Purchase Price (2017$) Segmented by Income,"((income17 < 50000) & (income17 >= 25000)) * (NewPrice - (fuel_type_num_coded==1)*PEV_rebate - (fuel_type_num_coded==5)*BEV_rebate)",coef_cprice25 +util_cprice50,New Purchase Price (2017$) Segmented by Income,"((income17 < 100000) & (income17 >=50000)) * (NewPrice - (fuel_type_num_coded==1)*PEV_rebate - (fuel_type_num_coded==5)*BEV_rebate)",coef_cprice50 +util_cprice100,New Purchase Price (2017$) Segmented by Income,"((income17 < 150000) & (income17 >= 100000)) * (NewPrice - (fuel_type_num_coded==1)*PEV_rebate - (fuel_type_num_coded==5)*BEV_rebate)",coef_cprice100 +util_cprice150,New Purchase Price (2017$) Segmented by Income,"(income17 > 150000) * (NewPrice - (fuel_type_num_coded==1)*PEV_rebate - (fuel_type_num_coded==5)*BEV_rebate)",coef_cprice150 +util_cpricem,New Purchase Price (2017$) Missing Income,"((income17 < 0) | income17.isna()) * (NewPrice - (fuel_type_num_coded==1)*PEV_rebate - (fuel_type_num_coded==5)*BEV_rebate)",coef_cpricem +util_i025_age,Vehicle Age Segmented by Income,"((income17 < 25000) & (income17 > -1)) * age",coef_i025_age +util_i2550_age,Vehicle Age Segmented by Income,"((income17 < 50000) & (income17 >= 25000)) * age",coef_i2550_age +util_i100_age,Vehicle Age Segmented by Income,"((income17 < 150000) & (income17 >= 100000)) * age",coef_i100_age +util_i150p_age,Vehicle Age Segmented by Income,"((income17 < 150000) & (income17 >= 100000)) * age",coef_i150p_age +util_imiss_age,Vehicle Age Missing Income,"((income17 < 0) | income17.isna()) * age",coef_imiss_age #,household density variables,, util_den3_van,500-999 HH / sq mi Van,"((household_density < 1000) & (household_density >= 500)) & (body_type_num_coded==5)",coef_den3_van util_den4_van,1000-1999 HH / sq mi Van,"((household_density < 2000) & (household_density >= 1000)) & (body_type_num_coded==5)",coef_den4_van @@ -134,14 +134,6 @@ util_rural_mc,Household is in Rural Area - Motorcycle,"home_is_rural & (body_typ util_rural_hyb,Household is in Rural Area - Hybrid,"home_is_rural & (fuel_type_num_coded==4)",coef_rural_hyb util_rural_ev,Household is in Rural Area - Electric,"home_is_rural & ((fuel_type_num_coded==5) | (fuel_type_num_coded==1))",coef_rural_ev util_rural_age,Household is in Rural Area - Age,"home_is_rural * age",coef_rural_age -#,MSA population coefficients,, -util_smsa_van,MSA population less than 1 million - Van,"@(MSA_POP < 1000000) & (df.body_type_num_coded==5)",coef_smsa_van -util_smsa_suv,MSA population less than 1 million - SUV,"@(MSA_POP < 1000000) & (df.body_type_num_coded==4)",coef_smsa_suv -util_smsa_pu,MSA population less than 1 million - Pickup,"@(MSA_POP < 1000000) & (df.body_type_num_coded==3)",coef_smsa_pu -util_smsa_mc,MSA population less than 1 million - Motorcycle,"@(MSA_POP < 1000000) & (df.body_type_num_coded==2)",coef_smsa_mc -util_smsa_hyb,MSA population less than 1 million - Hybrid,"@(MSA_POP < 1000000) & (df.fuel_type_num_coded==4)",coef_smsa_hyb -util_smsa_ev,MSA population less than 1 million - Electric,"@(MSA_POP < 1000000) & ((df.fuel_type_num_coded==5) | (df.fuel_type_num_coded==1))",coef_smsa_ev -util_smsa_age,MSA population less than 1 million - Age,"@(MSA_POP < 1000000) * df.age",coef_smsa_age #,Region Specific Constants,, util_san_van,San Diego - Van,"@(df.SAN) & (df.body_type_num_coded==5)",coef_san_van util_san_suv,San Diego - SUV,"@(df.SAN) & (df.body_type_num_coded==4)",coef_san_suv @@ -149,4 +141,11 @@ util_san_pu,San Diego - Pickup,"@(df.SAN) & (df.body_type_num_coded==3)",coef_sa util_san_mc,San Diego - Motorcycle,"@(df.SAN) & (df.body_type_num_coded==2)",coef_san_mc util_san_hyb,San Diego - Hybrid,"@(df.SAN) & (df.fuel_type_num_coded==4)",coef_san_hyb util_san_ev,San Diego - Electric,"@(df.SAN) & ((df.fuel_type_num_coded==5) | (df.fuel_type_num_coded==1))",coef_san_ev -util_san_age,San Diego - Age,"@(df.SAN) * df.age",coef_san_age \ No newline at end of file +util_san_age,San Diego - Age,"@(df.SAN) * df.age",coef_san_age +#,EV calibration constants,, +util_calib_pev_2022,PEV calibration factor for 2022,"@(df.fuel_type_num_coded==5)*np.maximum(1 + (2022-scenarioYear)/(2035-2022), 0)",coef_calib_pev_2022 +util_calib_bev_2022,BEV calibration factor for 2022,"@(df.fuel_type_num_coded==1)*np.maximum(1 + (2022-scenarioYear)/(2035-2022), 0)",coef_calib_bev_2022 +util_calib_pev_2035,PEV calibration factor for 2035,"@(df.fuel_type_num_coded==5)*np.minimum((scenarioYear-2022)/(2035-2022), 1 + (2035-scenarioYear)/(2050-2035))",coef_calib_pev_2035 +util_calib_bev_2035,BEV calibration factor for 2035,"@(df.fuel_type_num_coded==1)*np.minimum((scenarioYear-2022)/(2035-2022), 1 + (2035-scenarioYear)/(2050-2035))",coef_calib_bev_2035 +util_calib_pev_2050,PEV calibration factor for 2050,"@(df.fuel_type_num_coded==5)*np.maximum((scenarioYear-2035)/(2050-2035), 0)",coef_calib_pev_2050 +util_calib_bev_2050,BEV calibration factor for 2050,"@(df.fuel_type_num_coded==1)*np.maximum((scenarioYear-2035)/(2050-2035), 0)",coef_calib_bev_2050 diff --git a/configs/resident/vehicle_type_choice_op4_coefficients.csv b/configs/resident/vehicle_type_choice_op4_coefficients.csv index d2fdf46..1b70509 100644 --- a/configs/resident/vehicle_type_choice_op4_coefficients.csv +++ b/configs/resident/vehicle_type_choice_op4_coefficients.csv @@ -5,7 +5,7 @@ coef_ln_nmakes,.247,F coef_mpg,0.007,F coef_crange,0.018,F coef_crangeltwk,-0.781,F -coef_ln_chpc_ev,1686.871,F +coef_ln_chpc_ev,354.347,F coef_cprice0,-0.00010,F coef_cprice25,-0.00009,F coef_cprice50,-0.00008,F @@ -188,3 +188,9 @@ coef_ohio_mc,0.140,F coef_ohio_hyb,-0.142,F coef_ohio_ev,-1.590,F coef_ohio_age,-0.008,F +coef_calib_pev_2022,0.56468,F +coef_calib_bev_2022,1.42228,F +coef_calib_pev_2035,0.86656,F +coef_calib_bev_2035,0.98343,F +coef_calib_pev_2050,0.36963,F +coef_calib_bev_2050,-0.64752,F diff --git a/configs/resident/work_from_home_coeffs.csv b/configs/resident/work_from_home_coeffs.csv index a2e2e6c..31ed2a9 100644 --- a/configs/resident/work_from_home_coeffs.csv +++ b/configs/resident/work_from_home_coeffs.csv @@ -22,7 +22,7 @@ coef_ind_manu,-0.566600437,F coef_ind_mgmt_srv,0.386847827,F coef_ind_mil,-2.257002339,F coef_external_worker_identification,-999.0,T -coef_regional_calibration,-0.82,T +coef_regional_calibration,-1.03,T coef_cbd,0.8653139314986638,F coef_central,0.45025084346579664,F coef_SSuburb,-0.4,F diff --git a/configs/resident/workplace_location_coefficients.csv b/configs/resident/workplace_location_coefficients.csv index 62a8593..26d9dcf 100644 --- a/configs/resident/workplace_location_coefficients.csv +++ b/configs/resident/workplace_location_coefficients.csv @@ -1,5 +1,5 @@ coefficient_name,value,constrain -coef_dist,0.2658,F +coef_dist,0.285,F coef_dist_sqrt,-1.604,F coef_dist_sqrd,-0.004362,F coef_dist_cubed,0.00002365,F diff --git a/configs/resident/write_trip_matrices.yaml b/configs/resident/write_trip_matrices.yaml index 109de76..7d57301 100644 --- a/configs/resident/write_trip_matrices.yaml +++ b/configs/resident/write_trip_matrices.yaml @@ -493,13 +493,4 @@ CONSTANTS: last_hour: 32 EV: first_hour: 33 - last_hour: 48 - # SHARED2 and SHARED3 Occupancies - OCC_SHARED2: 2.0 - OCC_SHARED3: 3.33 - vot_threshold_low: 8.81 - vot_threshold_med: 18.00 - # add TNC and Taxi Occupancies - OCC_TAXI: 1.1 - OCC_TNC_SINGLE: 1.2 - OCC_TNC_SHARED: 2.0 \ No newline at end of file + last_hour: 48 \ No newline at end of file diff --git a/configs/resident/write_trip_matrices_annotate_trips_preprocessor.csv b/configs/resident/write_trip_matrices_annotate_trips_preprocessor.csv index 7b9df1a..a2845ec 100644 --- a/configs/resident/write_trip_matrices_annotate_trips_preprocessor.csv +++ b/configs/resident/write_trip_matrices_annotate_trips_preprocessor.csv @@ -1,8 +1,8 @@ Description,Target,Expression # add additional fields,, ,tour_participants,trips.tour_id.map(tours.number_of_participants) +,_is_joint,(tour_participants > 1) ,distance,od_skims['DIST'] -,costOperatingDrive,"np.where(trips.trip_mode.isin(['DRIVEALONE', 'SHARED2','SHARED3']),costPerMile * distance/100, 0)" ,_sample_rate,trips.household_id.map(households.sample_rate) ,weightTrip,"np.where(trips.trip_mode == 'SHARED2', tour_participants/OCC_SHARED2, np.where(trips.trip_mode == 'SHARED3',tour_participants/OCC_SHARED3, np.where(trips.trip_mode == 'TAXI', tour_participants/OCC_TAXI, np.where(trips.trip_mode == 'TNC_SINGLE', tour_participants/OCC_TNC_SINGLE, np.where(trips.trip_mode == 'TNC_SHARED', tour_participants/OCC_TNC_SHARED, np.where(trips.trip_mode.isin(['WALK','BIKE','EBIKE','ESCOOTER']), tour_participants, 1))))))/_sample_rate" ,weightPersonTrip,tour_participants/_sample_rate @@ -23,23 +23,23 @@ Description,Target,Expression ,inbound,~trips.outbound # ea trips,, ,DRIVEALONE_NOTR_EA_LOW,((trips.trip_mode == 'DRIVEALONE') & is_ea & ~ownTrp & vot1) * tour_participants -,SHARED2_NOTR_EA_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ea * ~ownTrp * vot1 * tour_participants -,SHARED3_NOTR_EA_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ea * ~ownTrp * vot1 * tour_participants +,SHARED2_NOTR_EA_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ea * ~ownTrp * vot1 * tour_participants +,SHARED3_NOTR_EA_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ea * ~ownTrp * vot1 * tour_participants ,DRIVEALONE_TR_EA_LOW,((trips.trip_mode == 'DRIVEALONE') & is_ea & ownTrp & vot1) * tour_participants -,SHARED2_TR_EA_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ea * ownTrp * vot1 * tour_participants -,SHARED3_TR_EA_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ea * ownTrp * vot1 * tour_participants +,SHARED2_TR_EA_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ea * ownTrp * vot1 * tour_participants +,SHARED3_TR_EA_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ea * ownTrp * vot1 * tour_participants ,DRIVEALONE_NOTR_EA_MED,((trips.trip_mode == 'DRIVEALONE') & is_ea & ~ownTrp & vot2) * tour_participants -,SHARED2_NOTR_EA_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ea * ~ownTrp * vot2 * tour_participants -,SHARED3_NOTR_EA_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ea * ~ownTrp * vot2 * tour_participants +,SHARED2_NOTR_EA_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ea * ~ownTrp * vot2 * tour_participants +,SHARED3_NOTR_EA_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ea * ~ownTrp * vot2 * tour_participants ,DRIVEALONE_TR_EA_MED,((trips.trip_mode == 'DRIVEALONE') & is_ea & ownTrp & vot2) * tour_participants -,SHARED2_TR_EA_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ea * ownTrp * vot2 * tour_participants -,SHARED3_TR_EA_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ea * ownTrp * vot2 * tour_participants +,SHARED2_TR_EA_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ea * ownTrp * vot2 * tour_participants +,SHARED3_TR_EA_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ea * ownTrp * vot2 * tour_participants ,DRIVEALONE_NOTR_EA_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_ea & ~ownTrp & vot3) * tour_participants -,SHARED2_NOTR_EA_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ea * ~ownTrp * vot3 * tour_participants -,SHARED3_NOTR_EA_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ea * ~ownTrp * vot3 * tour_participants +,SHARED2_NOTR_EA_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ea * ~ownTrp * vot3 * tour_participants +,SHARED3_NOTR_EA_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ea * ~ownTrp * vot3 * tour_participants ,DRIVEALONE_TR_EA_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_ea & ownTrp & vot3) * tour_participants -,SHARED2_TR_EA_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ea * ownTrp * vot3 * tour_participants -,SHARED3_TR_EA_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ea * ownTrp * vot3 * tour_participants +,SHARED2_TR_EA_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ea * ownTrp * vot3 * tour_participants +,SHARED3_TR_EA_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ea * ownTrp * vot3 * tour_participants ,WALK_LOC_EA,((trips.trip_mode == 'WALK_LOC') & is_ea) * tour_participants ,WALK_PRM_EA,((trips.trip_mode == 'WALK_PRM') & is_ea) * tour_participants ,WALK_MIX_EA,((trips.trip_mode == 'WALK_MIX') & is_ea) * tour_participants @@ -65,23 +65,23 @@ Description,Target,Expression ,WALK_EA,((trips.trip_mode == 'WALK') & is_ea) * tour_participants # am trips,, ,DRIVEALONE_NOTR_AM_LOW,((trips.trip_mode == 'DRIVEALONE') & is_am & ~ownTrp & vot1) * tour_participants -,SHARED2_NOTR_AM_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_am * ~ownTrp * vot1 * tour_participants -,SHARED3_NOTR_AM_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_am * ~ownTrp * vot1 * tour_participants +,SHARED2_NOTR_AM_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_am * ~ownTrp * vot1 * tour_participants +,SHARED3_NOTR_AM_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_am * ~ownTrp * vot1 * tour_participants ,DRIVEALONE_TR_AM_LOW,((trips.trip_mode == 'DRIVEALONE') & is_am & ownTrp & vot1) * tour_participants -,SHARED2_TR_AM_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_am * ownTrp * vot1 * tour_participants -,SHARED3_TR_AM_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_am * ownTrp * vot1 * tour_participants +,SHARED2_TR_AM_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_am * ownTrp * vot1 * tour_participants +,SHARED3_TR_AM_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_am * ownTrp * vot1 * tour_participants ,DRIVEALONE_NOTR_AM_MED,((trips.trip_mode == 'DRIVEALONE') & is_am & ~ownTrp & vot2) * tour_participants -,SHARED2_NOTR_AM_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_am * ~ownTrp * vot2 * tour_participants -,SHARED3_NOTR_AM_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_am * ~ownTrp * vot2 * tour_participants +,SHARED2_NOTR_AM_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_am * ~ownTrp * vot2 * tour_participants +,SHARED3_NOTR_AM_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_am * ~ownTrp * vot2 * tour_participants ,DRIVEALONE_TR_AM_MED,((trips.trip_mode == 'DRIVEALONE') & is_am & ownTrp & vot2) * tour_participants -,SHARED2_TR_AM_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_am * ownTrp * vot2 * tour_participants -,SHARED3_TR_AM_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_am * ownTrp * vot2 * tour_participants +,SHARED2_TR_AM_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_am * ownTrp * vot2 * tour_participants +,SHARED3_TR_AM_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_am * ownTrp * vot2 * tour_participants ,DRIVEALONE_NOTR_AM_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_am & ~ownTrp & vot3) * tour_participants -,SHARED2_NOTR_AM_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_am * ~ownTrp * vot3 * tour_participants -,SHARED3_NOTR_AM_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_am * ~ownTrp * vot3 * tour_participants +,SHARED2_NOTR_AM_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_am * ~ownTrp * vot3 * tour_participants +,SHARED3_NOTR_AM_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_am * ~ownTrp * vot3 * tour_participants ,DRIVEALONE_TR_AM_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_am & ownTrp & vot3) * tour_participants -,SHARED2_TR_AM_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_am * ownTrp * vot3 * tour_participants -,SHARED3_TR_AM_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_am * ownTrp * vot3 * tour_participants +,SHARED2_TR_AM_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_am * ownTrp * vot3 * tour_participants +,SHARED3_TR_AM_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_am * ownTrp * vot3 * tour_participants ,WALK_LOC_AM,((trips.trip_mode == 'WALK_LOC') & is_am) * tour_participants ,WALK_PRM_AM,((trips.trip_mode == 'WALK_PRM') & is_am) * tour_participants ,WALK_MIX_AM,((trips.trip_mode == 'WALK_MIX') & is_am) * tour_participants @@ -107,23 +107,23 @@ Description,Target,Expression ,WALK_AM,((trips.trip_mode == 'WALK') & is_am) * tour_participants # md trips,, ,DRIVEALONE_NOTR_MD_LOW,((trips.trip_mode == 'DRIVEALONE') & is_md & ~ownTrp & vot1) * tour_participants -,SHARED2_NOTR_MD_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_md * ~ownTrp * vot1 * tour_participants -,SHARED3_NOTR_MD_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_md * ~ownTrp * vot1 * tour_participants +,SHARED2_NOTR_MD_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_md * ~ownTrp * vot1 * tour_participants +,SHARED3_NOTR_MD_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_md * ~ownTrp * vot1 * tour_participants ,DRIVEALONE_TR_MD_LOW,((trips.trip_mode == 'DRIVEALONE') & is_md & ownTrp & vot1) * tour_participants -,SHARED2_TR_MD_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_md * ownTrp * vot1 * tour_participants -,SHARED3_TR_MD_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_md * ownTrp * vot1 * tour_participants +,SHARED2_TR_MD_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_md * ownTrp * vot1 * tour_participants +,SHARED3_TR_MD_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_md * ownTrp * vot1 * tour_participants ,DRIVEALONE_NOTR_MD_MED,((trips.trip_mode == 'DRIVEALONE') & is_md & ~ownTrp & vot2) * tour_participants -,SHARED2_NOTR_MD_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_md * ~ownTrp * vot2 * tour_participants -,SHARED3_NOTR_MD_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_md * ~ownTrp * vot2 * tour_participants +,SHARED2_NOTR_MD_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_md * ~ownTrp * vot2 * tour_participants +,SHARED3_NOTR_MD_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_md * ~ownTrp * vot2 * tour_participants ,DRIVEALONE_TR_MD_MED,((trips.trip_mode == 'DRIVEALONE') & is_md & ownTrp & vot2) * tour_participants -,SHARED2_TR_MD_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_md * ownTrp * vot2 * tour_participants -,SHARED3_TR_MD_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_md * ownTrp * vot2 * tour_participants +,SHARED2_TR_MD_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_md * ownTrp * vot2 * tour_participants +,SHARED3_TR_MD_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_md * ownTrp * vot2 * tour_participants ,DRIVEALONE_NOTR_MD_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_md & ~ownTrp & vot3) * tour_participants -,SHARED2_NOTR_MD_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_md * ~ownTrp * vot3 * tour_participants -,SHARED3_NOTR_MD_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_md * ~ownTrp * vot3 * tour_participants +,SHARED2_NOTR_MD_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_md * ~ownTrp * vot3 * tour_participants +,SHARED3_NOTR_MD_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_md * ~ownTrp * vot3 * tour_participants ,DRIVEALONE_TR_MD_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_md & ownTrp & vot3) * tour_participants -,SHARED2_TR_MD_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_md * ownTrp * vot3 * tour_participants -,SHARED3_TR_MD_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_md * ownTrp * vot3 * tour_participants +,SHARED2_TR_MD_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_md * ownTrp * vot3 * tour_participants +,SHARED3_TR_MD_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_md * ownTrp * vot3 * tour_participants ,WALK_LOC_MD,((trips.trip_mode == 'WALK_LOC') & is_md) * tour_participants ,WALK_PRM_MD,((trips.trip_mode == 'WALK_PRM') & is_md) * tour_participants ,WALK_MIX_MD,((trips.trip_mode == 'WALK_MIX') & is_md) * tour_participants @@ -149,23 +149,23 @@ Description,Target,Expression ,WALK_MD,((trips.trip_mode == 'WALK') & is_md) * tour_participants # pm trips,, ,DRIVEALONE_NOTR_PM_LOW,((trips.trip_mode == 'DRIVEALONE') & is_pm & ~ownTrp & vot1) * tour_participants -,SHARED2_NOTR_PM_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_pm * ~ownTrp * vot1 * tour_participants -,SHARED3_NOTR_PM_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_pm * ~ownTrp * vot1 * tour_participants +,SHARED2_NOTR_PM_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_pm * ~ownTrp * vot1 * tour_participants +,SHARED3_NOTR_PM_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_pm * ~ownTrp * vot1 * tour_participants ,DRIVEALONE_TR_PM_LOW,((trips.trip_mode == 'DRIVEALONE') & is_pm & ownTrp & vot1) * tour_participants -,SHARED2_TR_PM_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_pm * ownTrp * vot1 * tour_participants -,SHARED3_TR_PM_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_pm * ownTrp * vot1 * tour_participants +,SHARED2_TR_PM_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_pm * ownTrp * vot1 * tour_participants +,SHARED3_TR_PM_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_pm * ownTrp * vot1 * tour_participants ,DRIVEALONE_NOTR_PM_MED,((trips.trip_mode == 'DRIVEALONE') & is_pm & ~ownTrp & vot2) * tour_participants -,SHARED2_NOTR_PM_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_pm * ~ownTrp * vot2 * tour_participants -,SHARED3_NOTR_PM_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_pm * ~ownTrp * vot2 * tour_participants +,SHARED2_NOTR_PM_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_pm * ~ownTrp * vot2 * tour_participants +,SHARED3_NOTR_PM_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_pm * ~ownTrp * vot2 * tour_participants ,DRIVEALONE_TR_PM_MED,((trips.trip_mode == 'DRIVEALONE') & is_pm & ownTrp & vot2) * tour_participants -,SHARED2_TR_PM_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_pm * ownTrp * vot2 * tour_participants -,SHARED3_TR_PM_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_pm * ownTrp * vot2 * tour_participants +,SHARED2_TR_PM_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_pm * ownTrp * vot2 * tour_participants +,SHARED3_TR_PM_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_pm * ownTrp * vot2 * tour_participants ,DRIVEALONE_NOTR_PM_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_pm & ~ownTrp & vot3) * tour_participants -,SHARED2_NOTR_PM_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_pm * ~ownTrp * vot3 * tour_participants -,SHARED3_NOTR_PM_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_pm * ~ownTrp * vot3 * tour_participants +,SHARED2_NOTR_PM_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_pm * ~ownTrp * vot3 * tour_participants +,SHARED3_NOTR_PM_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_pm * ~ownTrp * vot3 * tour_participants ,DRIVEALONE_TR_PM_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_pm & ownTrp & vot3) * tour_participants -,SHARED2_TR_PM_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_pm * ownTrp * vot3 * tour_participants -,SHARED3_TR_PM_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_pm * ownTrp * vot3 * tour_participants +,SHARED2_TR_PM_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_pm * ownTrp * vot3 * tour_participants +,SHARED3_TR_PM_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_pm * ownTrp * vot3 * tour_participants ,WALK_LOC_PM,((trips.trip_mode == 'WALK_LOC') & is_pm) * tour_participants ,WALK_PRM_PM,((trips.trip_mode == 'WALK_PRM') & is_pm) * tour_participants ,WALK_MIX_PM,((trips.trip_mode == 'WALK_MIX') & is_pm) * tour_participants @@ -191,23 +191,23 @@ Description,Target,Expression ,WALK_PM,((trips.trip_mode == 'WALK') & is_pm) * tour_participants # ev trips,, ,DRIVEALONE_NOTR_EV_LOW,((trips.trip_mode == 'DRIVEALONE') & is_ev & ~ownTrp & vot1) * tour_participants -,SHARED2_NOTR_EV_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ev * ~ownTrp * vot1 * tour_participants -,SHARED3_NOTR_EV_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ev * ~ownTrp * vot1 * tour_participants +,SHARED2_NOTR_EV_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ev * ~ownTrp * vot1 * tour_participants +,SHARED3_NOTR_EV_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ev * ~ownTrp * vot1 * tour_participants ,DRIVEALONE_TR_EV_LOW,((trips.trip_mode == 'DRIVEALONE') & is_ev & ownTrp & vot1) * tour_participants -,SHARED2_TR_EV_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ev * ownTrp * vot1 * tour_participants -,SHARED3_TR_EV_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ev * ownTrp * vot1 * tour_participants +,SHARED2_TR_EV_LOW,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ev * ownTrp * vot1 * tour_participants +,SHARED3_TR_EV_LOW,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ev * ownTrp * vot1 * tour_participants ,DRIVEALONE_NOTR_EV_MED,((trips.trip_mode == 'DRIVEALONE') & is_ev & ~ownTrp & vot2) * tour_participants -,SHARED2_NOTR_EV_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ev * ~ownTrp * vot2 * tour_participants -,SHARED3_NOTR_EV_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ev * ~ownTrp * vot2 * tour_participants +,SHARED2_NOTR_EV_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ev * ~ownTrp * vot2 * tour_participants +,SHARED3_NOTR_EV_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ev * ~ownTrp * vot2 * tour_participants ,DRIVEALONE_TR_EV_MED,((trips.trip_mode == 'DRIVEALONE') & is_ev & ownTrp & vot2) * tour_participants -,SHARED2_TR_EV_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ev * ownTrp * vot2 * tour_participants -,SHARED3_TR_EV_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ev * ownTrp * vot2 * tour_participants +,SHARED2_TR_EV_MED,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ev * ownTrp * vot2 * tour_participants +,SHARED3_TR_EV_MED,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ev * ownTrp * vot2 * tour_participants ,DRIVEALONE_NOTR_EV_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_ev & ~ownTrp & vot3) * tour_participants -,SHARED2_NOTR_EV_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ev * ~ownTrp * vot3 * tour_participants -,SHARED3_NOTR_EV_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ev * ~ownTrp * vot3 * tour_participants +,SHARED2_NOTR_EV_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ev * ~ownTrp * vot3 * tour_participants +,SHARED3_NOTR_EV_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ev * ~ownTrp * vot3 * tour_participants ,DRIVEALONE_TR_EV_HIGH,((trips.trip_mode == 'DRIVEALONE') & is_ev & ownTrp & vot3) * tour_participants -,SHARED2_TR_EV_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2+trips.trip_mode.isin(['TAXI'])/OCC_TAXI+trips.trip_mode.isin(['TNC_SINGLE'])/OCC_TNC_SINGLE)* is_ev * ownTrp * vot3 * tour_participants -,SHARED3_TR_EV_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3+trips.trip_mode.isin(['TNC_SHARED'])/OCC_TNC_SHARED)* is_ev * ownTrp * vot3 * tour_participants +,SHARED2_TR_EV_HIGH,(trips.trip_mode.isin(['SHARED2'])/OCC_SHARED2)* is_ev * ownTrp * vot3 * tour_participants +,SHARED3_TR_EV_HIGH,(trips.trip_mode.isin(['SHARED3'])/OCC_SHARED3)* is_ev * ownTrp * vot3 * tour_participants ,WALK_LOC_EV,((trips.trip_mode == 'WALK_LOC') & is_ev) * tour_participants ,WALK_PRM_EV,((trips.trip_mode == 'WALK_PRM') & is_ev) * tour_participants ,WALK_MIX_EV,((trips.trip_mode == 'WALK_MIX') & is_ev) * tour_participants @@ -234,43 +234,46 @@ Description,Target,Expression #auto skims,, ,_timeDrive,"odt_skims['SOV_NT_L_TIME'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot1),1,0)" ,_timeDrive,"_timeDrive + odt_skims['SOV_TR_L_TIME'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot1),1,0)" -,_timeDrive,"_timeDrive + odt_skims['HOV2_L_TIME'] * np.where(((trips.trip_mode == 'SHARED2') & vot1),1,0)" +,_timeDrive,"_timeDrive + odt_skims['HOV2_L_TIME'] * np.where(((trips.trip_mode.isin(['SHARED2','TAXI','TNC_SINGLE'])) & vot1),1,0)" ,_timeDrive,"_timeDrive + odt_skims['HOV3_L_TIME'] * np.where(((trips.trip_mode == 'SHARED3') & vot1),1,0)" +,_timeDrive,"_timeDrive + odt_skims['HOV3_L_TIME'] * np.where(((trips.trip_mode == 'TNC_SHARED') & vot1 & ~trips.nev_available & ~trips.microtransit_available),1,0)" ,_timeDrive,"_timeDrive + odt_skims['SOV_NT_M_TIME'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot2),1,0)" ,_timeDrive,"_timeDrive + odt_skims['SOV_TR_M_TIME'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot2),1,0)" -,_timeDrive,"_timeDrive + odt_skims['HOV2_M_TIME'] * np.where(((trips.trip_mode == 'SHARED2') & vot2),1,0)" -#,_timeDrive,"_timeDrive + (odt_skims['HOV2_M_TIME'] + _TAXI_WAIT_TIME) * np.where((trips.trip_mode == 'TAXI'),1,0)" -#,_timeDrive,"_timeDrive + (odt_skims['HOV2_M_TIME'] + _SINGLE_TNC_WAIT_TIME) * np.where((trips.trip_mode == 'TNC_SINGLE'),1,0)" +,_timeDrive,"_timeDrive + odt_skims['HOV2_M_TIME'] * np.where(((trips.trip_mode.isin(['SHARED2','TAXI','TNC_SINGLE'])) & vot2),1,0)" ,_timeDrive,"_timeDrive + odt_skims['HOV3_M_TIME'] * np.where(((trips.trip_mode == 'SHARED3') & vot2),1,0)" -#,_timeDrive,"_timeDrive + (odt_skims['HOV3_M_TIME'] + _SHARED_TNC_WAIT_TIME) * np.where((trips.trip_mode == 'TNC_SHARED'),1,0) * _TNC_SHARED_IVT_FACTOR" +,_timeDrive,"_timeDrive + odt_skims['HOV3_M_TIME'] * TNC_shared_IVTFactor * np.where(((trips.trip_mode == 'TNC_SHARED') & vot2 & ~trips.nev_available & ~trips.microtransit_available),1,0)" ,_timeDrive,"_timeDrive + odt_skims['SOV_NT_H_TIME'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot3),1,0)" ,_timeDrive,"_timeDrive + odt_skims['SOV_TR_H_TIME'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot3),1,0)" -,_timeDrive,"_timeDrive + odt_skims['HOV2_H_TIME'] * np.where(((trips.trip_mode == 'SHARED2') & vot3),1,0)" -,timeDrive,"_timeDrive + odt_skims['HOV3_H_TIME'] * np.where(((trips.trip_mode == 'SHARED3') & vot3),1,0)" +,_timeDrive,"_timeDrive + odt_skims['HOV2_H_TIME'] * np.where(((trips.trip_mode.isin(['SHARED2','TAXI','TNC_SINGLE'])) & vot3),1,0)" +,_timeDrive,"_timeDrive + odt_skims['HOV3_H_TIME'] * np.where(((trips.trip_mode == 'SHARED3') & vot3),1,0)" +,timeDrive,"_timeDrive + odt_skims['HOV3_H_TIME'] * TNC_shared_IVTFactor * np.where(((trips.trip_mode == 'TNC_SHARED') & vot3 & ~trips.nev_available & ~trips.microtransit_available),1,0)" ,_distanceDrive,"odt_skims['SOV_NT_L_DIST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot1),1,0)" ,_distanceDrive,"_distanceDrive + odt_skims['SOV_TR_L_DIST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot1),1,0)" -,_distanceDrive,"_distanceDrive + odt_skims['HOV2_L_DIST'] * np.where(((trips.trip_mode == 'SHARED2') & vot1),1,0)" +,_distanceDrive,"_distanceDrive + odt_skims['HOV2_L_DIST'] * np.where(((trips.trip_mode.isin(['SHARED2','TAXI','TNC_SINGLE'])) & vot1),1,0)" ,_distanceDrive,"_distanceDrive + odt_skims['HOV3_L_DIST'] * np.where(((trips.trip_mode == 'SHARED3') & vot1),1,0)" +,_distanceDrive,"_distanceDrive + odt_skims['HOV3_L_DIST'] * np.where(((trips.trip_mode == 'TNC_SHARED') & vot1 & ~trips.nev_available & ~trips.microtransit_available),1,0)" ,_distanceDrive,"_distanceDrive + odt_skims['SOV_NT_M_DIST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot2),1,0)" ,_distanceDrive,"_distanceDrive + odt_skims['SOV_TR_M_DIST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot2),1,0)" -,_distanceDrive,"_distanceDrive + odt_skims['HOV2_M_DIST'] * np.where(((trips.trip_mode == 'SHARED2') & vot2),1,0)" +,_distanceDrive,"_distanceDrive + odt_skims['HOV2_M_DIST'] * np.where(((trips.trip_mode.isin(['SHARED2','TAXI','TNC_SINGLE'])) & vot2),1,0)" ,_distanceDrive,"_distanceDrive + odt_skims['HOV3_M_DIST'] * np.where(((trips.trip_mode == 'SHARED3') & vot2),1,0)" +,_distanceDrive,"_distanceDrive + odt_skims['HOV3_M_DIST'] * TNC_shared_IVTFactor * np.where(((trips.trip_mode == 'TNC_SHARED') & vot2 & ~trips.nev_available & ~trips.microtransit_available),1,0)" ,_distanceDrive,"_distanceDrive + odt_skims['SOV_NT_H_DIST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot3),1,0)" ,_distanceDrive,"_distanceDrive + odt_skims['SOV_TR_H_DIST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot3),1,0)" -,_distanceDrive,"_distanceDrive + odt_skims['HOV2_H_DIST'] * np.where(((trips.trip_mode == 'SHARED2') & vot3),1,0)" -,distanceDrive,"_distanceDrive + odt_skims['HOV3_H_DIST'] * np.where(((trips.trip_mode == 'SHARED3') & vot3),1,0)" +,_distanceDrive,"_distanceDrive + odt_skims['HOV2_H_DIST'] * np.where(((trips.trip_mode.isin(['SHARED2','TAXI','TNC_SINGLE'])) & vot3),1,0)" +,_distanceDrive,"_distanceDrive + odt_skims['HOV3_H_DIST'] * np.where(((trips.trip_mode == 'SHARED3') & vot3),1,0)" +,distanceDrive,"_distanceDrive + odt_skims['HOV3_H_DIST'] * TNC_shared_IVTFactor * np.where(((trips.trip_mode == 'TNC_SHARED') & vot3 & ~trips.nev_available & ~trips.microtransit_available),1,0)" ,_costTollDrive,"odt_skims['SOV_NT_L_TOLLCOST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot1),1,0)" ,_costTollDrive,"_costTollDrive + odt_skims['SOV_TR_L_TOLLCOST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot1),1,0)" -,_costTollDrive,"_costTollDrive + odt_skims['HOV2_L_TOLLCOST'] * np.where(((trips.trip_mode == 'SHARED2') & vot1),1,0)" -,_costTollDrive,"_costTollDrive + odt_skims['HOV3_L_TOLLCOST'] * np.where(((trips.trip_mode == 'SHARED3') & vot1),1,0)" +,_costTollDrive,"_costTollDrive + (odt_skims['HOV2_L_TOLLCOST'] / np.where(_is_joint,tour_participants,OCC_SHARED2)) * np.where(((trips.trip_mode == 'SHARED2') & vot1),1,0)" +,_costTollDrive,"_costTollDrive + (odt_skims['HOV3_L_TOLLCOST'] / np.where(_is_joint,tour_participants,OCC_SHARED3)) * np.where(((trips.trip_mode == 'SHARED3') & vot1),1,0)" ,_costTollDrive,"_costTollDrive + odt_skims['SOV_NT_M_TOLLCOST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot2),1,0)" ,_costTollDrive,"_costTollDrive + odt_skims['SOV_TR_M_TOLLCOST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot2),1,0)" -,_costTollDrive,"_costTollDrive + odt_skims['HOV2_M_TOLLCOST'] * np.where(((trips.trip_mode == 'SHARED2') & vot2),1,0)" -,_costTollDrive,"_costTollDrive + odt_skims['HOV3_M_TOLLCOST'] * np.where(((trips.trip_mode == 'SHARED3') & vot2),1,0)" +,_costTollDrive,"_costTollDrive + (odt_skims['HOV2_M_TOLLCOST'] / np.where(_is_joint,tour_participants,OCC_SHARED2)) * np.where(((trips.trip_mode == 'SHARED2') & vot2),1,0)" +,_costTollDrive,"_costTollDrive + (odt_skims['HOV3_M_TOLLCOST'] / np.where(_is_joint,tour_participants,OCC_SHARED3)) * np.where(((trips.trip_mode == 'SHARED3') & vot2),1,0)" ,_costTollDrive,"_costTollDrive + odt_skims['SOV_NT_H_TOLLCOST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ~ownTrp & vot3),1,0)" ,_costTollDrive,"_costTollDrive + odt_skims['SOV_TR_H_TOLLCOST'] * np.where(((trips.trip_mode == 'DRIVEALONE') & ownTrp & vot3),1,0)" -,_costTollDrive,"_costTollDrive + odt_skims['HOV2_H_TOLLCOST'] * np.where(((trips.trip_mode == 'SHARED2') & vot3),1,0)" -,costTollDrive,"_costTollDrive + odt_skims['HOV3_H_TOLLCOST'] * np.where(((trips.trip_mode == 'SHARED3') & vot3),1,0)" +,_costTollDrive,"_costTollDrive + (odt_skims['HOV2_H_TOLLCOST'] / np.where(_is_joint,tour_participants,OCC_SHARED2)) * np.where(((trips.trip_mode == 'SHARED2') & vot3),1,0)" +,costTollDrive,"_costTollDrive + (odt_skims['HOV3_H_TOLLCOST'] / np.where(_is_joint,tour_participants,OCC_SHARED3)) * np.where(((trips.trip_mode == 'SHARED3') & vot3),1,0)" #transit skims,, ,_timeTransitInVehicle,"odt_skims['WALK_LOC_TOTALIVTT'] * np.where(trips.trip_mode == 'WALK_LOC',1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['WALK_PRM_TOTALIVTT'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" @@ -281,18 +284,19 @@ Description,Target,Expression ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNROUT_LOC_TOTALIVTT'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(trips.outbound,1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNROUT_PRM_TOTALIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNROUT_MIX_TOTALIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['TNCOUT_LOC_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" -,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['TNCOUT_PRM_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['TNCOUT_MIX_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNROUT_LOC_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" +,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNROUT_PRM_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNROUT_MIX_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['PNRIN_LOC_TOTALIVTT'] * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['PNRIN_PRM_TOTALIVTT'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['PNRIN_MIX_TOTALIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNRIN_LOC_TOTALIVTT'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNRIN_PRM_TOTALIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNRIN_MIX_TOTALIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['TNCIN_LOC_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" -,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['TNCIN_PRM_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['TNCIN_MIX_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNRIN_LOC_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" +,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNRIN_PRM_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,_timeTransitInVehicle,"_timeTransitInVehicle + odt_skims['KNRIN_MIX_TOTALIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,timeTransitInVehicle,"_timeTransitInVehicle + trips.time_nev_in_vehicle + trips.time_microtransit_in_vehicle + trips.time_sch_bus_in_vehicle" #,, ,_timeRapidTransitInVehicle,"odt_skims['WALK_PRM_BRTIVTT'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" ,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['WALK_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'WALK_MIX',1,0)" @@ -300,14 +304,14 @@ Description,Target,Expression ,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['PNROUT_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['KNROUT_PRM_BRTIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" ,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['KNROUT_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['TNCOUT_PRM_BRTIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['TNCOUT_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['KNROUT_PRM_BRTIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['KNROUT_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['PNRIN_PRM_BRTIVTT'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['PNRIN_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['KNRIN_PRM_BRTIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['KNRIN_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['TNCIN_PRM_BRTIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['TNCIN_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['KNRIN_PRM_BRTIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,timeRapidTransitInVehicle,"_timeRapidTransitInVehicle + odt_skims['KNRIN_MIX_BRTIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" #,, ,_timeExpressBusTransitInVehicle,"odt_skims['WALK_PRM_EXPIVTT'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" ,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['WALK_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'WALK_MIX',1,0)" @@ -315,14 +319,14 @@ Description,Target,Expression ,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['PNROUT_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['KNROUT_PRM_EXPIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" ,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['KNROUT_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['TNCOUT_PRM_EXPIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['TNCOUT_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['KNROUT_PRM_EXPIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['KNROUT_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['PNRIN_PRM_EXPIVTT'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['PNRIN_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['KNRIN_PRM_EXPIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['KNRIN_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['TNCIN_PRM_EXPIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['TNCIN_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['KNRIN_PRM_EXPIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,timeExpressBusTransitInVehicle,"_timeExpressBusTransitInVehicle + odt_skims['KNRIN_MIX_EXPIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" #,, ,_timeLocalBusTransitInVehicle,"odt_skims['WALK_LOC_BUSIVTT'] * np.where(trips.trip_mode == 'WALK_LOC',1,0)" ,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['WALK_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'WALK_MIX',1,0)" @@ -330,14 +334,14 @@ Description,Target,Expression ,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['PNROUT_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['KNROUT_LOC_BUSIVTT'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(trips.outbound,1,0)" ,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['KNROUT_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['TNCOUT_LOC_BUSIVTT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" -,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['TNCOUT_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['KNROUT_LOC_BUSIVTT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" +,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['KNROUT_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['PNRIN_LOC_BUSIVTT'] * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['PNRIN_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['KNRIN_LOC_BUSIVTT'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['KNRIN_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['TNCIN_LOC_BUSIVTT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" -,timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['TNCIN_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['KNRIN_LOC_BUSIVTT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" +,timeLocalBusTransitInVehicle,"_timeLocalBusTransitInVehicle + odt_skims['KNRIN_MIX_BUSIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" #,, ,_timeLightRailTransitInVehicle,"odt_skims['WALK_PRM_LRTIVTT'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" ,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['WALK_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'WALK_MIX',1,0)" @@ -345,14 +349,14 @@ Description,Target,Expression ,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['PNROUT_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['KNROUT_PRM_LRTIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" ,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['KNROUT_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['TNCOUT_PRM_LRTIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['TNCOUT_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['KNROUT_PRM_LRTIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['KNROUT_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['PNRIN_PRM_LRTIVTT'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['PNRIN_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['KNRIN_PRM_LRTIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['KNRIN_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['TNCIN_PRM_LRTIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['TNCIN_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['KNRIN_PRM_LRTIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,timeLightRailTransitInVehicle,"_timeLightRailTransitInVehicle + odt_skims['KNRIN_MIX_LRTIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" #,, ,_timeCommuterRailTransitInVehicle,"odt_skims['WALK_PRM_CMRIVTT'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" ,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['WALK_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'WALK_MIX',1,0)" @@ -360,14 +364,14 @@ Description,Target,Expression ,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['PNROUT_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['KNROUT_PRM_CMRIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" ,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['KNROUT_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['TNCOUT_PRM_CMRIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['TNCOUT_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['KNROUT_PRM_CMRIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['KNROUT_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['PNRIN_PRM_CMRIVTT'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['PNRIN_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['KNRIN_PRM_CMRIVTT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['KNRIN_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['TNCIN_PRM_CMRIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['TNCIN_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['KNRIN_PRM_CMRIVTT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,timeCommuterRailTransitInVehicle,"_timeCommuterRailTransitInVehicle + odt_skims['KNRIN_MIX_CMRIVTT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" #,, ,_timeTransitInitialWait,"odt_skims['WALK_LOC_FIRSTWAIT'] * np.where(trips.trip_mode == 'WALK_LOC',1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['WALK_PRM_FIRSTWAIT'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" @@ -378,40 +382,41 @@ Description,Target,Expression ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNROUT_LOC_FIRSTWAIT'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(trips.outbound,1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNROUT_PRM_FIRSTWAIT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNROUT_MIX_FIRSTWAIT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['TNCOUT_LOC_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" -,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['TNCOUT_PRM_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['TNCOUT_MIX_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNROUT_LOC_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" +,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNROUT_PRM_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNROUT_MIX_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['PNRIN_LOC_FIRSTWAIT'] * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['PNRIN_PRM_FIRSTWAIT'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['PNRIN_MIX_FIRSTWAIT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNRIN_LOC_FIRSTWAIT'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNRIN_PRM_FIRSTWAIT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNRIN_MIX_FIRSTWAIT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['TNCIN_LOC_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" -,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['TNCIN_PRM_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['TNCIN_MIX_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNRIN_LOC_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" +,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNRIN_PRM_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,_timeTransitInitialWait,"_timeTransitInitialWait + odt_skims['KNRIN_MIX_FIRSTWAIT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" #,, -,_costFareTransit,"odt_skims['WALK_LOC_FARE'] * np.where(trips.trip_mode == 'WALK_LOC',1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['WALK_PRM_FARE'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['WALK_MIX_FARE'] * np.where(trips.trip_mode == 'WALK_MIX',1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['PNROUT_LOC_FARE'] * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['PNROUT_PRM_FARE'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['PNROUT_MIX_FARE'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['KNROUT_LOC_FARE'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['KNROUT_PRM_FARE'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['KNROUT_MIX_FARE'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['TNCOUT_LOC_FARE'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['TNCOUT_PRM_FARE'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['TNCOUT_MIX_FARE'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['PNRIN_LOC_FARE'] * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(~trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['PNRIN_PRM_FARE'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['PNRIN_MIX_FARE'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['KNRIN_LOC_FARE'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(~trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['KNRIN_PRM_FARE'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['KNRIN_MIX_FARE'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['TNCIN_LOC_FARE'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" -,_costFareTransit,"_costFareTransit + odt_skims['TNCIN_PRM_FARE'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,costFareTransit,"_costFareTransit + odt_skims['TNCIN_MIX_FARE'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"df.transitSubsidyPassDiscount*(odt_skims['WALK_LOC_FARE'])*100 * np.where(trips.trip_mode == 'WALK_LOC',1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*odt_skims['WALK_PRM_FARE']*100 * np.where(trips.trip_mode == 'WALK_PRM',1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['WALK_MIX_FARE'])*100 * np.where(trips.trip_mode == 'WALK_MIX',1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['PNROUT_LOC_FARE'])*100 * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['PNROUT_PRM_FARE'])*100 * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['PNROUT_MIX_FARE'])*100 * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNROUT_LOC_FARE'])*100 * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'])*100 * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNROUT_MIX_FARE'])*100 * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNROUT_LOC_FARE'])*100 * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNROUT_PRM_FARE'])*100 * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNROUT_MIX_FARE'])*100 * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['PNRIN_LOC_FARE'])*100 * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['PNRIN_PRM_FARE'])*100 * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['PNRIN_MIX_FARE'])*100 * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNRIN_LOC_FARE'])*100 * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNRIN_PRM_FARE'])*100 * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNRIN_MIX_FARE'])*100 * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNRIN_LOC_FARE'])*100 * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNRIN_PRM_FARE'])*100 * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,_costFareTransit,"_costFareTransit + df.transitSubsidyPassDiscount*(odt_skims['KNRIN_MIX_FARE'])*100 * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,costFareTransit,"_costFareTransit + np.where(df.nev_available, nevCost, np.where(df.microtransit_available, microtransitCost, 0)) * np.where(trips.trip_mode == 'TNC_SHARED',1,0)" #,, ,_transfersTransit,"odt_skims['WALK_LOC_XFERS'] * np.where(trips.trip_mode == 'WALK_LOC',1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['WALK_PRM_XFERS'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" @@ -422,26 +427,23 @@ Description,Target,Expression ,_transfersTransit,"_transfersTransit + odt_skims['KNROUT_LOC_XFERS'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(trips.outbound,1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['KNROUT_PRM_XFERS'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['KNROUT_MIX_XFERS'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_transfersTransit,"_transfersTransit + odt_skims['TNCOUT_LOC_XFERS'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" -,_transfersTransit,"_transfersTransit + odt_skims['TNCOUT_PRM_XFERS'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_transfersTransit,"_transfersTransit + odt_skims['TNCOUT_MIX_XFERS'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_transfersTransit,"_transfersTransit + odt_skims['KNROUT_LOC_XFERS'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" +,_transfersTransit,"_transfersTransit + odt_skims['KNROUT_PRM_XFERS'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_transfersTransit,"_transfersTransit + odt_skims['KNROUT_MIX_XFERS'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['PNRIN_LOC_XFERS'] * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['PNRIN_PRM_XFERS'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['PNRIN_MIX_XFERS'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['KNRIN_LOC_XFERS'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['KNRIN_PRM_XFERS'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_transfersTransit,"_transfersTransit + odt_skims['KNRIN_MIX_XFERS'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_transfersTransit,"_transfersTransit + odt_skims['TNCIN_LOC_XFERS'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" -,_transfersTransit,"_transfersTransit + odt_skims['TNCIN_PRM_XFERS'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,transfersTransit,"_transfersTransit + odt_skims['TNCIN_MIX_XFERS'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_transfersTransit,"_transfersTransit + odt_skims['KNRIN_LOC_XFERS'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" +,_transfersTransit,"_transfersTransit + odt_skims['KNRIN_PRM_XFERS'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,transfersTransit,"_transfersTransit + odt_skims['KNRIN_MIX_XFERS'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" #bikeskim,, ,timeBike,"od_skims['BIKE_TIME'] * np.where(trips.trip_mode == 'BIKE',1,0)" -,timeWalk,"od_skims['walkTime'] * np.where(trips.trip_mode == 'WALK',1,0)" -# totals,, -,cost_total, costOperatingDrive + costTollDrive + costFareTransit -,time_total, timeDrive + timeBike + timeWalk + timeTransitInitialWait + timeTransitInVehicle + transfersTransit #,, -,_time_transit_wait,"odt_skims['WALK_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'WALK_LOC',1,0)" +,_time_transit_wait,"_timeTransitInitialWait" +,_time_transit_wait,"_time_transit_wait + odt_skims['WALK_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'WALK_LOC',1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['WALK_PRM_XFERWAIT'] * np.where(trips.trip_mode == 'WALK_PRM',1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['WALK_MIX_XFERWAIT'] * np.where(trips.trip_mode == 'WALK_MIX',1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['PNROUT_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(trips.outbound,1,0)" @@ -450,41 +452,26 @@ Description,Target,Expression ,_time_transit_wait,"_time_transit_wait + odt_skims['KNROUT_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(trips.outbound,1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['KNROUT_PRM_XFERWAIT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(trips.outbound,1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['KNROUT_MIX_XFERWAIT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(trips.outbound,1,0)" -,_time_transit_wait,"_time_transit_wait + odt_skims['TNCOUT_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" -,_time_transit_wait,"_time_transit_wait + odt_skims['TNCOUT_PRM_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" -,_time_transit_wait,"_time_transit_wait + odt_skims['TNCOUT_MIX_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" +,_time_transit_wait,"_time_transit_wait + odt_skims['KNROUT_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(trips.outbound,1,0)" +,_time_transit_wait,"_time_transit_wait + odt_skims['KNROUT_PRM_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(trips.outbound,1,0)" +,_time_transit_wait,"_time_transit_wait + odt_skims['KNROUT_MIX_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(trips.outbound,1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['PNRIN_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'PNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['PNRIN_PRM_XFERWAIT'] * np.where(trips.trip_mode == 'PNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['PNRIN_MIX_XFERWAIT'] * np.where(trips.trip_mode == 'PNR_MIX',1,0) * np.where(~trips.outbound,1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['KNRIN_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'KNR_LOC',1,0) * np.where(~trips.outbound,1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['KNRIN_PRM_XFERWAIT'] * np.where(trips.trip_mode == 'KNR_PRM',1,0) * np.where(~trips.outbound,1,0)" ,_time_transit_wait,"_time_transit_wait + odt_skims['KNRIN_MIX_XFERWAIT'] * np.where(trips.trip_mode == 'KNR_MIX',1,0) * np.where(~trips.outbound,1,0)" -,_time_transit_wait,"_time_transit_wait + odt_skims['TNCIN_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" -,_time_transit_wait,"_time_transit_wait + odt_skims['TNCIN_PRM_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" -,time_transit_wait,"_time_transit_wait + odt_skims['TNCIN_MIX_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_time_transit_wait,"_time_transit_wait + odt_skims['KNRIN_LOC_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_LOC',1,0) * np.where(~trips.outbound,1,0)" +,_time_transit_wait,"_time_transit_wait + odt_skims['KNRIN_PRM_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_PRM',1,0) * np.where(~trips.outbound,1,0)" +,_time_transit_wait,"_time_transit_wait + odt_skims['KNRIN_MIX_XFERWAIT'] * np.where(trips.trip_mode == 'TNC_MIX',1,0) * np.where(~trips.outbound,1,0)" +,_time_transit_wait,"_time_transit_wait + 10 * np.where(trips.trip_mode == 'SCH_BUS',1,0)" +,time_transit_wait,"_time_transit_wait + trips.time_nev_mt_wait" #,, -,time_total,timeDrive+timeBike+timeWalk+timeTransitInitialWait+timeTransitInVehicle+time_transit_wait+df.time_mm+df.time_wait_drive -,cost_total,costOperatingDrive+costTollDrive+costFareTransit+df.cost_parking+df.cost_fare_drive+df.cost_fare_mm +,time_total,df.time_walk + timeBike + df.time_mm + timeDrive + df.time_wait_drive + df.time_transit_drive + time_transit_wait + timeTransitInVehicle + df.time_drive_terminal +,cost_total,df.costOperatingDrive+costTollDrive+costFareTransit+df.cost_parking+df.cost_fare_drive+df.cost_fare_mm #,, ,value_of_time_category_id,"np.where(vot1,1,np.where(vot2,2,3))" #,, -,origin_micro_prm_dist,"reindex(land_use.micro_dist_premium_transit, trips.origin)" -,dest_micro_prm_dist,"reindex(land_use.micro_dist_premium_transit, trips.destination)" -microtransit available at origin,microtransit_orig,"reindex(land_use.microtransit, trips.origin)" -microtransit available at destination,microtransit_dest,"reindex(land_use.microtransit, trips.destination)" -microtransit available,microtransit_available,(microtransit_orig > 0) & (microtransit_orig == microtransit_dest) & (od_skims['DIST'] < microtransitMaxDist) -nev available at origin,nev_orig,"reindex(land_use.nev, trips.origin)" -nev available at destination,nev_dest,"reindex(land_use.nev, trips.destination)" -nev available,nev_available,(nev_orig > 0) & (nev_orig == nev_dest) & (od_skims['DIST'] < nevMaxDist) -outbound microtransit access available,microtransit_access_available_out,trips.outbound & (microtransit_orig>0) & (origin_micro_prm_dist0) & (origin_micro_prm_dist0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (dest_micro_prm_dist>maxWalkIfMTAccessAvailable) & (dest_micro_prm_dist0) & (origin_micro_prm_dist>maxWalkIfMTAccessAvailable) & (origin_micro_prm_dist0) & (origin_micro_prm_dist>maxWalkIfMTAccessAvailable) & (origin_micro_prm_dist0) & (dest_micro_prm_dist0) & (dest_micro_prm_dist 1) & (trips.trip_num==1) & (trips.outbound), 'home', origin_purpose)" ,origin_purpose,"np.where(((trips.trip_count > 1) & (trips.trip_num>1)) | ((trips.trip_count > 1) & (trips.trip_num==1) & ~(trips.outbound)), trips['purpose'].shift(1), origin_purpose)" +#AV allocation model needs column to be entirely in string format,, +,escort_participants,"np.where(trips.escort_participants.isna() | trips.escort_participants == '',trips.escort_participants,'_'+trips.escort_participants)" \ No newline at end of file