轉(zhuǎn)載請注明出處 http://www.lxweimin.com/p/dd0761a2fdfd
作者:@貳拾貳畫生
單純形法應(yīng)用于求解線性規(guī)劃(LP)問題中最優(yōu)解。其主要思想是,沿著可行解區(qū)域的邊界走,從一個點跳到另一個點,直到找到最優(yōu)解。
一. 詳述單純形法
單純形法應(yīng)用在線性規(guī)劃的標準模型上,任何一個線性規(guī)劃的一般形式都可以化為標準模型。
線性規(guī)劃模型的一般形式為:
把它轉(zhuǎn)換為標準型是要求所有的約束都是等式約束,且所有的決策變量非負。
如下面的形式:
舉個例子:
那么很容易就可以寫出這個線性規(guī)劃問題的數(shù)學(xué)模型:
這是一般形式,我們轉(zhuǎn)換為標準型:
是的,我們增加了三個變量x3, x4, x5。這樣就把不等式約束變成了等式約束,且決策變量都非負。
再重復(fù)一遍,線性規(guī)劃的標準型必為以下形式:
它有三個基本要素:1. 一個明確的目標函數(shù);2. 等式約束; 3. 決策變量非負。
對于標準型我們有兩個基本假設(shè):
1. 系數(shù)矩陣A的行向量線性無關(guān)。
2. 系數(shù)矩陣A的列數(shù)大于其行數(shù),即n>m。因為如果n<m,那么不滿足1, 如果n=m,那么該線性規(guī)劃問題有唯一解,既然有唯一解,那就沒有優(yōu)化的必要了。所以,必有n>m。
回到剛才那個例子,我們可以將找個標準型寫為如下形式:
這個例子m = 3, n = 5。那么我們可以用三個變量表示所有的五個變量,這三個變量我們稱之為基變量。上圖中,x3, x4, x5的系數(shù)是一個單位陣。我們把這種形式的等式約束稱為典式。
觀察這個典式,我們可以很容易的看出其一個基本可行解:(0, 0, 15, 24, 5)T,即非基變量等于0,基變量等于等式右邊的常數(shù)。這個解,我們可以把它想象成基本可行解區(qū)域的一個頂點,我們知道最優(yōu)解也在頂點上,那么我們只要沿著邊界找這個最優(yōu)頂點就可以了。
對于頂點(0, 0, 15, 24, 5)T,它的x3, x4, x5是基變量,那么與該頂點相鄰的其他頂點的基變量有什么關(guān)系呢?事實上,與之相鄰的頂點的所有基變量中只有一個基變量發(fā)生了變化。這是可以驗證的。所以,接下來的工作就是從x1, x2中選一個非基變量進基成為基變量,從x3, x4, x5中選一個基變量出基成為非基變量。
那么問題來了,我們怎么選擇進基變量和出基變量?
假設(shè)我們想要x2進基,那么根據(jù)基本可行解的表示式,我們必須通過初等行變換的形式讓x2只出現(xiàn)在一個等式約束中,就是把x2的系數(shù)變成(1,0,0)T或(0,1,0)T或(0,0,1)T的形式。
假設(shè)我們把x2變成(0,0,1)T的形式,初等行變換后得到:
我們發(fā)現(xiàn)等式右邊的常數(shù)有一個變成負數(shù)-2,這是不可以的,因為我們知道決策變量有非負約束。所以,在選擇進行初等行變換時,應(yīng)注意選擇(右邊常數(shù)/進基變量系數(shù))最小的那一行。這個例子中,x2進基,15/5 = 3, 24/2 = 12, 5/1=5,3最小,那么將x2系數(shù)轉(zhuǎn)換為(1,0,0)T的形式,與此同時,出基變量也就確定了那就是x3。所以,我們得到:
其基本可行解為(0,3,0,18,2)T。
若此時,我們又想讓x3進基,應(yīng)當(dāng)注意只能將其系數(shù)化為(1,0,0)T的形式,因為x3第二行與第三行的系數(shù)都為負數(shù),若保留此兩行會將右邊的常數(shù)變成負數(shù)。所以,只能保留進基變量系數(shù)的非負行。
現(xiàn)在對于例子
我們得到了兩個基本可行解X1 = (0,0,15,24,5)T, X2 = (0,3,0,18,2)T,記目標函數(shù)f(X) = 2x1 + x2 + 0x3 + 0x4 + 0x5
則f(X1) = 0, f(X2) = 3
那么我們怎么找到最優(yōu)解呢?
我們知道 X2 = (0,3,0,18,2)T 的約束的表示式為:
從這個表示式中我們可以得到基變量和非基變量的函數(shù)關(guān)系,將這個函數(shù)關(guān)系帶入到f(X) = 2x1 + x2 + 0x3 + 0x4 + 0x5中,就得到
f(X) = 3 + 2x1 - 0.2x3 = f(X2) + 2x1 - 0.2x3,(只保留非基變量x1,x3)
發(fā)現(xiàn)什么沒有?
對于可行解X2 = (0,3,0,18,2)T,x1,x3是非基變量啊,非基變量是0啊。但是,我們下一步不是選擇進基變量嗎,進基變量不是從非基變量里選嗎,我們選x1啊,為啥?x1的系數(shù)是正數(shù)2啊!我們這個例子是求z的最大值,如果x1進基,那么必然會讓f(X)增大,因為我們的決策變量都是正數(shù),正數(shù)乘正數(shù)還是正數(shù),增量肯定是大于0的。我們看到x3的系數(shù)是-0.2,如果讓x3進基的話,增量肯定是小于0的。
如果x1, x3的系數(shù)都大于0怎么辦?那隨便選啊。
如果x1,x3的系數(shù)都小于0怎么辦?哈哈,有人可能就意識到了,非基變量的系數(shù)都小于0,選誰進基都會造成f(X)變小,我們不是求最大嗎?那我們誰也不選啊,這個問題已經(jīng)結(jié)束了,我們已經(jīng)找到最優(yōu)解了!
所以,選擇進基變量的問題,以及判斷找到最優(yōu)解的問題就都解決了。
我們一般使用單純形表來直觀表示這個過程。
還是可行解X2 = (0,3,0,18,2)T,它對應(yīng)的單純形表如下:
最左邊一列是基變量,最右邊一列是約束右邊的常數(shù)項,中間一坨是決策變量的系數(shù)。最下邊一行是目標函數(shù)z = 2x1 + x2 + 0x3 + 0x4 + 0x5。最下面一行決策變量的系數(shù)我們稱之為檢驗數(shù)。
我們通過行變換將最后一行的基變量前面系數(shù)變成0,就得到下面的單純形表:
我們稱之為X2的單純形表。利用這個表,我們可以很容易的獲得讓x1進基后的基本可行解的單純形表,先確定讓x5出基。
然后通過行變換將x1所在列除了第三行以外的系數(shù)變成0,就可得到新的基本可行解對應(yīng)的單純形表:
從這個表中我們可以得到以下信息:
- X3 = (2,3,0,6,0)T是基本可行解;
- X3的目標函數(shù)值是z=7;
- x3的檢驗數(shù)大于0,讓x3進基能夠增加目標函數(shù)值。
然后通過剛才的方法讓x3進基,得到新的基本可行解的單純形表:
從這個表我們可以得知:
- X4 = (3.5,1.5,7.5,0,0)T是基本可行解;
- X4的目標函數(shù)值是z=8.5;
- 非基變量的的檢驗數(shù)都小于0,任何非基變量進基都不能使目標函數(shù)值增加。
至此,我們已經(jīng)得到該問題的最優(yōu)解X4。
二. 幾種特殊情況
1. 退化問題
我們知道,對于一個基本可行解,一般情況下它的基變量是大于0,非基變量等于0。退化情況是,我們有一個基變量也等于0。那么,這個基本可行解就會對應(yīng)于多個可行基陣。
舉個例子:
X = (3,3,0,0,0)T是該問題的可行解
我們可以令x3,x4為非基變量, 也可以令x3,x5或x4,x5為非基變量。
退化情況存在的問題在于,經(jīng)過一次進出基迭代后得到的是同一個基本可行解,因此有可能出現(xiàn)迭代算法在一個基本可行解的幾個基矩陣之間循環(huán)不止的情況。
所以,保證單純形法收斂的充分條件是:在迭代過程中產(chǎn)生的每個基本可行解的基變量數(shù)值都嚴格大于0。
2. 如果xj的系數(shù)都小于0
在迭代過程中,如果某一個決策變量的系數(shù)都小于0了,這代表什么?
舉例:
如上圖,我們可以把x2放在等式右邊,看出什么沒有?x2可以趨于無窮大。
3. 如果非基變量xj的檢驗數(shù)為0
如上圖, 非基變量x4的檢驗數(shù)為0了,根據(jù)最優(yōu)性條件,讓其進基并不能繼續(xù)優(yōu)化目標函數(shù)值。但是,x4進基后還是會得到一個基本可行解,且目標函數(shù)值與當(dāng)前結(jié)果相同。這意味這什么?
目標不能再優(yōu)化,但是又有不同的基本可行解,啥意思?說明該問題有無窮多個最優(yōu)解。
所以,對于求max的線性規(guī)劃問題,如果所有檢驗數(shù)均滿足<=0,則說明已經(jīng)得到了最優(yōu)解,若此時某非基變量的檢驗數(shù)=0,則說明該優(yōu)化問題有無窮多最優(yōu)解。
三. 如何確定初始基本可行解
單純形法是從一個初始的基本可行解開始的,出基入基,知道找到最優(yōu)可行解。
問題是,我們怎么得到那個初始的基本可行解啊?
最基本的方法是添加人工變量
假設(shè)原問題的約束是這樣的:
x1 + 2x2 + 3x3 = 1
2x + x3 = 2
那么我們再加兩個變量x4, x5,把約束變成這樣:
x1 + 2x2 + 3x3 + x4 = 1
2x + x3 + x5 = 2
我們就把約束變成了典式,可以直接得到一個基本可行解(0,0,0,1,2)T,找個基本可行解的基變量是x4, x5,那么接下來的工作就是通過出基入基把x4,x5都變成非基變量,這樣它們的值就可以為0, 從而得到原問題的可行解。
現(xiàn)在有個問題,如果在最優(yōu)表中,基變量中仍含有人工變量,這說明啥?
這說明,原問題根本就無解。