ABSTRACT (original article): This paper describes a traffic signal control strategy that allows motorists who travel at a recommended speed on suburban arterial two-way roads with a common cycle time to make every traffic signal. A road-to-traveler-feedback-device (RTFD) advises motorists how fast they should travel to do this. Signalized arterial roads where vehicles that travel at the recommended speed make every traffic signal are termed Ride-the-Green-Wave (RGW) roads. Left-turn-arounds enable vehicles to turn left from two-way RGW roads to intersecting/orthogonal two-way RGW-road while allowing maximum flow at the intersection. The traffic signal control technique that enables vehicles that travel at the recommended speed to make every traffic signal has been verified using a simulation program (RGW-SIM). In addition to introducing novel traffic signal control strategies, the methods presented in this paper have implications for road network design, public transport control, connected and automated vehicles, and environmental impacts. CITATION (original article): Friedman, Melvin H., Mark, Brian L., Gartner, Nathan H., Uninterrupted Maximum Flow on Signalized Traffic Networks, Journal of Advanced Transportation, 2024, 4279649, 32 pages, 2024. https://doi.org/10.1155/2024/4279649
RGW-TLP Program
The program RGW-TLP was used in the paper Uninterrupted Maximum Flow on Signalized Traffic Networks which may be downloaded by clicking this link https://onlinelibrary.wiley.com/doi/full/10.1155/2024/4279649/. Reading this paper will help the user relate to RGW-TLP and enable the intelligent us of this program. RGW-TLP produced Table 3 of the subject paper. More precisely it takes as input the information in columns 2, 3 and 4 of the paper and outputs these columns as well as columns 5 - 12 inclusive. The precise meaning of the values in columns 5 - 12 is described in the paper. Broadly speaking the output of the program tells motorists what speed they should travel at to make every traffic signal and it specifies when in the traffic cycle green lights should turn on and how long they should be on. Directions for using RGW-TLP are given within the program. Reproducing Table 3 in the paper enables the user to check they are using the program properly.
Program Capabilities
Program Capabilities
Develop a program that takes as input: 1) street names or virtual nodes, 2) associated odometer readings, 3) node/virtual node status of each street name and outputs a traffic coordination table
How to use program
How to use program
◼
input mB matrix and cycleTime as illustrated in Input section. Input in English units. temp[[1]] and temp[[2]] output results in English and metric units respectively
◼
Comment out old mB matrix and cycleTime from previous run
◼
Quit Kernel
◼
Evaluate utilities, subroutines and main program
How to use program on a second data set
How to use program on a second data set
◼
Quit Kernel
◼
Successively evaluate utilities, subroutines and main program
◼
Follow “How to use program” procedure defined above
Meaning of matrixBasis
Meaning of matrixBasis
Program starts with mB. Program then immediately forms columns of matrixBasis as described below.
1,2,3,and4
◼
Column1 is index,
◼
Column2 is street name,
◼
Column3 is odometer reading,
◼
Column4 is node status of road.
◼
Column 5 is speed limit
Using data provided by columns 3 and 4, matrixBasis, program successively adds:
◼
Column 6 which is GreenArrowLength
◼
Column 7 which is GreenWaveSpeed
◼
Column 8 which is fraction of block to nearest node
◼
Column 9 which is amount of time traffic signal is green in forward direction
◼
Column 10 which is amount of time traffic signal is green in cross direction
◼
Column 11 which is amount of time a green arrow takes to reach street/virtual nodes
◼
Column 12 which is reduced time in traffic cycle when green arrow reaches street/nodes
Utilities
Utilities
Subroutines
Subroutines
Main Program
Main Program
The main program Traffic Coordination Matrix TCoordinationM takes as input matrixBasis and outputs a coordination matrix CoordinationM
The last entry in matrixBasis must be a node. For Metric output last two entries in matrixBasis must be nodes.
The last entry in matrixBasis must be a node. For Metric output last two entries in matrixBasis must be nodes.
TCoordinationM[matrixBasis_,cycleTime_]:=Module{CoordinationM,temp1,Temp1,temp2,Temp2,temp3,Temp3,temp4,temp5,temp6,temp7,temp8,temp9,temp10,temp11,temp12,temp13,temp14,temp15,GreenArrowList,GWSpeedList,NodeMiles,IndexOfNodes,ξList,TgfList,TgxList,ToffsetList,ToffsetBkwdList,TroffsetBkwdList,ReducedFwdBkwdList,m,node,nentries,miles,colE1,colE2,colE3,colE4,colE5,colE6,colE7,colE8,colE9,colE10,colE11,colE12,colM1,colM2,colM3,colM4,colM5,colM6,colM7,colM8,colM9,colM10,colM11,colM12},{GreenArrowList,NodeMiles,IndexOfNodes}=GreenArrowLengths[matrixBasis];(*GreenArrowListislistofGreenArrowlengths*)(*NodeMilesisalistofodometerreadingsatnodes*)(*IndexOfNodesisalistofodometerreadingsatnodes*)CoordinationM=matrixBasis;(*CoordinationMisCoordinationmatrix*)temp1=AddColumn[CoordinationM,GreenArrowList];(*temp1isCoordinationMwithcolumnofGreenArrowList*)GWSpeedList=GreenWaveSpeed[GreenArrowList,cycleTime];(*GWSpeedListislistofgreenwavespeeds*)GWSpeedList=AppendTo[GWSpeedList,"Blank"];(*NowGRSpeedListhas"Blank"aslastentry*)temp1=AddColumn[temp1,GWSpeedList];(*temp1isCoordinationmatrixwithcolumnofGWSpeed*)ξList=ξCalculate[matrixBasis,NodeMiles];(*ξListislistofξvalues*)temp1=AddColumn[temp1,ξList];(*temp1nowhasξcolumn*)TgfList=TgfCalculate[ξList,cycleTime];temp1=AddColumn[temp1,TgfList];TgxList=TgxCalculate[ξList,cycleTime];temp1=AddColumn[temp1,TgxList];temp2={temp1[[1]],temp1[[4]]};(*listof{index,yesorno}*)ToffsetList=Counter/@temp2/.Null" ";(*listofoffsettimesorblanks,column10ofoutputmatrix*)temp1=AddColumn[temp1,ToffsetList];m=temp1;matrixBasis2=m;temp3=reducedNodeTime[m];(*temp3isnodereducedtimelist*)temp1=AddColumn[temp1,temp3];matrixBasis2=temp1;nentries=Length[matrixBasis2[[1]]];temp5=Table[reducedTimeNonNode[i],{i,1,nentries}]//Quiet;temp1=AddColumn[temp1,temp5];temp6=temp1[[-2]];(*listofreducedoffsettimesatnodes*)temp7=temp1[[-1]];(*listofreducedoffsettimesatnon-nodes*)temp9=weave[temp6,temp7];(*listofreducedoffsettimesfornodesandnon-nodes*)temp1=AddColumn[temp1,temp9];Temp1=(Delete[temp1,{{-2},{-3}}]);(*Temp1isoutputmatrixbeforespeedlimitsandlabelsareinserted*)(*individualnodeandnon-nodereducedoffsettimesremoved*)miles=Temp1[[All,3]];(*Isalistofodometerreadings[miles]*)temp1=InsertSpeedLimit[Temp1,miles];(*temp1isoutputmatrixwithspeedlimitinlastcolumn*){colE1,colE2,colE3,colE4,colE5,colE6,colE7,colE8,colE9,colE10,colE11,colE12}={temp1[[1]],temp1[[2]],temp1[[3]],temp1[[4]],temp1[[5]],temp1[[6]],temp1[[7]],temp1[[8]],temp1[[9]],temp1[[10]],temp1[[11]],temp1[[12]]};(*Loadcolumnsinpreparationformovingspeedlimitcolumn*)temp10={colE1,colE2,colE3,colE4,colE12,colE5,colE6,colE7,colE8,colE9,colE10,colE11};(*temp10istransposeofoutputmatrixinEnglishunitswithspeedlimitincolumn5*){colM1,colM2,colM3,colM4,colM12,colM5,colM6,colM7,colM8,colM9,colM10,colM11}={colE1,colE2,Round[1.609colE3,0.001],colE4,Round[1.609colE12,0.1],Round[1.609colE5,0.001],Round[1.609colE6,0.1],colE7,colE8,colE9,colE10,colE11};temp14={colM1,colM2,colM3,colM4,colM12,colM5,colM6,colM7,colM8,colM9,colM10,colM11};(*temp14istransposeofoutputmatrixinMetricunitswithspeedlimeincolumn5*)(*CreateoutputinEnglishunits*)temp11=Prependtemp10,"#","Cross Street or\n Node V & Re","Odometer\n [mile]","Node?","Speed\nLimit\n[mph]"," \n[mile]"," \n[mph]",+"ξ\n[]"," \n[sec]"," \n[sec]","\n[sec]","";(*temp11has12columns*)temp12=Prepend[temp11,{"1","2","3","4","5","6","7","8","9","10","11","12"}];(*temp12istemp11withcolumnlabels*)temp13=HighlightRow[temp12];(*temp13isEnglishoutputmatrixwithnoderowshighlighted*)(*CreateoutputinMetricunits*)temp11=Prependtemp14,"#","Cross Street or\n Nodes V & Re","Odometer\n [km]","Node?","Speed\nLimit\n[kph]"," \n[km]"," \n[kph]",+"ξ\n[]"," \n[sec]"," \n[sec]","\n[sec]","";temp12=Prepend[temp11,{"1","2","3","4","5","6","7","8","9","10","11","12"}];(*temp12istemp11withcolumnlabels*)temp12=Most[temp12];(*RemovelastrowofmatrixsinceRound["Blank"]isnotdefined*)(*Needtwonodesatendformetricoutput*)temp15=HighlightRow[temp12];(*temp15=metricoutputmatrixwithnoderowshighlighted*){temp13,temp15}
L
g
v
g
T
gf
T
gx
T
offset
T
roffset[sec]
L
g
v
g
T
gf
T
gx
T
offset
T
roffset[sec]
Input Data
Input Data
Run Program and Display Results
Run Program and Display Results
In[]:=
matrixBasis=insertIndex[mB];(*AddanindexcolumntomB*)
In[]:=
Grid[matrixBasis,FrameAll](*Checkinputdata*)
Out[]=
1 | Route 1 (N 1) | 0. | Yes |
2 | Belvoir Woods Pkwy | 0.099 | No |
3 | Node (V 2) | 0.65 | Yes |
4 | Chynoweth St | 1.219 | No |
5 | Lockport Place (N 3) | 1.414 | Yes |
6 | Fairfax County S | 2.27 | No |
7 | Node (V 4) | 2.308 | Yes |
8 | Fairfax County N | 2.346 | No |
9 | Node (V 5) | 3.09 | Yes |
10 | Newington Rd | 3.203 | No |
11 | Beulah St (N 6) | 3.875 | Yes |
12 | Hilltop Center Dr | 4.007 | No |
13 | Jeff Todd Way (N 7) | 4.663 | Yes |
14 | Hayfield Rd (N 8) | 5.428 | Yes |
15 | Node (V 9) | 6.156 | Yes |
16 | Devereux Cir Dr | 6.628 | No |
17 | S Van Dorn St | 6.758 | No |
18 | Node (V 10) | 6.856 | Yes |
19 | S Kings Hwy | 6.954 | No |
20 | Rose Hill Dr (N 11) | 7.663 | Yes |
21 | Node (V 12) | 8.2065 | Yes |
22 | The Parkway (N 13) | 8.75 | Yes |
23 | Node (V 14) | 9.189 | Yes |
24 | Franconia Rd (N 15) | 9.628 | Yes |
25 | Farmington Dr | 9.775 | No |
26 | Lenore Ln | 9.989 | No |
27 | N Kings Hwy | 10.054 | No |
28 | Huntington Ave (N 16) | 10.121 | Yes |
29 | Node (V 17) | 10.821 | Yes |
30 | Node 18 | 11.521 | Yes |
RGW-SIM
The overarching objective of RGW-SIM is to estimate how heterogeneous drivers and automated vehicles influence the performance of RGW-roads.
Below is the RGW-SIM code and outputs except subsection 7.4 One Source and One Sink. Please download Full code of RGW-SIM here: https://drive.google.com/file/d/1sqwHM8PC6fmMjRcuP_Y5YCRVabolzj2C/view?usp=drive_link
0. Directions
0. Directions
This simulation was developed with Mathematica 11.3. The simulation is expected to work with all later and most earlier versions of Mathematica.
These directions assume the user has some familiarity with Mathematica. Users not familiar with Mathematica are referred to the link
https://www.wolfram.com/wolfram-u/courses/wolfram-language/hands-on-start-to-mathematica-wl005/
which has a few short tutorials on how to use Mathematica
https://www.wolfram.com/wolfram-u/courses/wolfram-language/hands-on-start-to-mathematica-wl005/
which has a few short tutorials on how to use Mathematica
◼
Execute sections 1-6 inclusive.
◼
Section 7 has been expanded to reveal sections 7.1 - 7.10
◼
Simulations in sections 7.1 - 7.4 can be exercised without further execution
◼
Consecutively execute sections 7.5 to 7.6 to exercise these simulations.
5. Vehicle Flow Calculations
5. Vehicle Flow Calculations
This section develops xSpeedUp, xSlowDown subroutines.
5.1 Problem Statement
5.1 Problem Statement
At time t0 a vehicle at X0 traveling with speed V0 wants to speed up to V1 with constant acceleration A. When the vehicle gets to speed V1 it continues at that speed. Write equations that describe the position of the vehicle.
Solution
Solution
Program xSpeedUp gives the x position obtained by analytically integrating SpeedUp subroutine
5.2 Problem Statement
5.2 Problem Statement
At time t0 a vehicle traveling with V0 located at X0 slows down to V1 with constant deceleration A till it gets to V1. Thereafter it continues to move at speed V1. Write and implement equations of motion that describe the vehicle motion.
Solution
Solution
Program SlowDown gives the x position obtained by analytically integrating SlowDown subroutine
6. Development of SlowDownToStop Program
6. Development of SlowDownToStop Program
6.1 SlowDownToStop Program
6.1 SlowDownToStop Program
Solution
Solution
6.2 Implement Algorithm
6.2 Implement Algorithm
Implement algorithm
7. Graphics Programming
7. Graphics Programming
7.1 Development
7.1 Development
This manipulate shows green arrows have correct behavior at nodes and imaginary nodes
7.2 Dingo Simulation
7.2 Dingo Simulation
7.3 Dingo Simulation 1 Using x2 Function
7.3 Dingo Simulation 1 Using x2 Function
7.5 Wolf
7.5 Wolf
Simulation
Simulation
7.6 Cheetah
7.6 Cheetah
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
Uninterrupted maximum flow on signalized traffic networks
by Melvin H. Friedman, Brian L. Mark & Nathan H. Gartner
Wolfram Community, STAFF PICKS, September 11, 2024
https://community.wolfram.com/groups/-/m/t/3272429
by Melvin H. Friedman, Brian L. Mark & Nathan H. Gartner
Wolfram Community, STAFF PICKS, September 11, 2024
https://community.wolfram.com/groups/-/m/t/3272429