Next: Transit Time Components by Modes Up: EMME/2 News 7 May 1989 Previous: Computation of Traversal Matrices

# Variable Demand Auto Assignment

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)```

Next: Transit Time Components by Modes Up: EMME/2 News 7 May 1989 Previous: Computation of Traversal Matrices

Heinz Spiess, EMME/2 Support Center, Thu Jun 6 14:17:23 MET DST 1996