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

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

◼
  • 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

    ◼
  • Quit Kernel
  • ◼
  • Successively evaluate utilities, subroutines and main program
  • ◼
  • Follow “How to use program” procedure defined above
  • Meaning of matrixBasis

    Program starts with mB. Program then immediately forms columns
    1,2,3,and4
    of matrixBasis as described below.
    ◼
  • 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
    

    Subroutines
    

    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.
    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=Prependtemp10,"#","Cross Street or\n Node V & Re","Odometer\n [mile]","Node?","Speed\nLimit\n[mph]","
    L
    g
    \n[mile]","
    v
    g
    \n[mph]",+"ξ\n[]","
    T
    gf
    \n[sec]","
    T
    gx
    \n[sec]","
    T
    offset
    \n[sec]","
    T
    roffset[sec]
    ";​​(*temp11has12columns*)​​temp12=Prepend[temp11,{"1","2","3","4","5","6","7","8","9","10","11","12"}];​​(*temp12istemp11withcolumnlabels*)​​temp13=HighlightRow[temp12];(*temp13isEnglishoutputmatrixwithnoderowshighlighted*)​​​​(*CreateoutputinMetricunits*)​​temp11=Prependtemp14,"#","Cross Street or\n Nodes V & Re","Odometer\n [km]","Node?","Speed\nLimit\n[kph]","
    L
    g
    \n[km]","
    v
    g
    \n[kph]",+"ξ\n[]","
    T
    gf
    \n[sec]","
    T
    gx
    \n[sec]","
    T
    offset
    \n[sec]","
    T
    roffset[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}

    Input Data
    

    Run Program and Display Results

    In[]:=
    matrixBasis=insertIndex[mB];(*AddanindexcolumntomB*)
    In[]:=
    Grid[matrixBasis,FrameAll](*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

    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
    ◼
  • 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

    This section develops xSpeedUp, xSlowDown subroutines.

    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

    Program xSpeedUp gives the x position obtained by analytically integrating SpeedUp subroutine

    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

    Program SlowDown gives the x position obtained by analytically integrating SlowDown subroutine

    6. Development of SlowDownToStop Program

    6.1 SlowDownToStop Program

    Solution

    6.2 Implement Algorithm

    Implement algorithm

    7. Graphics Programming

    7.1 Development

    This manipulate shows green arrows have correct behavior at nodes and imaginary nodes

    7.2 Dingo Simulation

    7.3 Dingo Simulation 1 Using x2 Function

    7.5 Wolf

    Simulation

    7.6 Cheetah

    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