-
Notifications
You must be signed in to change notification settings - Fork 3
/
assignment_roadway.Rmd
140 lines (110 loc) · 4.36 KB
/
assignment_roadway.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
---
title: "Roadway Assignment"
author: "Caliper Corporation"
date: "October 7, 2021"
output: html_document
editor_options:
chunk_output_type: console
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, warnings = FALSE)
options(dplyr.summarise.inform = FALSE)
options(scipen = 999)
library(tidyverse)
library(knitr)
library(kableExtra)
```
## Introduction
For a more basic introduction to highway assignment, see the [Travel Forecasting
Resource](https://tfresource.org/topics/Network_assignment.html) page on the
topic. In short, roadway assignment is where the predicted trips and roadway
network are combined to predict volumes and travel times.
TRMG2 uses a static, multi-class assignment with the following basic vehicle classes:
- SOV: single occupancy vehicles
- HOV2: vehicles with two occupants
- HOV3+: vehicles with three or more occupants
- CV: commercial vehicles
- SUT: single-unit trucks
- MUT: multi-unit trucks
In addition, the classes are further segmented by value of time. This is done
to accurately capture toll road usage. Finally, vehicles are assigned separately
by time period. More details are provided in the sections below.
## Assignment by time period
A defining feature of TRMG2 is the independent treatment of each time period.
Traditionally, travel models used the AM period to represent both AM and PM
periods. The primary benefit of this approach was reduced computational burden,
and as long as the AM and PM periods were nearly symmetrical, errors introduced
by this simplification were small.
In the Triangle, the AM and PM periods are not symmetrical. The
[trips-in-motion](time_of_day.html) analysis performed using the travel survey
shows a large disparity between the peaks driven largely by non-work travel. The
PM peak lasts longer, and places more demand on the transportation system. In
order to capture these differences, model estimation and application must treat
the PM peak separately.
## Matrix creation
TRMG2 has models to predict demand for many markets including residents,
commercial vehicles, university students, and external travelers. The
output of these models is combined into a single trip matrix for each time
period. During this process, directional and occupancy factors are applied to
arrive at vehicle trip matrices in Origin-Destination format (click
[here](time_of_day.html#Directionality_factors) for resident factors).
A separate note about the "auto pay" mode (Uber, Lyft, etc.) is warranted. When
converting person trips to vehicle trips, a person traveling alone is a single
vehicle trip (1 person trip = 1 vehicle trip). However, by definition, they have
a driver. This means they are eligible for any HOV lanes the region might
construct in the future. For this reason, a person traveling alone is added to
the HOV2 matrix while a person traveling with one or more family members is
added to HOV3+.
## Value of time
Once trips are collapsed into the primary vehicle classes, they are assigned
values of time. The base values were borrowed from the NC Statewide Model, but
were then calibrated to match NC 540 traffic counts.
```{r, include=FALSE}
tbl <- read_csv("../master/assignment/vot_params.csv")
```
```{r}
tbl <- tbl %>%
select(Name, Value) %>%
mutate(Name = case_when(
Name == "pk_auto" ~ "Autos/CV (PK)",
Name == "op_auto" ~ "Autos/CV (OP)",
Name == "sut" ~ "SUT",
Name == "mut" ~ "MUT",
TRUE ~ "Calibration Factor"
)) %>%
rename(`VOT ($/hr)` = Value)
tbl %>%
kable() %>%
kable_styling(full_width = FALSE)
```
## Assignment parameters
Relevant assignment details are listed below:
- Algorithm: N-conjugate Frank-Wolfe
- Volume-Delay Function (VDF): BPR
- Relative Gap: .0001 (1e-4)
- Maximum Iterations: 500
### VDF parameters {.tabset}
The table below shows the alpha and beta values used for the BPR VDF.
```{r, include=FALSE}
df <- read_csv("../master/networks/ff_speed_alpha_beta.csv") %>%
select(HCMType, AreaType, Alpha, Beta) %>%
mutate(Beta = round(Beta,0)) %>%
filter(!(HCMType %in% c("CC", "TransitOnly")))
```
#### Alphas
```{r}
df %>%
select(-Beta) %>%
pivot_wider(names_from = AreaType, values_from = Alpha) %>%
kable() %>%
kable_styling(full_width = FALSE)
```
#### Betas
```{r}
df %>%
select(-Alpha) %>%
pivot_wider(names_from = AreaType, values_from = Beta) %>%
select(HCMType, Betas = Downtown) %>%
kable() %>%
kable_styling(full_width = FALSE)
```