case study
- VI Projection and MP FW comparison
- find they all collapse, find where is the problem
- see the performance of MNL based sue
- 公式是什么
- 正確嗎
- 算法
- 編程
Bug:
entropy_left 和 entropy_right相互顛倒防止
LeftTrialOutput = LeftTrialOutput + entropy_left;
RightTrialOutput = RightTrialOutput + entropy_right;
note 這個bug是通過一步步的debug試出來的。
- 用e-5來顯示比%.10lf更高的精度
%.5e //顯示5位數(shù)字
- 檢查是否滿足均衡條件
完全滿足均衡條件
-
Dispersion parameter
Theta=2
Paste_Image.png
Theta=3
Paste_Image.png
Theta=0.5
Paste_Image.png
Theta=0.1
Paste_Image.png
不能達到收斂(Theta=0.1)
-
計算一下平均最小期望
Paste_Image.png
Theta=0.1的時候也不一致。
Paste_Image.png
嚇?biāo)赖耍琫xcel中l(wèi)n試ln,然后就一致了
Paste_Image.png
總結(jié)
FW在解MNL based SEU時就會出現(xiàn)偏差
- congestion situation
同樣,再此Demand下測試離散參數(shù),同樣非常敏感,步長一開始好好的,然后,突然變0,前后解的誤差急劇減少,同時不收斂。這個可以像一開始一樣一步步看。
11/29
ptt不能過高
這時link free flow time, OD demand, BPR對ptt影響都很大。
line search 里面也有bug
for (p_i = 0; p_i < NoPs; p_i++){
entropy_left = entropy_left + p[p_i].Pf_Left * (log(p[p_i].Pf_Left) - 1);
entropy_right = entropy_right + p[p_i].Pf_Right * (log(p[p_i].Pf_Right) - 1);
}
把這兩個問題測完,對Theta不敏感了,Apf符合Logit公式了。收斂的很好
改變Theta=2還是有bug
外部參數(shù)Theta要寫成2.0
到目前為止調(diào)整Theta沒問題了。Demand也可以。
Theta=0.1
符合logit fun
符合流量守恒
前后解相差很小。
Theta=0.01,direction=0;已經(jīng)達到最優(yōu)了。
所得結(jié)論確實與Theta的變化一致。
CNL里面的離散參數(shù)
下層0-1
上層》0
下層=1時,為MNL
CNL有不同表達式,怎么互推
CNL更接近Probit,緩解了獨立性
CNL-UE with FW Debug
- CNL上沒有問題
- CNL excel 印證過,那估計在line search上有偏差
從MNL(SUE)可以看出,output的精度由line search的精度決定。不會比line search的精度高。說錯了,提高line search的精度沒有提高最終結(jié)果的精度。
S4LinkTravelTime(l);
S2CNL_Loading(l, nm, n, od);
S3AON(l, nm);
S5Direct(l, nm);
這幾部出錯的可能性不大
打印輸出line search
line search內(nèi)部沒有問題,都在excel中核對過了
簡化網(wǎng)絡(luò),就考慮三條線的情況。
也是AD符合CNL,line search有問題,不是路徑選擇的問題
將step size adjust 放在循環(huán)外面,對結(jié)果沒有影響。
line search 在縮小到一定程度的時候就不動了。但是步長精度不需要那么高。問題不在這。MNL在line search的時候也有同樣的問題。
不是在已有的基礎(chǔ)上開發(fā),就很難Debug。
如果link travel time是常數(shù),一步就完成。所有流量分到最短路,line search 的時候確實是偏向均衡解的。說明,至少在一定情況下line search是沒問題的。改為線性函數(shù),也不已完成,但是解不正確。看看MNL。對于FFT乘以系數(shù)還是常數(shù),要與flow掛鉤;乘以一個常數(shù),MNL也控制的不好;但是在輸入data的時候,也乘以一個系數(shù),一步就能收斂。下面,把flow這個變量引入試試;加入Flow以后也不收斂,應(yīng)該是收斂的。回到BPR就可以,都是增函數(shù),為啥不一樣?BPR改成1次,也不收斂。這個怎么查?牽一發(fā)而動全身,肯定其他地方也用到了。看一遍流程就知道啦,link funtion是和objective fun連在一起的,link fun 改動,object fun也要改。如果是常數(shù),obj不變化,正好碰巧了。我在VI里調(diào)link fun就沒關(guān)系,因為就一步用地link fun。把link flow調(diào)低,link flow和Obj調(diào)整好,對了,沒錯。不調(diào)低的話
- 那我再試試CNL下面的link travel fun的改變會怎樣。
直接到無窮了;
可能line search還有隱藏的問題
input對不對?
- Link travel time 是BPR+constant+constant
第二天,從CNL-UE測試起。
要修改的地方:頭文件,文件讀寫時的文件名,強行給定的最短路徑(OD pair, mode)
昨天的code 測試亂了,從倉庫里取原來的。又要重新Debug。說明,沒做一點改動都要記錄,不然馬上就忘了。而且代碼和數(shù)據(jù)要放一起,不能分開。
原來的代碼數(shù)據(jù)結(jié)構(gòu)變了,都要改。主要時nest數(shù)據(jù)結(jié)構(gòu)體。
** 在data input要輸入nest結(jié)構(gòu)體**
將cost: nest cost, root cost, MargProb, CondProb都進行了調(diào)整
在probability 的計算代碼也進行了修改
另外,在AON中也發(fā)現(xiàn)了問題
加載的時輔助流量,不是流量(ADem,Dem)
- 將FW與MSA進行對比:
首先,結(jié)果不一致。
第二,MSA的比FW更加符合CNL概率。
第三,MSA的多種固定步長對結(jié)果沒有影響。(0.1,0.2... 1, 1.5)
總結(jié),可以認(rèn)為是line search的問題。 - 用VI的Projection和MSA對比,結(jié)果也不一致
- 想原因,可能是link travel time的表達式不一樣,改成相同的表達式后,結(jié)果果然一致。
- MSA改link cost中的一步,F(xiàn)W要改兩步
然后想到,F(xiàn)W不但要改link cost的表達式,還要改line search里面積分的表達式。測試以后,發(fā)現(xiàn)FW,MSA,Projection對同一個算例求解得到相同的結(jié)果。
3 precision of FW and MSA is still not acceptable
3.1 Is the problem of AON?
membership 0.5-0.5 correct
membership 0.2-0.8 correct
Mu 0.8 correct (一開始是不一樣的,后來檢查一下CNL.xlxs,是原來的計算公式有錯,改過來就完全一樣了)
總結(jié),不是AON的問題,還是要看看line search
3.2 check line search
check MSA: 精度一直在提高,只是比較慢而已。最高1e-6.
check line search: 精度一直在提高,明顯比MSA快。但是仍有上限,20 萬次迭代,最高1e-7. 50萬次迭代,3*e-8. 同時查看AON—CNL,我認(rèn)為沒有問題。
總結(jié):line search 上也沒有問題,可能是FW自身的問題。
- 在MNL(SUE)中出現(xiàn)過的左右顛倒的問題,沒有出現(xiàn)。
- ptt也沒有過高
- line search里面的積分表達式正確
- 全局變量Theta要寫成1.0的形式
- line search 時候的積分表達式不對
3.3 test on larger net
- 規(guī)范輸入格式
- input data format
- input file name
- head file
- shortest path: different origin should be give the shortest path
還是有問題,跑不起來。那就只能一步步Debug。
- 最短路給錯了,Wrong origin
correct:Pred[2] = 15; Pred[3] = 15; Pred[15] = 14; Pred[14] = 5; Pred[5] = 1;
Wrong:Pred[2] = 15; Pred[3] = 15; Pred[15] = 14; Pred[14] = 5; Pred[5] = 4;
CNL pass
all pass
在ND上也能跑起來