利用Matlab求解線性規劃問題

2021-03-04 08:10:36 字數 3712 閱讀 1548

§15. 利用matlab求解線性規劃問題

線性規劃是一種優化方法,matlab優化工具箱中有現成函式linprog對如下式描述的lp問題求解:

% min f'x

% s.t .(約束條件): ax<=b

% (等式約束條件): aeqx=beq

% lb<=x<=ub

linprog函式的呼叫格式如下:

x=linprog(f,a,b)

x=linprog(f,a,b,aeq,beq)

x=linprog(f,a,b,aeq,beq,lb,ub)

x=linprog(f,a,b,aeq,beq,lb,ub,x0)

x=linprog(f,a,b,aeq,beq,lb,ub,x0,options)

[x,fval]=linprog(…)

[x, fval, exitflag]=linprog(…)

[x, fval, exitflag, output]=linprog(…)

[x, fval, exitflag, output, lambda]=linprog(…)

其中:x=linprog(f,a,b)返回值x為最優解向量。

x=linprog(f,a,b,aeq,beq) 作有等式約束的問題。若沒有不等式約束,則令a=[ ]、b=[ ] 。

x=linprog(f,a,b,aeq,beq,lb,ub,x0,options) 中lb ,ub為變數x的下界和上界,x0為初值點,options為指定優化引數進行最小化。

options的引數描述:

display顯示水平。 選擇』off』 不顯示輸出;選擇』iter』顯示每一步迭代過程的輸出;選擇』final』 顯示最終結果。

maxfunevals 函式評價的最大允許次數

maxiter 最大允許迭代次數

tolx x處的終止容限

[x,fval]=linprog(…) 左端 fval 返回解x處的目標函式值。

[x,fval,exitflag,output,lambda]=linprog(f,a,b, aeq,beq,lb,ub,x0) 的輸出部分:

exitflag 描述函式計算的退出條件:若為正值,表示目標函式收斂於解x處;若為負值,表示目標函式不收斂;若為零值,表示已經達到函式評價或迭代的最大次數。

output 返回優化資訊:output.iterations表示迭代次數;output.

algorithm表示所採用的演算法;outprt.funccount表示函式評價次數。

lambda 返回x處的拉格朗日乘子。它有以下屬性:

lambda.lower-lambda的下界;

lambda.upper-lambda的上界;

lambda.ineqlin-lambda的線性不等式;

lambda.eqlin-lambda的線性等式。

下面通過具體的例子來說明:

例如:某農場i、ii、iii等耕地的面積分別為100 hm2、300 hm2和200 hm2,計畫種植水稻、大豆和玉公尺,要求三種作物的最低收穫量分別為190000kg、130000kg和350000kg。i、ii、iii等耕地種植三種作物的單產如表5.

1.4所示。若三種作物的售價分別為水稻1.

20元/kg,大豆1.50元/kg,玉公尺0.80元/kg。

那麼,(1)如何制訂種植計畫,才能使總產量最大?(2)如何制訂種植計畫,才能使總產值最大?

表1不同等級耕地種植不同作物的單產(單位:kg / hm2)

首先根據題意建立線性規劃模型(決策變數設定如表2所示,表中表示第種作物在第j等級的耕地上的種植面積。):

表2 作物計畫種植面積(單位:hm2)

約束方程如下:

耕地面積約束:

最低收穫量約束:

非負約束:

(1)追求總產量最大,目標函式為:

(2)追求總產值最大,目標函式為:

根據求解函式linprog中的引數含義,列出係數矩陣,目標函式係數矩陣,以及約束條件等。

這些引數中沒有的設為空。譬如,

(1)當追求總產量最大時,只要將引數

f=[-11000 –9500 –9000 –8000 –6800 –6000 –14000 –12000 -10000];

a=[1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000;

0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000;

0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000;

-11000.0000 0.0000 0.

0000 -9500.0000 0.0000 0.

0000 -9000.0000 0.0000 0.

0000;

0.0000 -8000.0000 0.

0000 0.0000 -6800.0000 0.

0000 0.0000 -6000.0000 0.

0000;

0.0000 0.0000 -14000.

0000 0.0000 0.0000 -12000.

0000 0.0000 0.0000 -10000.

0000];

b=[100 300 200 -190000 -130000 -350000];

lb=[0.0000 0.0000 0.

0000 0.0000 0.0000 0.

0000 0.0000 0.0000 0.

0000 ];

代入求解函式,即可求得結果。

(2)當追求總產值最大時,將引數

f=[-13200 –11400 –10800 –12000 –10200 –9000 –11200 –9600 -8000];

a=[1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000;

0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000;

0.0000 0.0000 1.0000 0.0000 0.0000 1.0000 0.0000 0.0000 1.0000;

-11000.0000 0.0000 0.

0000 -9500.0000 0.0000 0.

0000 -9000.0000 0.0000 0.

0000;

0.0000 -8000.0000 0.

0000 0.0000 -6800.0000 0.

0000 0.0000 -6000.0000 0.

0000;

0.0000 0.0000 -14000.

0000 0.0000 0.0000 -12000.

0000 0.0000 0.0000 -10000.

0000];

b=[100 300 200 -190000 -130000 -350000];

lb=[0.0000 0.0000 0.

0000 0.0000 0.0000 0.

0000 0.0000 0.0000 0.

0000 ];

代入求解函式,即可得到求解結果。

線性規劃,還有其他的幾種呼叫函式形式,可在matlab幫助中查詢lp或者linprog的幫助說明。

15利用Matlab求解線性規劃問題

線性規劃是一種優化方法,matlab優化工具箱中有現成函式linprog對如下式描述的lp問題求解 min f x s.t 約束條件 ax b 等式約束條件 aeqx beq lb x ub linprog函式的呼叫格式如下 x linprog f,a,b x linprog f,a,b,aeq,b...

用matlab求解線性規劃問題

實驗四用matlab求解線性規劃問題 一 實驗目的 了解matlab的優化工具箱,能利用matlab求解線性規劃問題。二 實驗內容 線性規劃的數學模型有各種不同的形式,其一般形式可以寫為 目標函式 約束條件 這裡稱為目標函式,稱為價值係數,稱為價值向量,為求解的變數,由係數組成的矩陣 稱為不等式約束...

2 使用MATLAB求解線性規劃問題

應用matlab優化工具箱中的linprog函式求解線性規劃時模型要求為如下形式 其中 均為列向量,為常數矩陣,為常數列向量。函式呼叫格式如下 決策變數有上下界,預設變數非負。例1 38 用matlab 求解下面線性規劃問題 令z1 z matlab求解程式存為 c 150,210 a 2,3 3,...