線性規划中的單純形法與內點法(原理、步驟以及matlab實現)(二)


線性規划中的單純形法與內點法(原理、步驟以及matlab實現)(一)中,我們討論了單純形法的原理和普通單純形法的應用,本文接着討論大M法、兩階段法和對偶單純形法

2.2 Big M Method (大M法)

通常,我們遇到的問題約束條件不是像普通單純形法中的形式,就是說有可能會符號為大於等於形式的不等式,這時,初始可行基的選擇就不是那么容易了。這種情況下,我們可以利用大M法。下面舉例說明應用

 

solution

通過引入slack或者surplus將不等式約束轉為等式約束,並且將最小化問題轉為最大化問題

 

在這個形式中,初始可行基不是很容易選出,因為s1和s3的系數都是-1。這時我們可以引入額外的兩個人工變量A1和A2,原問題轉為:

在目標函數中還引入了新的系數M,M是一個極大的數,因此要使得目標函數的值最大,A1和A2必須為0

 

matlab實現

linprog():

記住:該函數的問題形式必須是最小化形式,並且右端值符號沒有限制,但是不等號必須是小於等於

f = [4 3];
A = [-2 -1; -3 2; -1 -1];
b = [-10 6 -6];
[x, fval] = linprog(f, A, b)

 

revised():

c = [4 3];
A = [2 1; -3 2; 1 1];
b = [10 6 6];
inq = [1 -1 1];
revised(c, b, A, inq, 1)

運行結果: 

2.3 Two-phase Method(兩階段法)

先來看一下大M法和兩階段法的聯系和區別:

 

兩階段法中第一階段構造了一個只有人工變量的新的目標函數,使得引入的人工變量為零。第二階段使用第一階段迭代的tableau繼續迭代。可以看到其實大M法和兩階段法本質沒有區別,只是將兩步糅合成為一步。下面舉例說明兩階段法的應用:

這道題可以用大M法解決,不過這里使用兩階段法

第一階段,引入新的人工變量,並且構造新的目標函數(使人工變量為零)

到這里,人工變量已經成為非基變量,即取零使得構造的目標函數值最優

進入第二階段

這階段的主要工作是:

1.使用原來的目標函數

2.初始開始迭代的基可行解是沿用上一階段最后的迭代結果

 

下面開始迭代:

 

感興趣的朋友可以用大M法解答

matlab實現:

linprog():

 

f = [-5 -8];
A = [-3 -2; -1 -4; 1 1];
b = [-3 -4 5];
lb = [0 0];
[x, fval] = linprog(f, A, b, [], [], lb)

 

 運行結果:

revised():

c = [5 8];
A = [3 2; 1 4; 1 1];
b = [3 4 5];
inq = [1 11 -1];
revised(c, b, A, inq, 0)

運行結果:

 


免責聲明!

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



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