什么是網絡單純型算法


摘要:單純型算法是求解線性規划問題(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/~erodri/webpage/cps/theory/lp/network/slides.pdf

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM