## Cube Voyager XCHOICE: The Missing Help Doc

October 22nd, 2013First note: I sent this to the support people at Citilabs recently, so maybe on the next update they'll include this in the help document, as I think it is sorely missing. Or maybe I'm just crazy (you kinda have to be crazy to do transportation modeling*) and have my own way of thinking.

In the OKI model, we have a nested logit mode choice structure that's pretty common for MPOs our size - it's had a history in several other MPOs. The nesting structure looks like this:

The part that I think is missing in the Voyager Help File for XCHOICE is this:

` XCHOICE ALTERNATIVES=LBW, LBP, LBK, EBW, EBP, EBK, LRW, LRP, LRK, WALK, BIKE, DA, SR2, SR3,`

UTILITIESMW=141,142,143,144,145,146,147,148,149,110,111,112,113,114,

DEMANDMW=5,

ODEMANDMW=412,413,414,415,416,417,418,419,420,421,422,405,407,408,

SPLIT=LB 1 LBW 1 LBP 1 LBK,

SPLIT=EB 1 EBW 1 EBP 1 EBK,

SPLIT=LR 1 LRW 1 LRP 1 LRK,

SPLIT=TRAN 0.516 LB 0.516 EB 0.516 LR,

SPLIT=SR 1 SR2 1 SR3,

SPLIT=AUTO 0.516 SR 0.516 DA,

SPLIT=NONM 0.516 WALK 0.516 BIKE,

SPLIT=TOTAL 0.477 AUTO 0.477 TRAN 0.477 NONM,

SPLITCOMP=801,

STARTMW=900

More importantly, WHY this is important:

All those green, blue, red, and yellow marks are pointing things out - like what connects to what and so on. Once these connections are made, you can get answers without a lot of effort. It's quite nice, really. However, I haven't figured out where to put upper-level coefficients, but in my latest estimation runs, those are out.

# More Stuff

One of the more important things to get out of the mode choice model is the logsum values that would be used as the impedance for a gravity model distribution. Once you have the above, it's pretty easy.

First off, make your demand matrix have 100 trips per IJ pair:

`MW[2]=100`

Then, get the exponential of the SPLITCOMP matrix to get a usable logsum value.

`MW[700]=EXP(MW[801])`

Note that in the OKI model (and in other models that use walk access markets), this needs to be done multiple times and accumulated to another matrix:

`MW[701]=MW[701]+(MW[5]*MW[700])`

And then there is some post-processing that needs to be done at the end of the ILOOP:

`JLOOP`

IF(MW[2]>0)

MW[702]=MW[701]/MW[2] ;Denom

ELSE

MW[702]=0.00000000001

ENDIF

MW[704]=(LN(MW[702])/(COEFF[1]*CLSPRM*CLSSUB))+LOGADD

ENDJLOOP

704 is the output matrix.

--

* I have other forms of craziness, too. I've recently announced - and made it "Facebook official" to my close friends and family - that I'm going to run a half marathon next spring.