Let us assume that we are North American traffic engineers, and have the (hypothetical, plausible, yet pathological) intersection configuration depicted (not to scale and lacking lane lines, sorry -- I did not have time to build the model to scale or paint it!) below on our hands. Both intersecting roads are four-lane, arterial roads with an AADT of 10000, a 40' bus or tractor-semitrailer for the design vehicle, and 35mph speed limits, while both railroad tracks are signaled, mainline railway tracks with 20+ trains per day, albeit also speed-limited to 35mph through the curves due to cant and curvature.

very crude diagram of intersection configuration

The traffic signals (not shown in the diagram) are standard 8 phase signals with pedestrian heads and leading protected left turns controlled by a NEMA TS-2, while the crossings are protected by flashing lights with cantilevers and gates controlled by grade crossing predictors. The nearest crossing (west approach leg) provides 200' of storage space, and the far crossing (south approach leg) provides 300'.

This configuration has been in service for several years after a road-widening project on the north-south road. However, a near-miss happened recently at this intersection where a car had to dart off onto the shoulder to evade an approaching train as it had queued onto the west approach crossing, so preemption is being considered for this location. But, there's a problem -- it's possible that a train move on the south crossing could preempt the intersection, then another train could show up on the other track, causing a second request for preemption before the traffic signal has finished servicing the first preemption request.

How can we handle this situation? I can see that dropping the second preempt request on the floor, which is the default behavior as I understand it of a traffic signal controller during preemption, could cause undesirable results including:

  • No track clearance green for the second train, leaving a possible queue on the track
  • Queues tailing back into the intersection from the second crossing, possibly causing track clearance to fail for the first track due to the queue from the second direction obstructing the intersection approach from the first direction direction.
  • Illogical turn movements during the preemption hold if limited service operation is used -- these shunt cars into a queue waiting for the second crossing to clear
  • Driver befuddlement at intersection operations with multiple trains present

However, simply servicing the second pre-emption request doesn't work either, because it could yield a track clearance green that allows movements that queue waiting for the first train, or worse, cut off the first train's track clearance green prematurely, leaving queued cars stranded on the tracks.

The railroads involved both are more than happy to give you all the advance preemption time you want, and are both providing 12-wire preemption interconnects to you. Furthermore, there's enough traffic here that everyone wants limited service even during a double preemption, and enough trains here that double preemption would occur every three months or so based on data logged by the GCPs.

  • 2
    $\begingroup$ This is an excellently formatted post, but I'm having a hard time understanding exactly what your question is. Is it what's on the title ("how is it done")? Or is it more "how should it be done" (not necessarily the same thing)? Or are you looking for some other form of solution to this problem? Please edit your post to clarify. $\endgroup$
    – Wasabi
    Jul 18 '17 at 0:17
  • $\begingroup$ @Wasabi -- it's more of a "how should it be done" given that what I know of the current handling scheme yields potentially unsatisfactorily crunchy results here... $\endgroup$ Jul 18 '17 at 0:23
  • $\begingroup$ If all incoming requests arriving around the same time have the same level of priority, then it will be "first come first served". Only other requests with a higher priority will jump the queue. $\endgroup$
    – Solar Mike
    Jul 18 '17 at 7:37
  • $\begingroup$ @SolarMike -- I mention that existing controllers do "first come first served" in the question, but I also mention that that could be problematic in this situation. It almost seems like you'd need some sort of dynamic priority scheme here... $\endgroup$ Jul 18 '17 at 11:42
  • $\begingroup$ re-read your question and the words "first come first served" don't appear, the nearest text I can find to that concept is "causing a second request for preemption before the traffic signal has finished servicing the first preemption request" $\endgroup$
    – Solar Mike
    Jul 18 '17 at 11:46

As you might well imagine, there is a metric f-ton (the technical term :-) ) of research covering both queuing theory and prioritization analysis.

The correct, if unsatisfying answer to your title question is: there is never acase where two items have exactly equal priority, just as in American baseball there's never an exact tie between ball reaching glove and runner's foot touching bag. If your algorithm produces exact matches, then shame on you, essentially. Take a couple steps back and decide how to assign a priority earlier in the sequence,even if it involves a random assignment,so that there is never a conflict which leads to undesirable outcomes (like a crash).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.