Private Traffic Route Choice - smart-fm/simmobility-prod GitHub Wiki
The benchmark route choice model includes two steps: Pathset generation and the choice model.
Pathset generation
The Pathset generation is conducted with regards to each destination in the pre-defined ODs (i.e., to generate Pathsets from all other nodes to a given destination), or, if needed, every node in the network. Another option is to generate Pathsets for pre-defined ODs only.
The path generation algorithm involves three steps:
The shortest path computation step generates the shortest paths connecting each link in the network to all defined destination nodes.
A link elimination step augments the paths from the shortest path set with alternative paths. This step involves the elimination of each link in the shortest path and the subsequent re-computation of the shortest path, and ensures that an incident on any link will still leave alternative paths open for every OD pair.
A random perturbation step is performed in order to obtain a richer path set. The impedance of the links are perturbed randomly to simulate varying travel times. Another set of shortest paths are now computed, and appended to the existing set. The number of random perturbations performed can be controlled by the user. The algorithm also screens the final path set for uniqueness, and eliminates unreasonably long paths.
The pseudo code is provided as follows:
PathSetGeneration(graph G, destination D, link weights W)
Step 1:
For each link in G:
Set link weight = link length for W.
If needed, highway bias can be applied to adjust the link weight,
i.e., link weight = link length * highway_bias for highway links, where highway_bias is a pre-defined number.
Call ShortestPathTree(G, D, W) to compute and store the shortest paths from all other nodes in G to D with W set in the previous step.
Step 2:
For each link in the shortest path tree calculated in Step 1 (or simply for each link in G):
Set link weight = a very large value for W.
Call ShortestPathTree(G, D, W) to compute.
Store the shortest paths from all other nodes in G to D with W set in the previous step.
Set link weight back to normal (the value in Step 1).
Step 3:
For each link in G:
Set link weight *= a random number for W.
If needed, simulation method can be applied in order to generate relatively realistic random perturbations.
Call ShortestPathTree(G, D, W) to compute.
Store the shortest paths from all other nodes in G to D with W set in the previous step.
Step 3 can be conducted for multiple times.
ShortestPathTree(graph G, destination D, link weights W)
Step 1:
Call Dijkstra(G, D, W) to calculate the shortest path tree from all nodes in G to D with W.
Step 2:
For each node O in G:
Check if the shortest path from O to D calculated in Step 1 is already in the Pathset for this OD pair PathSet(O, D).
If not:
Add the path into PathSet(O, D).
The choice model
Path-size logit model is used as the choice model. It calculates the probability for each path in the Pathset for a given OD based on the utility. The utility consists of travel time, path size, travel distance, highway distance, travel cost, number of signalized intersections, number of right turns (left turns in right-hand driving countries), and purpose of travel.
The pseudo code is provided as follows:
ChoiceModel(agent A, graph G, origin O, destination D)
Step 1:
Set logsum = 0.
For each path i in the Pathset PathSet(O, D):
Set utility = 0.
Obtain the travel time tt of the path.
Obtain value of time for the agent A: bTTlowVOT/bTTmedVOT/bTThiVOT.
Set utility += tt * bTTVOT
Obtain the path size PS of the path.
Set utility += PS * bCommonFactor.
Obtain the travel distance l and the highway distance w of the path.
Set utility += l * bLength + w * bHighway.
Obtain the travel cost c of the path.
Set utility += c * bCost.
Obtain the number of signalized intersections s of the path.
Set utility += s * bSigInter.
Obtain the number of right turns f of the path.
Set utility += f * bLeftTurns.
Obtain the trip purpose.
If the trip purpose = work:
Set utility += bWork.
If the trip purpose = leisure:
Set utility += bLeisure
Set utility = exp(utility).
Set utility(i) = utility.
Set logsum += utility.
Step 2:
Set upperProb = 0.
Draw a random number X between 0.0 and 1.0 for agent A.
For each path i in the Pathset PathSet(O, D):
Set prob = utility(i) / logsum.
Set upperProb += prob.
If X <= upperProb:
agent A chooses path i from the Pathset.
SimMobility Private Route Choice
This specifies how to compute the travel cost in private route choice model for SimMobility project, as well as about the coefficient of travel cost used in utility computation. The travel cost computation can be used without loss of generality, however, the proposed specification of travel cost coefficient is only to overcome the missing estimated coefficient on travel cost. Whereas, ideally, if the data is available, travel cost coefficient should be estimated based on real data observations.
Specification of Travel Cost
The travel cost C n k for agent n taking path k used for private route choice of SimMobility project consists three parts:
- ERP (Electronic Road Pricing) cost
- Petrol Cost
- Parking Cost
ERP cost
The ERP cost CERP(k) for path k can be computed based on the current/proposed ERP gantry locations in Singapore. A pre-defined cost in Singapore dollar (S$) will be added to the ERP cost per passing by the ERP gantry. The total ERP cost for each path is the additive sum of ERP gantry cost along the path.
Before moving on to specifying detailed computation of the ERP cost, here are some pre-assumptions on the data structure:
- ERP information is embedded as link attribute in the network. For link l, denote its ERP cost of passing through the ERP gantry along link l as l$ERP
- For each path, it is recorded as a sequence of links it traverses. For path k, denote its set of links as {k_1,k_2, ..., k_n_k} where n_k is the total number of links along path k.
Computing ERP cost:
The ERP cost for path k is then:
Before moving on to specifying detailed computation of the Petrol cost, here are some pre-assumptions on the data structure:
- Link distance is embedded as link attribute in the network. For link l, denote its link distance as l$dist.
- For each path, it is recorded as a sequence of links it traverses. For path k, denote its set of links as {k_1,k_2, ..., k_n_k} where n_k is the total number of links along path k.
- Denote the petrol consumption per km as Petrolperkm
- Denote the monetary cost per unit Petrol as S$Petrol
Computing the Petrol cost:
Set Petrolperkm = 0.066 L/1 km (1)
Set S$Petrol = $2.190 S$/L (2)
The Petrol cost for path k is then:
Note that, here it is assumed the distance attribute of each link is having km as its unit. If it is not, it
should be converted to km during calculation.
To make this computation in consistent with SimMobility Pre-day specification,
Parking Cost
The parking cost is associated with trip destination and trip end activity duration. Denote the trip destination MTZ zone for agent n along path k as k n $MTZ, and denote the activity duration at trip end for agent n as k n $activity_duration. Inside each MTZ there is a parking rate R MTZ with unit of S$/hour. Ideally, the computation of parking cost C parking ,n (k) is:
Total Travel Cost
The total travel cost Cn(k) for agent n taking path k is then the summation of the three types of cost specified above.
Specification of Travel Cost Coefficient
This section presents an practical approach to compute the missing coefficient of travel cost based on coefficient of travel time and value of time (VOT). Given the coefficient on travel time β tt , the coefficient on travel cost βcost is then:
| Variable in above Equation | Unit |
|---|---|
| βcost | Utility unit/S$ |
| βtt | Utility unit/sec |
| 3600 | Sec/hour |
| VOT | S$/hour |
If the unit is not the same as in Table, proper conversion is needed before computing the coefficient on travel cost βcost.
Given the coefficient on travel time βtt be -0.01373 utility unit/sec in SimMobility, if the VOT is adopted to be 24S$/hour, the coefficient on travel cost βcost is therefore -2.0595.