最优传输系列是基于Computational Optimal Transport开源书的读书笔记
3.4.2 The North-West Corner Rule
既然3.4里已经说明只有可行多面体的顶点才可能是最优解,3.4.1说明一个顶点解一定不存在环线,3.4.2里也就很顺理成章地介绍了能够得到顶点的算法,向得到完整最优化算法更进一步。
西北角算法是一种启发式算法(heuristic),能够在 n + m n+m n+m步计算后给出一个 U ( a , b ) U(a,b) U(a,b)的顶点
这里注意 U ( a , b ) U(a,b) U(a,b)是所有可行的原始Kantorovich问题解 P P P的集合–这也意味着西北角算法所帮助枚举的是原始Kantorovich问题,而不是它的对偶问题
算法简单地用文字表达就是,对于每个 P [ i ] [ j ] P[i][j] P[i][j],如果a[i]中剩余的出发质量小于b[j]中剩余的到达质量,那么就让a[i]饱和,b[j]还没有饱和,所以i++,j不变。如果a[i]中的剩余大于b[j]中的剩余,则饱和b[j],j++。如果两者相等,则刚好同时饱和,i和j都增加。
西北角算法伪代码:
注:P[i][:]这一行的和必须等于a[i],P[:][j]这一列的和等于b[j],这是最基本的质量守恒。 row_remain是a[i]总质量减去已经传输的质量,column_remain则是b[j]的剩余流量。