線性規(guī)劃之單純形法

轉(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)的單純形表:

從這個表中我們可以得到以下信息:

  1. X3 = (2,3,0,6,0)T是基本可行解;
  2. X3的目標函數(shù)值是z=7;
  3. x3的檢驗數(shù)大于0,讓x3進基能夠增加目標函數(shù)值。

然后通過剛才的方法讓x3進基,得到新的基本可行解的單純形表:



從這個表我們可以得知:

  1. X4 = (3.5,1.5,7.5,0,0)T是基本可行解;
  2. X4的目標函數(shù)值是z=8.5;
  3. 非基變量的的檢驗數(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)表中,基變量中仍含有人工變量,這說明啥?

這說明,原問題根本就無解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內(nèi)容