文章目录
前言
在城市交通网络配流问题的求解中,MSA(Method of Successive Algorithm)算法作为Frank Wolf算法的变种有非常重要的作用。本文主要介绍了MSA的算法逻辑,最后使用excel来计算一个简单的例子。对上述工作的理解,可以帮助大家将MSA算法转化为matlab代码或者python代码。
一、MSA算法是什么?
MSA(Method of Successive Algorithm)算法,也叫做连续平均算法,主要思想是将迭代过程中一系列的辅助点进行平均,其中每一个迭代点都是通过求解辅助规划问题得来的 ,而辅助规划问题又是基于前面迭代过程中的辅助。
与Frank Wolf 算法相比,这种方法的优点是在每次迭代的过程中,不需要通过求解线性搜索问题而得到的迭代步长,而迭代步长是预先确定的,因此MSA算法简单,但是由于缺乏在迭代过程中的调整,该算法在大型路网中收敛速度较慢。
二、求解优化问题
1.典型优化问题
其中,是
的矩阵,秩为
,
是
维的列向量,
是连续可微函数,可行域记为:
PS:
交通分配中常用得到的多项logit模型,可以把出行成本和流量分配的概率结合起来:
2.求解步骤
假定在任意点,目标函数的负梯度即
为迭代方向,通过求解下面的线性规划问题可以得到从点
出发的最优可行下降方向
上面这个线性规划问题就是辅助规划问题,通过求解此问题得到原问题的 辅助变量 。
其中,决策变量的的辅助变量
,之间的迭代关系是:
当前后两次决策变量的 的值小于设定误差,则迭代结束。
备注:交通流量分配的常见logit分配模型,原理就是在出行者选择出行成本低的路径的概率更大,体现在数学形式上就是:
其中,代表在r到s之间的第k条路径被选择的概率。
三、简单案例
此案例参考:B站用户: 小魔仙的babala(https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1TK411n77H)
案例:给定初始条件,,总流量为10。下图代表的是两条路径的出行成本
,求解最后两条路径的均衡流量。
迭代过程如下:
path flow | path prob | path cost | logit prob | path flow | ||
第一次迭代 | path1 | 5.00 | 0.5 | 11.00 | 0.1192 | 1.19 |
path2 | 5.00 | 0.5 | 7.00 | 0.8808 | 8.81 | |
path flow | path prob | path cost | logit prob | path flow | ||
第二次迭代 | path1 | 1.19 | 0.119202922 | 3.38 | 0.97615 | 9.76 |
path2 | 8.81 | 0.880797078 | 10.81 | 0.02385 | 0.24 | |
path flow | path prob | path cost | logit prob | path flow | ||
第三次迭代 | path1 | 5.48 | 0.547677906 | 11.95 | 0.06208 | 0.62 |
path2 | 4.52 | 0.452322094 | 6.52 | 0.93792 | 9.38 | |
path flow | path prob | path cost | logit prob | path flow | ||
第四次迭代 | path1 | 3.86 | 0.385813338 | 8.72 | 0.42869 | 4.29 |
path2 | 6.14 | 0.614186662 | 8.14 | 0.57131 | 5.71 | |
path flow | path prob | path cost | logit prob | path flow | ||
第五次迭代 | path1 | 3.97 | 0.396532372 | 8.93 | 0.38984 | 3.90 |
path2 | 6.03 | 0.603467628 | 8.03 | 0.61016 | 6.10 | |
path flow | path prob | path cost | logit prob | path flow | ||
第六次迭代 | path1 | 3.95 | 0.395193861 | 8.90 | 0.39463 | 3.95 |
path2 | 6.05 | 0.604806139 | 8.05 | 0.60537 | 6.05 | |
path flow | path prob | path cost | logit prob | path flow | ||
第七次迭代 | path1 | 3.95 | 0.39509922 | 8.90 | 0.39497 | 3.95 |
path2 | 6.05 | 0.60490078 | 8.05 | 0.60503 | 6.05 |
我们看到第6次迭代和第7次迭代之后,两条路径的流量已经趋于稳定,因此我们认为达到了UE状态。
总结
MSA算法是交通流分配问题中的常见算法,在论文中也常见,掌握它的计算逻辑,能够更好的理解MSA算法的python和matlab代码,也是帮助我自己理解:)