利用Matlab求解线性规划问题
線性規(guī)劃是一種優(yōu)化方法,Matlab優(yōu)化工具箱中有現(xiàn)成函數(shù)linprog對(duì)如下式描述的LP問(wèn)題求解:
% min f'x
% s.t .(約束條件): Ax<=b
% (等式約束條件): Aeqx=beq
% lb<=x<=ub
linprog函數(shù)的調(diào)用格式如下:
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為最優(yōu)解向量。
x=linprog(f,A,b,Aeq,beq) 作有等式約束的問(wèn)題。若沒(méi)有不等式約束,則令A(yù)=[ ]、b=[ ] 。
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中l(wèi)b ,ub為變量x的下界和上界,x0為初值點(diǎn),options為指定優(yōu)化參數(shù)進(jìn)行最小化。
Options的參數(shù)描述:
Display顯示水平。 選擇’off’ 不顯示輸出;選擇’Iter’顯示每一 步迭代過(guò)程的輸出;選擇’final’ 顯示最終結(jié)果。
MaxFunEvals 函數(shù)評(píng)價(jià)的最大允許次數(shù)
Maxiter 最大允許迭代次數(shù)
TolX x處的終止容限
[x,fval]=linprog(…) 左端 fval 返回解x處的目標(biāo)函數(shù)值。
[x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的輸出部分:
exitflag 描述函數(shù)計(jì)算的退出條件:若為正值,表示目標(biāo)函數(shù)收斂于解x處;若為負(fù)值,表示目標(biāo)函數(shù)不收斂;若為零值,表示已經(jīng)達(dá)到函數(shù)評(píng)價(jià)或迭代的最大次數(shù)。
output 返回優(yōu)化信息:output.iterations表示迭代次數(shù);output.algorithm表示所采用的算法;outprt.funcCount表示函數(shù)評(píng)價(jià)次數(shù)。
lambda 返回x處的拉格朗日乘子。它有以下屬性:
lambda.lower-lambda的下界;
lambda.upper-lambda的上界;
lambda.ineqlin-lambda的線性不等式;
lambda.eqlin-lambda的線性等式。
下面通過(guò)具體的例子來(lái)說(shuō)明:
例如:某農(nóng)場(chǎng)I、II、III等耕地的面積分別為100 hm2、300 hm2和200 hm2,計(jì)劃種植水稻、大豆和玉米,要求三種作物的最低收獲量分別為190000kg、130000kg和350000kg。I、II、III等耕地種植三種作物的單產(chǎn)如表5.1.4所示。若三種作物的售價(jià)分別為水稻1.20元/kg,大豆1.50元/kg,玉米0.80元/kg。那么,(1)如何制訂種植計(jì)劃,才能使總產(chǎn)量最大?(2)如何制訂種植計(jì)劃,才能使總產(chǎn)值最大?
表1不同等級(jí)耕地種植不同作物的單產(chǎn)(單位:kg / hm2)
| I等耕地 | II等耕地 | III等耕地 | |
| 水稻 | 11 000 | 9 500 | 9 000 |
| 大豆 | 8 000 | 6 800 | 6 000 |
| 玉米 | 14 000 | 12 000 | 10 000 |
首先根據(jù)題意建立線性規(guī)劃模型(決策變量設(shè)置如表2所示,表中表示第種作物在第j等級(jí)的耕地上的種植面積。):
表2 作物計(jì)劃種植面積(單位:hm2)
| I等耕地 | II等耕地 | III等耕地 | |
| 水稻 | |||
| 大豆 | |||
| 玉米 |
約束方程如下:
耕地面積約束:
最低收獲量約束:
非負(fù)約束:
(1)追求總產(chǎn)量最大,目標(biāo)函數(shù)為:
(2)追求總產(chǎn)值最大,目標(biāo)函數(shù)為:
根據(jù)求解函數(shù)linprog中的參數(shù)含義,列出系數(shù)矩陣,目標(biāo)函數(shù)系數(shù)矩陣,以及約束條件等。
這些參數(shù)中沒(méi)有的設(shè)為空。譬如,
(1)當(dāng)追求總產(chǎn)量最大時(shí),只要將參數(shù)
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 ];
代入求解函數(shù),即可求得結(jié)果。
(2)當(dāng)追求總產(chǎn)值最大時(shí),將參數(shù)
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 ];
代入求解函數(shù),即可得到求解結(jié)果。
線性規(guī)劃,還有其他的幾種調(diào)用函數(shù)形式,可在Matlab幫助中查找LP或者LINPROG的幫助說(shuō)明。
總結(jié)
以上是生活随笔為你收集整理的利用Matlab求解线性规划问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数学之美 系列十六(上) 不要把所有的鸡
- 下一篇: 什么是泛函分析?