線性規劃專題——SIMPLEX 單純形演算法(二)
阿新 • • 發佈:2018-12-15
前言
線性規劃專題——SIMPLEX 單純形演算法(一) 提到了在線性規劃問題的以下結論:
- 問題的所有可行解構成了一個n-m維度的多胞型
- 而且最優解會在多胞型的頂點取得。
- 每個頂點對著係數矩陣的一組基,或者係數矩陣的每組基對應著一個頂點。
- 同時我們給出了多邊形或者更一般的多胞型的頂點的定義:頂點是那些特殊點,對於這些點而言,無法找到多邊形內部兩個不同的點,使得頂點在這兩個內部點形成的線段內。同時我們給出了多邊形或者更一般的多胞型的頂點的定義:頂點是那些特殊點,對於這些點而言,無法找到多邊形內部兩個不同的點,使得頂點在這兩個內部點形成的線段內。
例如上面這個多邊形裡面,A,B,C是頂點,這三個點就不在任何多邊形內點所形成的線段內部。而E不是頂點,那麼總是可以找到任意多條線段使得E線上段的內部。 - 頂點的解的格式:對於一個 的係數矩陣 來說,且 ,它表示 約束, 個未知數。那麼這個係數矩陣內每組基含有 線性無關的列。頂點的解的格式:至少 個0,剩下每一個 都對應著矩陣 的第 列選為基本列下的解。
OK,本章就來解決單純型法剩下的幾個問題。
- 如何從一個頂點轉移到另外一個頂點?
- 什麼時候單純型演算法停止?
- 如何生成第一個可行解,或者可行頂點?
如何從一個頂點轉移到另外一個頂點?
假設對於如下化為鬆弛型的線性規劃:
我們提取出它的係數矩陣,並且找到它的一個頂點。
這個頂點是:
,注意這裡的藍色的
。他們的值不為0,那麼他們對應的列:第1列,第4列,第6列,第7列構成了係數矩陣的一組基。
現在,我們從
出發,構造出一個新的頂點出來。
因為每組頂點都對應這一組基,於是這個問題就等價於從原來由第1列、第4列、第6列、第7列形成的一組基構造出一個新的基來。
我們知道,這個係數矩陣是包含了 列的,在示例中就是7列,而這個矩陣的rank,又是 ,也就是4。因此,為了構造一個新的基,我們只要把舊的那組基本列裡面換下一列,然後從原來非基本列裡面選出一列放進去就又形成了一組基。
例如,現在我們想把係數矩陣的第三列放進來。那麼應該把舊基本列裡面那個列踢出去呢?
第三列本來是不屬於基本列的,那麼第三列肯定是可以由舊的基:第2列、第4列、第5列、第6列線性表出的。
下面,我們用 表示矩陣A的第i列, 表示矩陣A的第j行。
顯然
構成了
的基本列,因為他們正好是一個元素個數為4的線性無關組。
於是
必然可以由這組基本列線性表出。怎麼計算係數呢?
假設
,把
並排在一起形成一個新的矩陣,那麼這可以寫成矩陣的形式:
解這個線性方程組就是了。最後可以解的:
,
於是兩邊同時減去
得到:
我們整理一下,按列下標遞增的方式寫一下: