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.
You must be logged in to post a comment.