線性規劃 單純形演算法

2021-08-07 20:35:32 字數 3758 閱讀 5269

作者 dylanfrank(滔滔)

這裡簡要總結一下線性規劃的單純形演算法,做如下幾個方面的總結,其餘以後再來填坑.

先看這樣乙個問題

我們很容易用下面的數學語言來描述這個問題ma

xzs.

t6x1

+4x2

x1+2

x2−x

1+x2

x2xi

=5x1

+4x2

≤24≤6

≤1≤2

≥0如果我們用幾何來描述這個問題的話則是這樣的

其中陰影部分表示可行域(feasible region)

黑色加粗的線條表示邊界

兩個邊界的交點稱為角點(corner-point cp)

在可行域上的角點稱謂角點可行解(cpf)

共享一邊的角點稱為角點鄰接角點(adj cpf)

我們在這裡不加證明的指出(以後有空再填坑),線性規劃的最優解一定在cpf,並且有優性測試 (optimal test),若某乙個cpf的相鄰角點的(目標函式)值都不比這個cpf優,則這個cpf就是最優解.

由此我們不難得到乙個簡單的演算法:

從乙個初始cpf開始,沿著比它更優的

adj cpf 前行,若找到乙個 cpf 這個cpf的所有 adj cpf不比 它優,則這就是最優解.比如上例中會在c點找到最優解

這就是單純形演算法,不過幾何表示畢竟不能讓計算機簡單執行,因此我們需要將其轉化為代數形式。

線性規劃的標準代數表達,(本文採用《introduction to operation research》清華大學影印版) 的表示.ma

xzs.

t∑i=

1naj

ixix

i=∑i

=1nc

ixi≤

bj(j

=1,2

,…,m

)≥0,

i=1,

2,3,

…,n

我們後面會發現其他的形式都可以很容易表示為標準形式.

我們看到,由上面幾何版的******x 演算法,我們首先需要乙個初始解,為了方便找到初始解,同時也為了能讓計算機好進行運算,需要把不等式轉化為等式,這裡我們引入鬆弛變數(slack variable),對每個函式約束我們都引入乙個鬆弛變數(slack variable) xn

+j,x

n+j≥

0 比如上面的例子

6x

1+4x

2≤24

引入鬆弛變數(以後簡寫sv) x3

, 滿足 x3

≥0

6x

1+4x

2+x3

=24

可以發現這個式子和上面的約束是等價的(將x3

≥0移到一邊)

引入sv 的形式成為增廣形式,(argument form),第乙個例子的增廣形式為ma

xzs.

t6x1

+4x2

+x3x

1+2x

2+x4

−x1+

x2+x

5x2+

x6xi

=5x1

+4x2

=24=6

=1=2

≥0這種形式的解稱為增廣解,需要說明的是這兩種解是一致的,增廣解的增廣變數恰好是用原式表示的,如最優解中一定有:

x3

=24−(

6x1+

4x2)

基解(basic solution):這個對應的是原始形式中的角點解的增廣.下面簡單說一下,基解的性質:

#basic var (基本變數的數目)=函式限制的數目。

# non-basic var = #var - #basic var = 線性規劃系統的自由度

non-basic var =0

如果 基本變數滿足非負限制,則基解稱為基本可行解(basic feasible solution bf),我們後面需要關注的就是這個基本可行解bf,這對應的是原始形式中的cpf的擴充。(非鬆弛變數為0是初始解)

下面介紹單純形演算法:

初始化,解除限制,引入鬆弛變數,將目標函式寫成(z

−(su

mni=

1cix

i)=0

) 記作第0行

最優性測試,選出第0行中係數最小的變數(負的最多),判斷係數是否小於0,若是結束輸出最優解,否則進入迭代,稱選中變數為進基變數(變數不為0,成為基本變數)

進入迭代,進基變數對應的列稱為軸列,pivot col,進行最優比率測試,判斷,進基變數能最大增加多少. 對於軸列中係數大於0的列,用等式右邊值除以係數得到每個等式的比率.,最小的乙個作為瓶頸行,稱為軸行(pivot row)

用軸行進行高斯肖元,回到第二步.

結合具體的例子就好理解了,如上面的第乙個例子

第一次迭代,x1

的係數最小,且為負,選為pivot col,對其進行最小比率測試,第一行最小,選做pivot row,用它進行高斯肖元,得到第二次迭代的**. x3

成為非基變數…依次下去得到第3次迭代結果.

需要注意的是第一列標明的變數對應的值為右邊的解值.第一行變數中為正的變數取0.

處理等式限制 ∑a

i∗xi

=b,有兩種方法,一種是大m 方法,引入人工變數,一種是將其表示為如下形式∑a

i∗xi

∑ai∗

xi≤b

≥b大m方法下面再介紹∑a

i∗xi

≤−b,

b>

0 ,乘乙個負號變為 ∑−

ai∗x

i≥b

如0.6x1

+0.4x2

≥6, 引入 x3

>

0 ,轉化為等式

0.6x1+

0.4x2−

x3=6

,這是等價的

目標函式乘-1即如x

i≥−l

,令x′

i=xi

−l 即

xi∈(

−inf

,inf

) , 令x

i=x+

i−x−

i,x+

i,x−

i>

0 ,需要注意的是若有很多變數均是無界限制,可以只取乙個變數代替x−

i ,而不必對每個無界變數都引入兩個變數.

未完待續…..

線性規劃 單純形演算法例項

例 解最優化問題 min x1 x2 2x1 x2 12 x1 2x2 9 xi 0 i 1,2,3,4 改寫成標準形式,引入鬆弛變數 2x1 x2 x3 12 x1 2x2 x4 9 xi 0,i 1,2,3,4 列出單純形表 x1x2 x3x4bx3 2110 12x412 019c 1100 ...

線性規劃 單純形法

線性規劃是求乙個線性多項式的最值。線性規劃有兩種形式 1.標準型 不等式型 2.鬆弛型 除了非負約束,其他都是等式變數名稱 在res x y z中。1.基本變數,基本變數是res。2.非基本變數,如x,y,z。單純形法 適用於鬆弛型。單純形法是不斷通過迭代來增大最大值。達到無法更新時,就是最大值。這...

線性規劃 單純形法

單純形法 x method 單純形法的思路總結 其它情況 參考文獻 目標函式是線性的,約束條件是線性等式或不等式,每個變數都取實數值.minimize ct xsubject to ax bx 0 begin text c x text a x b x geq 0 end minimize subj...