MSA(Method of Successive Algorithm)算法逻辑及实例

文章目录

前言

一、MSA算法是什么?

二、求解优化问题

1.典型优化问题

 2.求解步骤

三、简单案例

总结


前言

        在城市交通网络配流问题的求解中,MSA(Method of Successive Algorithm)算法作为Frank Wolf算法的变种有非常重要的作用。本文主要介绍了MSA的算法逻辑,最后使用excel来计算一个简单的例子。对上述工作的理解,可以帮助大家将MSA算法转化为matlab代码或者python代码。


一、MSA算法是什么?

        MSA(Method of Successive Algorithm)算法,也叫做连续平均算法,主要思想是将迭代过程中一系列的辅助点进行平均,其中每一个迭代点都是通过求解辅助规划问题得来的 ,而辅助规划问题又是基于前面迭代过程中的辅助。

        与Frank Wolf 算法相比,这种方法的优点是在每次迭代的过程中,不需要通过求解线性搜索问题而得到的迭代步长,而迭代步长是预先确定的,因此MSA算法简单,但是由于缺乏在迭代过程中的调整,该算法在大型路网中收敛速度较慢。

二、求解优化问题

1.典型优化问题

minf(x)\\ s.t. Ax=b\\ x \geqslant 0

其中,Am\times n的矩阵,秩为mbm维的列向量,f(x)是连续可微函数,可行域记为:

D=\left \{ x|Ax = b,x\geq 0 \right \}

PS:

交通分配中常用得到的多项logit模型,可以把出行成本和流量分配的概率结合起来:

 2.求解步骤

        假定在任意点x,目标函数的负梯度即\triangledown f(x)为迭代方向,通过求解下面的线性规划问题可以得到从点x{}'出发的最优可行下降方向

 min\triangledown f({x}')\\ s.t. Ax=b\\ x \geqslant 0

        上面这个线性规划问题就是辅助规划问题,通过求解此问题得到原问题的 辅助变量y 。

        其中,决策变量的x的辅助变量y,之间的迭代关系是:

x^{n+1}=x^{n}+\frac{1}{n}(y^{n}-x^{n})

        当前后两次决策变量的x 的值小于设定误差,则迭代结束。

        备注:交通流量分配的常见logit分配模型,原理就是在出行者选择出行成本低的路径的概率更大,体现在数学形式上就是:

P_{k}^{r,s}=\frac{exp(-\theta*C_{k}^{r,s})}{\sum_{j}exp(-\theta*C_{j}^{r,s})}

其中,P_{k}^{r,s}代表在r到s之间的第k条路径被选择的概率。

三、简单案例

此案例参考:B站用户: 小魔仙的babala(https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1TK411n77H

案例:给定初始条件,c_{1}^{0}= 5, c_{2}^{0}= 5,\theta =0.5,总流量为10。下图代表的是两条路径的出行成本

,求解最后两条路径的均衡流量。

迭代过程如下:

 path flowpath probpath cost logit probpath flow
第一次迭代path15.000.511.000.11921.19
path25.000.57.000.88088.81
      
 path flowpath probpath cost logit probpath flow
第二次迭代path11.190.1192029223.380.976159.76
path28.810.88079707810.810.023850.24
      
 path flowpath probpath cost logit probpath flow
第三次迭代path15.480.54767790611.950.062080.62
path24.520.4523220946.520.937929.38
      
 path flowpath probpath cost logit probpath flow
第四次迭代path13.860.3858133388.720.428694.29
path26.140.6141866628.140.571315.71
      
 path flowpath probpath cost logit probpath flow
第五次迭代path13.970.3965323728.930.389843.90
path26.030.6034676288.030.610166.10
      
 path flowpath probpath cost logit probpath flow
第六次迭代path13.950.3951938618.900.394633.95
path26.050.6048061398.050.605376.05
      
 path flowpath probpath cost logit probpath flow
第七次迭代path13.950.395099228.900.394973.95
path26.050.604900788.050.605036.05

我们看到第6次迭代和第7次迭代之后,两条路径的流量已经趋于稳定,因此我们认为达到了UE状态。


总结

        MSA算法是交通流分配问题中的常见算法,在论文中也常见,掌握它的计算逻辑,能够更好的理解MSA算法的python和matlab代码,也是帮助我自己理解:)

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值