From 25fb8c10bd3a4273e01b78e62a94a3cd7df99452 Mon Sep 17 00:00:00 2001 From: Flavia Tsang Date: Fri, 9 Feb 2024 09:20:23 -0800 Subject: [PATCH 1/7] initial edits to incorporate min_vtoll in HwySkims.job (updates coming soon) In the next update, where vtoll is 0, it will remain 0. --- model-files/scripts/block/hwyParam.block | 3 +++ model-files/scripts/skims/HwySkims.job | 17 ++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) 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/skims/HwySkims.job b/model-files/scripts/skims/HwySkims.job index 00abefea4..8b5f8f852 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,7 @@ loop period = 1, 5 mw[4] = mi.1.TOLLTIMEDA mw[5] = mi.1.TOLLDISTDA mw[6] = mi.1.TOLLBTOLLDA - mw[7] = mi.1.TOLLVTOLLDA + mw[7] = max(mi.1.TOLLVTOLLDA, min_vtoll) ; shared ride 2 mw[8] = mi.2.TIMES2 @@ -414,7 +417,7 @@ loop period = 1, 5 mw[11] = mi.2.TOLLTIMES2 mw[12] = mi.2.TOLLDISTS2 mw[13] = mi.2.TOLLBTOLLS2 - mw[14] = mi.2.TOLLVTOLLS2 + mw[14] = max(mi.2.TOLLVTOLLS2, min_vtoll) ; shared ride 3+ mw[15] = mi.3.TIMES3 @@ -423,7 +426,7 @@ loop period = 1, 5 mw[18] = mi.3.TOLLTIMES3 mw[19] = mi.3.TOLLDISTS3 mw[20] = mi.3.TOLLBTOLLS3 - mw[21] = mi.3.TOLLVTOLLS3 + mw[21] = max(mi.3.TOLLVTOLLS3, min_vtoll) ; very small trucks mw[22] = mi.4.TIMEVSM @@ -432,7 +435,7 @@ loop period = 1, 5 mw[25] = mi.4.TOLLTIMEVSM mw[26] = mi.4.TOLLDISTVSM mw[27] = mi.4.TOLLBTOLLVSM - mw[28] = mi.4.TOLLVTOLLVSM + mw[28] = max(mi.4.TOLLVTOLLVSM, min_vtoll) ; small trucks mw[29] = mi.5.TIMESML @@ -441,7 +444,7 @@ loop period = 1, 5 mw[32] = mi.5.TOLLTIMESML mw[33] = mi.5.TOLLDISTSML mw[34] = mi.5.TOLLBTOLLSML - mw[35] = mi.5.TOLLVTOLLSML + mw[35] = max(mi.5.TOLLVTOLLSML, min_vtoll) ; medium trucks mw[36] = mi.6.TIMEMED @@ -450,7 +453,7 @@ loop period = 1, 5 mw[39] = mi.6.TOLLTIMEMED mw[40] = mi.6.TOLLDISTMED mw[41] = mi.6.TOLLBTOLLMED - mw[42] = mi.6.TOLLVTOLLMED + mw[42] = max(mi.6.TOLLVTOLLMED, min_vtoll) ; large trucks mw[43] = mi.7.TIMELRG @@ -459,7 +462,7 @@ loop period = 1, 5 mw[46] = mi.7.TOLLTIMELRG mw[47] = mi.7.TOLLDISTLRG mw[48] = mi.7.TOLLBTOLLLRG - mw[49] = mi.7.TOLLVTOLLLRG + mw[49] = max(mi.7.TOLLVTOLLLRG, min_vtoll) endrun From cb58053cc1df80dab859a33be8f25003797c1035 Mon Sep 17 00:00:00 2001 From: Flavia Tsang Date: Fri, 9 Feb 2024 12:44:34 -0800 Subject: [PATCH 2/7] set minimum toll, except when vtoll is 0 as it indicates no toll path --- model-files/scripts/skims/HwySkims.job | 65 ++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 8 deletions(-) diff --git a/model-files/scripts/skims/HwySkims.job b/model-files/scripts/skims/HwySkims.job index 8b5f8f852..9d1a535dd 100644 --- a/model-files/scripts/skims/HwySkims.job +++ b/model-files/scripts/skims/HwySkims.job @@ -408,7 +408,14 @@ loop period = 1, 5 mw[4] = mi.1.TOLLTIMEDA mw[5] = mi.1.TOLLDISTDA mw[6] = mi.1.TOLLBTOLLDA - mw[7] = max(mi.1.TOLLVTOLLDA, min_vtoll) + ; 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 @@ -417,8 +424,15 @@ loop period = 1, 5 mw[11] = mi.2.TOLLTIMES2 mw[12] = mi.2.TOLLDISTS2 mw[13] = mi.2.TOLLBTOLLS2 - mw[14] = max(mi.2.TOLLVTOLLS2, min_vtoll) - + ; 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 @@ -426,7 +440,14 @@ loop period = 1, 5 mw[18] = mi.3.TOLLTIMES3 mw[19] = mi.3.TOLLDISTS3 mw[20] = mi.3.TOLLBTOLLS3 - mw[21] = max(mi.3.TOLLVTOLLS3, min_vtoll) + ; 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 @@ -435,7 +456,14 @@ loop period = 1, 5 mw[25] = mi.4.TOLLTIMEVSM mw[26] = mi.4.TOLLDISTVSM mw[27] = mi.4.TOLLBTOLLVSM - mw[28] = max(mi.4.TOLLVTOLLVSM, min_vtoll) + ; 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 @@ -444,7 +472,14 @@ loop period = 1, 5 mw[32] = mi.5.TOLLTIMESML mw[33] = mi.5.TOLLDISTSML mw[34] = mi.5.TOLLBTOLLSML - mw[35] = max(mi.5.TOLLVTOLLSML, min_vtoll) + ; 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 @@ -453,7 +488,14 @@ loop period = 1, 5 mw[39] = mi.6.TOLLTIMEMED mw[40] = mi.6.TOLLDISTMED mw[41] = mi.6.TOLLBTOLLMED - mw[42] = max(mi.6.TOLLVTOLLMED, min_vtoll) + ; 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 @@ -462,7 +504,14 @@ loop period = 1, 5 mw[46] = mi.7.TOLLTIMELRG mw[47] = mi.7.TOLLDISTLRG mw[48] = mi.7.TOLLBTOLLLRG - mw[49] = max(mi.7.TOLLVTOLLLRG, min_vtoll) + ; 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 From a677071bbca5ebd48a715d4314f7fd464d2aa8ae Mon Sep 17 00:00:00 2001 From: Flavia Tsang Date: Sun, 11 Feb 2024 00:53:52 -0800 Subject: [PATCH 3/7] Propagate min_vtoll from params.properties --> runtimeconfiguration.py --> hwyParam.block --> HwySkims.job --- .../scripts/preprocess/RuntimeConfiguration.py | 9 +++++++++ .../RTP/config_RTP2025/params_2035_IPA.properties | 15 +++++++++++++++ 2 files changed, 24 insertions(+) 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/utilities/RTP/config_RTP2025/params_2035_IPA.properties b/utilities/RTP/config_RTP2025/params_2035_IPA.properties index 8dde62558..3d0509243 100644 --- a/utilities/RTP/config_RTP2025/params_2035_IPA.properties +++ b/utilities/RTP/config_RTP2025/params_2035_IPA.properties @@ -196,3 +196,18 @@ 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 +# Express lanes operated by ACTC (in current prices): $0.30 (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 + + + From 964ab59edd537afe0ab97baf7377ca7204df3a43 Mon Sep 17 00:00:00 2001 From: Flavia Tsang Date: Mon, 12 Feb 2024 22:47:05 -0800 Subject: [PATCH 4/7] updated details in comments re. ACTC min toll --- utilities/RTP/config_RTP2025/params_2035_IPA.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utilities/RTP/config_RTP2025/params_2035_IPA.properties b/utilities/RTP/config_RTP2025/params_2035_IPA.properties index 3d0509243..9650daca1 100644 --- a/utilities/RTP/config_RTP2025/params_2035_IPA.properties +++ b/utilities/RTP/config_RTP2025/params_2035_IPA.properties @@ -201,7 +201,8 @@ HSR_Interregional_Disable = 0 # 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 -# Express lanes operated by ACTC (in current prices): $0.30 (2015); $0.50 (since 2017) +# 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 From a41f77e8af79ec689228a23e47152f951c22f9f3 Mon Sep 17 00:00:00 2001 From: Flavia Tsang Date: Mon, 12 Feb 2024 23:26:23 -0800 Subject: [PATCH 5/7] update properties file for NGF NoProject --- .../config_NGF_Round2/params_NoProject.properties | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 From 8de880080e4724a1acdd10d104a6b2dc29e960f1 Mon Sep 17 00:00:00 2001 From: Flavia Tsang Date: Mon, 12 Feb 2024 23:44:25 -0800 Subject: [PATCH 6/7] updating the properties file for RTP2025, for 2023 model year for now --- .../params_2023_AOC15.16.properties | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/utilities/RTP/config_RTP2025/params_2023_AOC15.16.properties b/utilities/RTP/config_RTP2025/params_2023_AOC15.16.properties index 4edcf496c..364c201dd 100644 --- a/utilities/RTP/config_RTP2025/params_2023_AOC15.16.properties +++ b/utilities/RTP/config_RTP2025/params_2023_AOC15.16.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 From 0356797b3b848d4f8b4597dd79fe4a6584bc51ca Mon Sep 17 00:00:00 2001 From: Flavia Tsang Date: Wed, 10 Apr 2024 23:28:29 -0700 Subject: [PATCH 7/7] renaming the properties file with "min_vtoll =" (this is needed to resolve the conflict with master) --- ...s_2023_AOC15.16.properties => params_2023_MinVtoll.properties} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename utilities/RTP/config_RTP2025/{params_2023_AOC15.16.properties => params_2023_MinVtoll.properties} (100%) diff --git a/utilities/RTP/config_RTP2025/params_2023_AOC15.16.properties b/utilities/RTP/config_RTP2025/params_2023_MinVtoll.properties similarity index 100% rename from utilities/RTP/config_RTP2025/params_2023_AOC15.16.properties rename to utilities/RTP/config_RTP2025/params_2023_MinVtoll.properties