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`

- Auto demand - this matrix contains the assigned auto trips.
`upqau`

- Auto times - this matrix contains the auto times
corresponding to the shortest paths using the auto link
and turn times based on the current network volumes.
`fpqau`

- Demand function values - this is the demand matrix obtained
by applying the demand function to the current auto times
`upqau`

. `wpqau`

- Inverse demand function values - applying the demand functions to
these "time" values always yields the current auto demand
`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)