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


線性規划(Linear Programming Problem:LPP)是凸優化以及現實生活中經常遇到的問題,解決線性規划問題常用的方法有單純形法(Simlex Method)(普通單純形法,大M法,兩階段法,對偶單純形法)以及內點法(karmarkar method)

matlab中求解線性規划使用 linprog(f, A, b, Aeq, beq, lb, ub)以及revised(c, b, a, inq, 1)

注:f為目標函數(min形式)系數矩陣,A為限制條件系數矩陣,b為右端值矩陣(元素可以小於零),Aeq為等式約束的系數矩陣,beq為等式約束的右端值矩陣,lb和ub為未知數的下限和上限

1.LPP 

2.Simplex Method

每一次迭代的tableau 格式如下:

 

=====================================================================

=====================================================================

換入基、換出基的選擇:

原理:

所以標准型可以換成以下的形式:

迭代的思想:

 

 

解的情況討論:

 

========================================================================

========================================================================

2.1 Simplified Simplex Method (普通單純形)

LPP中的約束條件全是等式約束

standard form

 注:這里的右端值b必須全部非負

 下面舉例說明該種方法的應用以及matlab的兩種實現

 

Solution 

首先引入變量(slack or surplus)將原問題轉為標准格式:

下面開始迭代:

first tableau

 

將x1作為基變量換出x4

second tableau

將x2作為基變量換出x3

third tableau

 

可以看到

所有的z_j-c_j都是非負的,所以此時的x值是最優值,答案為:

matlab實現

linprog() : 

注意:linprog()解決問題的標准格式如下:

 

所以需要轉換原問題為最小化問題!!!

 

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

 

 下面貼出運行結果

revised():

注意:該函數不是內置函數,需要自行下載函數,附上網址:http://cn.mathworks.com/matlabcentral/fileexchange/26554-revised-simplex-method?focused=5147615&tab=function

 

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

 

 

 


免責聲明!

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



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