美文网首页
MNL(SUE) --> CNL-UE with FW

MNL(SUE) --> CNL-UE with FW

作者: Silly_N_Fool | 来源:发表于2016-11-25 19:32 被阅读0次

    case study

    1. VI Projection and MP FW comparison
    2. find they all collapse, find where is the problem
    3. see the performance of MNL based sue
    4. 公式是什么
    5. 正确吗
    6. 算法
    7. 编程

    Bug:

    entropy_left 和 entropy_right相互颠倒防止

    LeftTrialOutput = LeftTrialOutput + entropy_left;
    RightTrialOutput = RightTrialOutput + entropy_right;
    note 这个bug是通过一步步的debug试出来的。
    
    1. 用e-5来显示比%.10lf更高的精度
    %.5e //显示5位数字
    
    1. 检查是否满足均衡条件
    计算机跑出的结果

    完全满足均衡条件


    看看是否满足均衡条件
    1. 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
    1. 计算一下平均最小期望


      Paste_Image.png

      Theta=0.1的时候也不一致。


      Paste_Image.png
      吓死爹了,excel中ln试ln,然后就一致了
      Paste_Image.png

    总结

    FW在解MNL based SEU时就会出现偏差

    1. congestion situation
    在Deamnd加倍,path cost比以前多10倍的情况下,表现良好,达到均衡,最小期望值也一样

    同样,再此Demand下测试离散参数,同样非常敏感,步长一开始好好的,然后,突然变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

    外部参数Theta要写成2.0

    到目前为止调整Theta没问题了。Demand也可以。

    Theta=0.1

    符合logit fun
    符合流量守恒
    前后解相差很小。
    Theta=0.01,direction=0;已经达到最优了。

    Paste_Image.png

    所得结论确实与Theta的变化一致。
    CNL里面的离散参数
    下层0-1
    上层》0
    下层=1时,为MNL
    CNL有不同表达式,怎么互推
    CNL更接近Probit,缓解了独立性

    CNL-UE with FW Debug

    1. CNL上没有问题
    2. CNL excel 印证过,那估计在line search上有偏差
      从MNL(SUE)可以看出,output的精度由line search的精度决定。不会比line search的精度高。说错了,提高line search的精度没有提高最终结果的精度。
      S4LinkTravelTime(l);
      S2CNL_Loading(l, nm, n, od);
      S3AON(l, nm);
      S5Direct(l, nm);
      这几部出错的可能性不大
      打印输出line search
      line search内部没有问题,都在excel中核对过了
      简化网络,就考虑三条线的情况。
      也是AD符合CNL,line search有问题,不是路径选择的问题
      将step size adjust 放在循环外面,对结果没有影响。

    line search 在缩小到一定程度的时候就不动了。但是步长精度不需要那么高。问题不在这。MNL在line search的时候也有同样的问题。
    不是在已有的基础上开发,就很难Debug。

    如果link travel time是常数,一步就完成。所有流量分到最短路,line search 的时候确实是偏向均衡解的。说明,至少在一定情况下line search是没问题的。改为线性函数,也不已完成,但是解不正确。看看MNL。对于FFT乘以系数还是常数,要与flow挂钩;乘以一个常数,MNL也控制的不好;但是在输入data的时候,也乘以一个系数,一步就能收敛。下面,把flow这个变量引入试试;加入Flow以后也不收敛,应该是收敛的。回到BPR就可以,都是增函数,为啥不一样?BPR改成1次,也不收敛。这个怎么查?牵一发而动全身,肯定其他地方也用到了。看一遍流程就知道啦,link funtion是和objective fun连在一起的,link fun 改动,object fun也要改。如果是常数,obj不变化,正好碰巧了。我在VI里调link fun就没关系,因为就一步用地link fun。把link flow调低,link flow和Obj调整好,对了,没错。不调低的话

    • 那我再试试CNL下面的link travel fun的改变会怎样。
      直接到无穷了;

    可能line search还有隐藏的问题
    input对不对?

    1. Link travel time 是BPR+constant+constant

    第二天,从CNL-UE测试起。

    要修改的地方:头文件,文件读写时的文件名,强行给定的最短路径(OD pair, mode)
    昨天的code 测试乱了,从仓库里取原来的。又要重新Debug。说明,没做一点改动都要记录,不然马上就忘了。而且代码和数据要放一起,不能分开。
    原来的代码数据结构变了,都要改。主要时nest数据结构体。
    ** 在data input要输入nest结构体**
    将cost: nest cost, root cost, MargProb, CondProb都进行了调整
    在probability 的计算代码也进行了修改
    另外,在AON中也发现了问题
    加载的时辅助流量,不是流量(ADem,Dem)

    • 将FW与MSA进行对比:
      首先,结果不一致。
      第二,MSA的比FW更加符合CNL概率。
      第三,MSA的多种固定步长对结果没有影响。(0.1,0.2... 1, 1.5)
      总结,可以认为是line search的问题。
    • 用VI的Projection和MSA对比,结果也不一致
    • 想原因,可能是link travel time的表达式不一样,改成相同的表达式后,结果果然一致。
    • MSA改link cost中的一步,FW要改两步
      然后想到,FW不但要改link cost的表达式,还要改line search里面积分的表达式。测试以后,发现FW,MSA,Projection对同一个算例求解得到相同的结果。

    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,是原来的计算公式有错,改过来就完全一样了)
    总结,不是AON的问题,还是要看看line search

    3.2 check line search

    check MSA: 精度一直在提高,只是比较慢而已。最高1e-6.
    check line search: 精度一直在提高,明显比MSA快。但是仍有上限,20 万次迭代,最高1
    e-7. 50万次迭代,3*e-8. 同时查看AON—CNL,我认为没有问题。
    总结:line search 上也没有问题,可能是FW自身的问题。

    • 在MNL(SUE)中出现过的左右颠倒的问题,没有出现。
    • ptt也没有过高
    • line search里面的积分表达式正确
    • 全局变量Theta要写成1.0的形式
    • line search 时候的积分表达式不对

    3.3 test on larger net

    • 规范输入格式
    • 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上也能跑起来

    相关文章

      网友评论

          本文标题:MNL(SUE) --> CNL-UE with FW

          本文链接:https://www.haomeiwen.com/subject/eefwpttx.html