Products Consultancy

OmniTRANS V6: Cordon assignment


Wednesday, June 8, 2011

Version 6.0 introduces the ability to carry out a static assignment (OtTraffic) for a subarea of your network. This saves a significant amount of time when analysing the impact of small local changes to the infrastructure of large networks. The technology is based on the creation of cordon matrices for pre-defined subareas and the subsequent assignment of these cordon matrices to a variety of network configurations for the pre-defined areas.

 

The concept of Cordon assignment is to perform an assignment on a specific part of the network, with maintaining the routes and traffic flows for external relations. This is specifically useful for the quick evaluation of local traffic measures or small network modifications. For example, the effects in the vicinity of a modified road crossing in the city centre can be looked at without having to repeat the highway assignment.

Before using the cordon assignment method, there are a couple of things to keep in mind:

  • You always have to do at least one regular assignment before you can experiment with local measures;
  • Use this only to evaluate the effect of local/small changes that will have no effects on demand (trip distribution);
  • Make sure your cordon is large enough to contain all expected alernative routes;
  • Keep in mind that external routes can change in a slightly unexpected way; therefore, use some buffer around your area and define your cordon in such a way that you reduce the number of cordonlinks;
  • Cordon assignment is only possible for situations with equal demand compared to the 'regular' assignment.


Version 6 allows you to perform cordon assignments in four steps.

 

Step 1: Define a cordon


This can be achieved by the cordon selection tool. Make sure you draw the cordon in such a way that inbound links are selected. For right-hand-rule driving this is clockwise, for left-hand-rule driving this is counter clockwise.

A couple of things to keep in mind:

  • Make sure you have set your active/visible modes and times. This prevents a 'leaking' cordon;
  • Make sure you that no filter is applied on the link object.


Once you have defined the cordon, you can save it. Specify a suitable name for the selection, for example one that refers to the area like 'Cordonlinks Maastricht city centre'. The image below shows a cordon selection.

 

Cordon selection

 

Step 2: Create a cordon matrix during complete network assignment

 

In your regular assignment job, you have to add several lines to get the cordon matrix.

 

First, we define the saved selection with the inbound links:

# open the network for the current variant
my_network = OtNetwork.new

# get a selection from a predefined set called 'Cordonlinks Maastricht city centre'
my_cordon_links = my_network.selection('Cordonlinks Maastricht city centre')

This selection is input for the OtTraffic assignment:

my_assignment.cordonLinks = [my_cordon_links]

Second, we define the cordonmatrix:

my_assignment.cordonMatrix = [1,10,10,11,3,1]

Merging these code together with the current assignment code results for example in:

my_network = OtNetwork.new
my_cordon_links = my_network.selection('Cordonlinks Maastricht city centre')

my_assignment = OtTraffic.new

my_assignment.assignMethod = VOLUMEAVERAGING 
my_assignment.bprPerType = [[0,[0.87,4.0]]]
my_assignment.iterations = 10
my_assignment .epsilon = 0.00001
my_assignment .junctions = true

my_assignment.load = [1,10,10,11,2,1]
my_assignment.network = [10,10]

my_assignment.cordonMatrix = [1,10,10,11,3,1]

my_assignment.cordonLinks = [my_cordon_links]

my_assignment.execute

Step 3: Assign the cordon matrix

Duplicate your original assignment job. First, we define the cordonMatrix again like:

traffic.cordonMatrix = [1,10,10,11,3,1]

Furthermore, we extend the value for the assignmethod using a pipe or plus sign. For example assignMethod was 'VOLAVG' and now becomes 'VOLAVG + CORDON':

traffic.assignMethod = VOLUMEAVERAGING | CORDON

The final cordon assignment job will look like:

traffic = OtTraffic.new

traffic.network = [10,10]
traffic.iterations = 10
traffic.epsilon = 0.00001
traffic.junctions = true

# Save the load for the network delimited by the cordon in result=4
traffic.load = [1,10,10,1,4,1]

 # Specify that the assignment is to be carried out on a cordon
traffic.assignMethod = VOLUMEAVERAGING | CORDON

# Specify the cordon matrix to be used as input - pseudo OD matrix
traffic.cordonMatrix = [1,10,10,11,3,1]

traffic.execute

Step 4: Analyse the result


You can verify that the outcome of a cordon assignment with equal demand/network leads to same flow pattern.
With a small change, you get a different flow pattern, which can be illustrated (e.g.) by compare bandwidth plot.

 

Note that assigning the cordon matrix to the sub-network without making any modifications may not lead to the same flows. It is dependent on how much you have a solution that is converging in the first global assignment. You will get the exact same flows when the solution has converged.