diff --git a/model-files/scripts/block/hwyParam.block b/model-files/scripts/block/hwyParam.block index ffd30572e..c679b4561 100644 --- a/model-files/scripts/block/hwyParam.block +++ b/model-files/scripts/block/hwyParam.block @@ -40,3 +40,6 @@ Means_Based_Tolling_Q1Factor = xx.xx ; a factor between 0 to 1 indicati Means_Based_Tolling_Q2Factor = xx.xx ; a factor between 0 to 1 indicating the toll discount by income group Means_Based_Cordon_Tolling_Q1Factor = xx.xx ; a factor between 0 to 1 indicating the cordon toll discount by income group Means_Based_Cordon_Tolling_Q2Factor = xx.xx ; a factor between 0 to 1 indicating the cordon toll discount by income group + +; set by RuntimeConfiguration.py -- Minimum value toll, in 2000 cents +min_vtoll = xx.xx \ No newline at end of file diff --git a/model-files/scripts/preprocess/RuntimeConfiguration.py b/model-files/scripts/preprocess/RuntimeConfiguration.py index 5ebdf9eed..4469c7ab0 100644 --- a/model-files/scripts/preprocess/RuntimeConfiguration.py +++ b/model-files/scripts/preprocess/RuntimeConfiguration.py @@ -399,6 +399,15 @@ def config_auto_opcost(params_filename, params_contents, for_logsums, replacemen filepath = os.path.join("CTRAMP","runtime","logsums.properties") replacements[filepath]["(\nAuto.Operating.Cost[ \t]*=[ \t]*)(\S*)"] = r"\g<1>%.2f" % auto_opc + + # find the minimum value toll + MinimumValueToll = float(get_property(params_filename, params_contents, "min_vtoll")) + + # put them into the CTRAMP\scripts\block\hwyParam.block + filepath = os.path.join("CTRAMP","scripts","block","hwyParam.block") + replacements[filepath]["(\nmin_vtoll[ \t]*=[ \t]*)(\S*)"] = r"\g<1>%.2f" % MinimumValueToll + + # put it into the UECs config_uec("%.2f" % auto_opc) diff --git a/model-files/scripts/skims/HwySkims.job b/model-files/scripts/skims/HwySkims.job index 00abefea4..9d1a535dd 100644 --- a/model-files/scripts/skims/HwySkims.job +++ b/model-files/scripts/skims/HwySkims.job @@ -358,6 +358,9 @@ loop period = 1, 5 ; give each period thread more threads to work with ;DistributeIntrastep processid = 'ctramp', processlist = 1-4, commpath = '%COMMPATH%', saveprn = f + + ; block file containing highway parameters + read file=ctramp\scripts\block\hwyparam.block ; drive alone skim mati[1] = skims\DA_@token_period@.tpp @@ -405,7 +408,14 @@ loop period = 1, 5 mw[4] = mi.1.TOLLTIMEDA mw[5] = mi.1.TOLLDISTDA mw[6] = mi.1.TOLLBTOLLDA - mw[7] = mi.1.TOLLVTOLLDA + ; set minimum toll, except when vtoll is 0 as it indicates no toll path + jloop + if (mi.1.TOLLVTOLLDA[j]=0) + mw[7][j] = 0 + else + mw[7][j] = max(mi.1.TOLLVTOLLDA[j], min_vtoll) + endif + endjloop ; shared ride 2 mw[8] = mi.2.TIMES2 @@ -414,8 +424,15 @@ loop period = 1, 5 mw[11] = mi.2.TOLLTIMES2 mw[12] = mi.2.TOLLDISTS2 mw[13] = mi.2.TOLLBTOLLS2 - mw[14] = mi.2.TOLLVTOLLS2 - + ; set minimum toll, except when vtoll is 0 as it indicates no toll path + jloop + if (mi.2.TOLLVTOLLS2[j]=0) + mw[14][j] = 0 + else + mw[14][j] = max(mi.2.TOLLVTOLLS2[j], min_vtoll) + endif + endjloop + ; shared ride 3+ mw[15] = mi.3.TIMES3 mw[16] = mi.3.DISTS3 @@ -423,7 +440,14 @@ loop period = 1, 5 mw[18] = mi.3.TOLLTIMES3 mw[19] = mi.3.TOLLDISTS3 mw[20] = mi.3.TOLLBTOLLS3 - mw[21] = mi.3.TOLLVTOLLS3 + ; set minimum toll, except when vtoll is 0 as it indicates no toll path + jloop + if (mi.3.TOLLVTOLLS3[j]=0) + mw[21][j] = 0 + else + mw[21][j] = max(mi.3.TOLLVTOLLS3[j], min_vtoll) + endif + endjloop ; very small trucks mw[22] = mi.4.TIMEVSM @@ -432,7 +456,14 @@ loop period = 1, 5 mw[25] = mi.4.TOLLTIMEVSM mw[26] = mi.4.TOLLDISTVSM mw[27] = mi.4.TOLLBTOLLVSM - mw[28] = mi.4.TOLLVTOLLVSM + ; set minimum toll, except when vtoll is 0 as it indicates no toll path + jloop + if (mi.4.TOLLVTOLLVSM[j]=0) + mw[28][j] = 0 + else + mw[28][j] = max(mi.4.TOLLVTOLLVSM[j], min_vtoll) + endif + endjloop ; small trucks mw[29] = mi.5.TIMESML @@ -441,7 +472,14 @@ loop period = 1, 5 mw[32] = mi.5.TOLLTIMESML mw[33] = mi.5.TOLLDISTSML mw[34] = mi.5.TOLLBTOLLSML - mw[35] = mi.5.TOLLVTOLLSML + ; set minimum toll, except when vtoll is 0 as it indicates no toll path + jloop + if (mi.5.TOLLVTOLLSML[j]=0) + mw[35][j] = 0 + else + mw[35][j] = max(mi.5.TOLLVTOLLSML[j], min_vtoll) + endif + endjloop ; medium trucks mw[36] = mi.6.TIMEMED @@ -450,7 +488,14 @@ loop period = 1, 5 mw[39] = mi.6.TOLLTIMEMED mw[40] = mi.6.TOLLDISTMED mw[41] = mi.6.TOLLBTOLLMED - mw[42] = mi.6.TOLLVTOLLMED + ; set minimum toll, except when vtoll is 0 as it indicates no toll path + jloop + if (mi.6.TOLLVTOLLMED[j]=0) + mw[42][j] = 0 + else + mw[42][j] = max(mi.6.TOLLVTOLLMED[j], min_vtoll) + endif + endjloop ; large trucks mw[43] = mi.7.TIMELRG @@ -459,7 +504,14 @@ loop period = 1, 5 mw[46] = mi.7.TOLLTIMELRG mw[47] = mi.7.TOLLDISTLRG mw[48] = mi.7.TOLLBTOLLLRG - mw[49] = mi.7.TOLLVTOLLLRG + ; set minimum toll, except when vtoll is 0 as it indicates no toll path + jloop + if (mi.7.TOLLVTOLLLRG[j]=0) + mw[49][j] = 0 + else + mw[49][j] = max(mi.7.TOLLVTOLLLRG[j], min_vtoll) + endif + endjloop endrun diff --git a/utilities/NextGenFwys/config_NGF_Round2/params_NoProject.properties b/utilities/NextGenFwys/config_NGF_Round2/params_NoProject.properties index 40e457498..e0ba2e9a8 100644 --- a/utilities/NextGenFwys/config_NGF_Round2/params_NoProject.properties +++ b/utilities/NextGenFwys/config_NGF_Round2/params_NoProject.properties @@ -196,3 +196,17 @@ Free_Parking_Eligibility_OnOff = -9999.0 # Note HSR intraregional travel represented with network project # Set to 0 to leave trips ON, set to 1 to DISABLE HSR_Interregional_Disable = 0 + + +# Minimum toll +# Existing express lanes in real life charge users a minimum toll, because operators need to recover the costs of operations +# From what we know, the minimum tolls in the region are as follows: +# Express lanes operated by MTC (in current prices): $0.50 +# I-580 opened in Feb 2016 operated by ACTC (in current prices): $0.30 (2016, in our 2015 network); $0.50 (since 2017) +# Legacy I-680 operated by ACTC (in current prices): <$0.50 (2015); $0.50 (since 2017) +# Express lanes operated by VTA (in current prices): $0.30 (always) +# Caveat: The current model implementation accept only one minimum toll for all express lanes in the region + +# 50 cents in 2023$ = 50 cents/1.87 = 26.74 cents in 2000$ +# based on inflation assumptions stated here: https://github.com/BayAreaMetro/modeling-website/wiki/InflationAssumptions +min_vtoll = 26.74 diff --git a/utilities/RTP/config_RTP2025/params_2023_AOC15.16.properties b/utilities/RTP/config_RTP2025/params_2023_MinVtoll.properties similarity index 88% rename from utilities/RTP/config_RTP2025/params_2023_AOC15.16.properties rename to utilities/RTP/config_RTP2025/params_2023_MinVtoll.properties index 4edcf496c..364c201dd 100644 --- a/utilities/RTP/config_RTP2025/params_2023_AOC15.16.properties +++ b/utilities/RTP/config_RTP2025/params_2023_MinVtoll.properties @@ -185,3 +185,20 @@ Free_Parking_Eligibility_OnOff = 0.0 # Note HSR intraregional travel represented with network project # Set to 0 to leave trips ON, set to 1 to DISABLE HSR_Interregional_Disable = 0 + + +# Minimum toll +# Existing express lanes in real life charge users a minimum toll, because operators need to recover the costs of operations +# Asana task: https://app.asana.com/0/0/1206460470095669/f +# From information we gathered, the minimum tolls in the region are as follows: +# Express lanes operated by MTC (in current prices): $0.50 +# I-580 opened in Feb 2016 operated by ACTC (in current prices): $0.30 (2016, in our 2015 network); $0.50 (since 2017) +# Legacy I-680 operated by ACTC (in current prices): <$0.50 (2015); $0.50 (since 2017) +# Express lanes operated by VTA (in current prices): $0.30 (always) + +# In summary, in 2023 the minimum toll is 50 cents for MTC and ACTC vs 30 cents for VTA in the real world +# However, the current model implementation accept only one minimum toll for all express lanes in the region +# Since more operators had 50 cents as the minimum, this is the modeling assumption for 2023 +# 50 cents in 2023$ = 50 cents/1.87 = 26.74 cents in 2000$ +# based on inflation assumptions stated here: https://github.com/BayAreaMetro/modeling-website/wiki/InflationAssumptions +min_vtoll = 26.74 \ No newline at end of file diff --git a/utilities/RTP/config_RTP2025/params_2035_IPA.properties b/utilities/RTP/config_RTP2025/params_2035_IPA.properties index 8dde62558..9650daca1 100644 --- a/utilities/RTP/config_RTP2025/params_2035_IPA.properties +++ b/utilities/RTP/config_RTP2025/params_2035_IPA.properties @@ -196,3 +196,19 @@ Free_Parking_Eligibility_OnOff = -9999.0 # Note HSR intraregional travel represented with network project # Set to 0 to leave trips ON, set to 1 to DISABLE HSR_Interregional_Disable = 0 + +# Minimum toll +# Existing express lanes in real life charge users a minimum toll, because operators need to recover the costs of operations +# From what we know, the minimum tolls in the region are as follows: +# Express lanes operated by MTC (in current prices): $0.50 +# I-580 opened in Feb 2016 operated by ACTC (in current prices): $0.30 (2016, in our 2015 network); $0.50 (since 2017) +# Legacy I-680 operated by ACTC (in current prices): <$0.50 (2015); $0.50 (since 2017) +# Express lanes operated by VTA (in current prices): $0.30 (always) +# Caveat: The current model implementation accept only one minimum toll for all express lanes in the region + +# 50 cents in 2023$ = 50 cents/1.87 = 26.74 cents in 2000$ +# based on inflation assumptions stated here: https://github.com/BayAreaMetro/modeling-website/wiki/InflationAssumptions +min_vtoll = 26.74 + + +