Yes, you read right! A full blown implementation of the variable demand
auto assignment is distributed with Release 4.0. This means that as an
alternative to a fixed auto trip matrix, you
can now use modal split functions
or even direct demand functions
in modules 5.11 and 5.21. This means that in a traditional
four step model, the two last steps, i.e. modal split and assignment,
can now be combined into one simultaneous step. The result of
a variable demand assignment comprises a consistent set of
-- demand matrix for the auto mode
-- equilibrium auto volumes
-- equilibrium auto times
-- auto impedance matrix
The auto demand functions f
txx
can be defined using as variables the auto impedance, three general purpose
matrix parameters, the origin and destination zones and the function
index itself. The following keywords are recognized:
upqau
matrix of auto impedances
mat1
general purpose matrix parameter 1
mat2
general purpose matrix parameter 2
mat3
general purpose matrix parameter 3
p
origin zone number
q
destination zone number
index
contents of the function index matrix
The same function may be used for all O-D pairs, or alternatively, a function index matrix can be specified which defines the demand function to be used for each O-D pair.
Depending on the exact context, the matrix parameters
mat1
, mat2
and mat3
may be used to hold total demand, captives, impedances of alternate modes
or alternate scenarios and any kind of socio-economic variables. While
for efficiency reasons the number of matrix variables is limited to three,
note that, if needed, more than one data item can be packed into one matrix.
The packing can be done using the matrix calculator, module 3.21, and the
unpacking can be coded directly in the demand function expression. For
details on this kind of packing and unpacking, see also the September 1987
issue of EMME/2 NEWS. The demand functions must be non-increasing
functions of the auto impedance variable upqau
.
The algorithm used in the implementation of the variable demand matrix is based on the partial linearization method which was originally proposed by Evans. It is much more efficient than the full linearization method (Frank+Wolfe), and also does not need the explicit specification of upper and lower bounds on the demand of each OD-pair. These would be extremely difficult to obtain, given that the user specifies the demand function as a general algebraic expression.
Besides specifying the demand functions to be used in the assignment
and the matrices to be used as variables
mat1
, mat2
and mat3
, the
variable demand assignment needs the specification of the following
four full matrices:
gpqau
upqau
fpqau
upqau
.
wpqau
gpqau
.
This matrix is obtained by inverting the demand functions
numerically using the secant method.
As the assignment converges to the equilibrium solution, the demand
matrices gpqau
and fpqau
will become equal.
The same is true for the time matrices upqau
and
wpqau
, as long as all the demand functions used are strictly decreasing
functions of upqau
. Therefore, the matrices fpqau
and
wpqau
are normally
not required in subsequent analyses, they can be considered as temporary
matrices and discarded after the assignment.
The objective function of the convex programming problem which corresponds to the variable demand assignment model contains integrals of the inverse of the demand function. Since these integrals can not be evaluated directly and, even worse, are infinite if there is a non-zero captive demand, the objective function is not evaluated and the relative gap is thus not available as a stopping criterion. As stopping criteria, the number of iterations and the normalized gap can be used. The normalized gap is specified in minutes per trip and corresponds to the time difference criterion we are used to from the fixed demand assignment. Since the normalized gap of the variable demand assignment also contains a demand-dependent term, its interpretation is, however, not as straightforward.
The variable demand auto assignment is fully integrated with the fixed demand assignment. This means in particular that all the additional options that are available for the fixed demand assignment are also available for the variable demand assignment - even including the new traversal matrix feature described above.
The addition of the variable demand assignment necessitated major changes in the code of modules 5.11 and 5.21. Such developments always bear the risk of introducing bugs to portions of the code which worked perfectly before, no matter how conscientiously they are tested. While we must avoid any risk of geopardizing the production use of modules 5.11/5.21 by relasing the new version too early, we also feel that all those users who are waiting for the variable demand assignment should have access to it in Release 4.0. For this reason, two versions of modules 5.11 and 5.21 are distributed in Release 4.0. The "normal" versions of the binary, E511 and E521, are for fixed demand only (but note that the traversal matrix feature described above is included). The variable demand versions of these modules are provided in the binary files E511VAR and E521VAR. In order to use these versions instead of the ones limited to fixed demand, the binaries need to be renamed correspondingly. Refer to the release notes and your system specific installation notes for details.
In the following example, a variable demand assignment for the Winnipeg network is shown. The following bimodal logit modal split function is used (for details on the calibration of this function, see "EMME - SUMMARY REPORT", publication #101, Centre de recherche sur les transports, Universitè de Montrèal, 1979):
gpqtot
gpqau = -------------------------------------------------------------------------------------
1 + exp(0.0209 upqau -0.0189 upqtr +0.0964 parkco -2.665 carown +0.0236 pmale +2.696)
where the variable are defined as:
gpqtot
total demand (transit and auto)
upqau
auto time in minutes
upqtr
weighted transit impedances
parkco
parking cost in $/month
carown
average car ownership
pmale
percentage of men
The demand function is defined as
fa1=mat1/(1+exp(0.0209*upqau-0.0189*mat2+mat3))
and the matrix variables are used as
mat1 = gpqtot mat2 = upqtr mat3 = sesum ( = 0.0964*parkco-2.665*carown+0.0236*pmale+2.696 )
where the sesum
matrix (mat3
) is a constant and can be computed once
with the matrix calculator, module 3.21 (see example report of 3.21
elsewhere in this issue).
Once the variable demand auto assignment has been completed the transit demand can
be computed as gpqtr=gpqtot-gpqau
and assigned to the transit network
using modules 5.11 and 5.31. In the example shown here, the transit
impedances upqtr
have been computed once before the auto assignment
and have been kept constant during the assignment, even though the
transit time functions used have the auto times as parameters. It would
have also been possible to interrupt the auto assignment after every x
iterations in order to recompute the transit times, readjust the matrix
wpqau
to reflect the change in the demand function, and resume the auto
assignment with the adjusted transit impedances. Using a macro to carry
out these steps automatically, one can implement the full bi-modal
equilibrium assignment with variable transit times or even more complex
multi-modal assignments.
The following pages show the dialog for the preparation of the assignment (module 5.11) and parts of the report generated during the assignment (module 5.21). Note the use of the matrix names in the matrix specification dialog and the new lay-out of the assignment report, which now also includes details on the changes of link volumes and demand matrix for each iteration. The example was executed on a PC using a Definicon DSI-780 co-processor board running at 16.7MHz.
EMME/2 Module: 5.21 Date: 89 05 01 User: E001/SPIESS.....HS Page: 48
Project: EMME/2 STANDARD DEMONSTRATION AND TEST DATA BASE - WINNIPEG
Scenario 2000: VARIABLE DEMAND AUTO ASSIGNMENT USING BI-MODAL LOGIT
---------------------------------------------------------------------------------------------
AUTO ASSIGNMENT
***************
Scenario: 2000: VARIABLE DEMAND AUTO ASSIGNMENT USING BI-MODAL LOGIT
Auto demand: mf07: gpqau predicted auto demand
Auto occupancy: mo22: vehocc auto occupancy
Demand function index: 1
..... parameter MAT1: mf03: gpqtot Total demand in persons
..... parameter MAT2: mf05: upqtr transit impedances scenario 1000
..... parameter MAT3: mf06: sesum combined effect of socio-economic vars
Values of demand function: mf09: fpqau demand function values
Values of inverse dem.fct: mf10: wpqau inv. dem-fct values
Auto time: mf08: upqau variable demand auto times
Network size: 154 centroids 903 reg. nodes
2535 auto links 752 turn entries
Stopping criteria: 10 iterations .50 min normalized gap
-------------------------------- Iteration 0 --------------------------------
Demand function: Total persons: 67336.35 Function evaluations: 23716
Total automobiles: 60480.76 Additional veh.: .00
Total vehicles: 60480.76 Not assigned: 1452.23
\newpage % time:
Update: 2.8 ( 2.8) Total: 123.3 ( 123.3)
-------------------------------- Iteration 1 --------------------------------
Current solution: Total persons: 67336.35
Total automobiles: 60480.76 Additional veh.: .00
Total vehicles: 60480.76 Not assigned: 1452.23
Demand function: Total persons: 66554.66 Function evaluations: 23716
Total automobiles: 59783.66 Additional veh.: .00
Total vehicles: 59783.66 Not assigned: 1452.34
Search for lambda:L= .000000 .062500 .125000 .250000 .500000 1.000000
G=-.270E+07 -.195E+07 -.129E+07 .115E+06 .753E+07 .102E+09
Appr. optimal lambda: .243259 Estimated error: -.001765
Avg trip times: Currently on network: 63.13 On shortest paths: 17.43
Using demand function: 17.40 Using inverse dem.fct: 13.01
Vol. difference: Average per link: 1.44 Avg absolute diff: 144.63
Minimum difference: -1470.46 (on link 1047 1046)
Maximum difference: 1648.42 (on link 508 507)
Dem. difference: Number of trips: -190.16 Abs. no. of trips: 190.16
Minimum difference: -1.69 (for OD-pair 92 1)
Maximum difference: .00 (for OD-pair 1 2)
Obj. function: Absolute gap: 2702025.0000 Normalized gap: 45.7749
\newpage % time:
Update: 2.8 ( 5.5) Total: 142.1 ( 265.4)
\newpage %
EMME/2 Module: 5.21 Date: 89 05 01 User: E001/SPIESS.....HS Page: 55
Project: EMME/2 STANDARD DEMONSTRATION AND TEST DATA BASE - WINNIPEG
Scenario 2000: VARIABLE DEMAND AUTO ASSIGNMENT USING BI-MODAL LOGIT
---------------------------------------------------------------------------------------------
-------------------------------- Iteration 10 --------------------------------
Current solution: Total persons: 66611.49
Total automobiles: 59833.83 Additional veh.: .00
Total vehicles: 59833.83 Not assigned: 1452.32
Demand function: Total persons: 66450.95 Function evaluations: 20515
Total automobiles: 59689.86 Additional veh.: .00
Total vehicles: 59689.86 Not assigned: 1452.40
Search for lambda:L= .000000 .016576 .033152 .066303 .132606 .265213
G=-.462E+05 -.377E+05 -.291E+05 -.122E+05 .216E+05 .933E+05
Appr. optimal lambda: .090226 Estimated error: .000072
Avg trip times: Currently on network: 18.88 On shortest paths: 18.08
Using demand function: 18.07 Using inverse dem.fct: 17.06
Vol. difference: Average per link: -.67 Avg absolute diff: 15.85
Minimum difference: -251.40 (on link 411 410)
Maximum difference: 216.61 (on link 609 608)
Dem. difference: Number of trips: -14.70 Abs. no. of trips: 15.23
Minimum difference: -.19 (for OD-pair 47 59)
Maximum difference: .02 (for OD-pair 13 1)
Obj. function: Absolute gap: 46242.1000 Normalized gap: .7921
\newpage % time:
Update: 3.3 ( 31.1) Total: 157.1 ( 1635.7)
-------------------- Stopping criterion: No. of iterations --------------------
Current solution: Total persons: 66597.00
Total automobiles: 59820.84 Additional veh.: .00
Total vehicles: 59820.84 Not assigned: 1452.33
Demand function: Total persons: 66404.89 Function evaluations: 18910
Total automobiles: 59649.20 Additional veh.: .00
Total vehicles: 59649.20 Not assigned: 1452.34
Avg trip times: Currently on network: 18.88 On shortest paths: 18.23
Using demand function: 18.22 Using inverse dem.fct: 17.15
\newpage % time:
Update: .0 ( 31.1) Total: 135.3 ( 1771.0)