利用Matlab优化工具linprog求解线性规划问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§15. 利用Matlab求解线性规划问题
线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP问题求解:
% min f'x
% .(约束条件):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’ 不显示输出;选择’I ter’显示每一步迭代过程的输出;选择’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 返回优化信息:表示迭代次数;表示所采用的算法;表示函数评价次数。
lambda返回x处的拉格朗日乘子。它有以下属性:
的下界;
的上界;
的线性不等式;
的线性等式。
下面通过具体的例子来说明:
例如:某农场I、II、III等耕地的面积分别为100 hm2、300 hm2和200 hm2,计划种植水稻、大豆和玉米,要求三种作物的最低收获量分别为190000kg、130000kg和350000kg。I、II、III等耕地种植三种作物的单产如表所示。若三种作物的售价分别为水稻元/kg,大豆元/kg,玉米元/kg。那么,(1)如何制订种植计划,才能使总产量最大(2)如何制订种植计划,才能使总产值最大
表1不同等级耕地种植不同作物的单产(单位:kg / hm2)
I等耕地II等耕地III等耕地水稻11 0009 5009 000
大豆8 000 6 800 6 000
玉米14 00012 00010 000
x表示首先根据题意建立线性规划模型(决策变量设置如表2所示,表中
ij
第i种作物在第j等级的耕地上的种植面积。):
表2 作物计划种植面积(单位:hm2)
约束方程如下:
耕地面积约束: ⎪⎩⎪
⎨⎧≤++≤++≤++200
x x x 300x x x 100x x x 33
2313322212312111
最低收获量约束: ⎪⎩⎪
⎨⎧≤--≤--≤---350000
10000x 12000x 14000x -00003-10x 0066800x 8000x --190000
9000x 9500x 11000x -33
3231232221131211
非负约束:
1,2,3)
j 1,2,3;(i 0
x ij ==≥
(1)追求总产量最大,目标函数为:
33
32312322
2113121110000x 12000x 14000x -0x 0066800x 8000x - 9000x 9500x -11000x =minZ ------
(2)追求总产值最大,目标函数为:
33
32312322211312113332312322211312110x 0089600x 11200x 9000x 10200x 12000x 10800x 11400x 13200x -)10000x 12000x 14000x (×0.80-) 0x 0066800x (8000x ×1.50-)
9000x 9500x (11000x ×-1.20=maxZ --------=++++++
根据求解函数linprog 中的参数含义,列出系数矩阵,目标函数系数矩阵,以及约束条件等。
这些参数中没有的设为空。譬如, (1)当追求总产量最大时,只要将参数
f=[-11000 –9500 –9000 –8000 –6800 –6000 –14000 –12000 -10000]; A=[ ;
; ; ; ; ];
b=[100 300 200 -190000 -130000 -350000]; lb=[ ];
代入求解函数[][]),[],[],,,,(lb b A f linprog fxopt xopt =,即可求得结果。
(2)当追求总产值最大时,将参数
f=[-13200 –11400 –10800 –12000 –10200 –9000 –11200 –9600 -8000]; A=[ ;
; ; ; ; ];
b=[100 300 200 -190000 -130000 -350000]; lb=[ ];
代入求解函数[][]),[],[],,,,(lb b A f linprog fxopt xopt =,即可得到求解结果。
线性规划,还有其他的几种调用函数形式,可在Matlab 帮助中查找LP 或者LINPROG 的帮助说明。