乐趣区

关于算法:什么是网络单纯型算法

摘要:单纯型算法是求解线性规划问题(LP)的一个经典算法,在单纯型算法中最耗时的模块是计算矩阵的逆矩阵的算法。网络单纯形算法是单纯形算法的一个非凡版本,它应用生成树基来更无效地解决具备纯网络模式的线性规划问题。

本文分享自华为云社区《网络单纯型算法简介》,原文作者:云小凡。

前言

单纯型算法是求解线性规划问题(LP)的一个经典算法,在单纯型算法中最耗时的模块是计算矩阵的逆矩阵的算法。网络单纯形算法是单纯形算法的一个非凡版本,它应用生成树基来更无效地解决具备纯网络模式的线性规划问题。这样的 LP 问题能够用有向图上的公式来建模,作为一个最小费用流问题。

网络单纯型是指如下模式的 LP 问题:

其中,每列只蕴含一个 1 和一个 -1,其余系数都是 0。上面是一个例子:

该问题能够看做是最小费用流问题(Minimum cost flow problems)的图模式。图 G =(V,E),顶点 V 示意行(束缚),边 E 示意列(变量),对于矩阵 A 中一个列,第 i 行有个 1,第 k 行有个 -1,示意图 G 中的一条边(i,k)。

对于上述例子,能够用下图示意:

网络流问题满足 Hoffman&Gale’s conditions, 因而能够确保失去整数解。

关联矩阵:

对于图 G =(V,E)的关联矩阵 A 能够示意为:

上例中的关联矩阵能够示意为:

门路:


连通图:图中任意两个顶点都有门路。
生成树:图 G 的一个子图 T,蕴含图 G 中所有顶点。
性质:rank(A)=n-1,n 是结点个数。

咱们新增一个变量 w,A 中减少一个列

,r∈{1,2……n}中任意一个值,w=0,则 LP 模型为:

其中,r 称为根节点 (root vertex),w 称为根边(root edge)(going nowhere)
对于上述例子,如果抉择根节点 r=2

A 是图 G 的关联矩阵,T 是 G 的生成树,则 (A│e_r) 的基 B =e_r∪{a_e |e∈T}

单纯型算法:



咱们能够从根节点进行先序遍历,失去 y2=0, y1-y2=1, y1-y3=10,即顺次遍历基 5,基 1,基 4
伪代码:(递归)
solve(Vertex p,Tree S){// p 是树 S 的根节点
Vertex v=root(S);
if(v==r) y[r]=c[w];
else if ((p,v)∈E y[v]=y[p]-c[(p,v)];
else y[v]=y[p]+c[(v,p)];
solve(v,S.left());
solve(v,S.right());
}

参考文献:https://www.cs.upc.edu/~erodr…

点击关注,第一工夫理解华为云陈腐技术~

退出移动版