Vous êtes sur la page 1sur 5

实习指导 --《计量地理学》(徐建华,华东师范大学)

§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) 作有等式约束的问题。若没有不等式约束,则令

111
实习指导 --《计量地理学》(徐建华,华东师范大学)

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 的线性等式。

112
实习指导 --《计量地理学》(徐建华,华东师范大学)

下面通过具体的例子来说明:

例如:某农场I、II、III等耕地的面积分别为 100 hm2、300 hm2和 200 hm2,


计划种植水稻、大豆和玉米,要求三种作物的最低收获量分别为 190000 kg、
130000 kg和 350000kg。I、II、III等耕地种植三种作物的单产如表 5.1.4 所
示。若三种作物的售价分别为水稻 1.20 元/kg,大豆 1.50 元/ kg,玉米 0.80
元/kg。那么,
(1)如何制订种植计划,才能使总产量最大?(2)如何制订种
植计划,才能使总产值最大?

表 1 不同等级耕地种植不同作物的单产(单位:kg / hm2)
I 等耕地 II 等耕地 III 等耕地
水稻 11000 9500 9000
大豆 8000 6800 6000
玉米 14000 12000 10000

首先根据题意建立线性规划模型(决策变量设置如表 2 所示,表中 xij 表示

第 i 种作物在第 j 等级的耕地上的种植面积。):

表2 作物计划种植面积(单位:hm2)
I 等耕地 II 等耕地 III 等耕地

水稻 x11 x12 x13

大豆 x 21 x 22 x 23

玉米 x31 x32 x33

约束方程如下:

⎧x 11 + x 21 + x 31 ≤ 100

⎨x 12 + x 22 + x 32 ≤ 300
⎪x + x + x ≤ 200
耕地面积约束: ⎩ 13 23 33

⎧- 11000x 11 − 9500x 12 − 9000x 13 ≤ -190000



⎨- 8000x 21 − 6800x 22 − 6000x 23 ≤ -130000
⎪- 14000x − 12000x − 10000x ≤ -350000
最低收获量约束: ⎩ 31 32 33

113
实习指导 --《计量地理学》(徐建华,华东师范大学)

x ij ≥ 0 (i = 1,2,3; j = 1,2,3)
非负约束:

(1)追求总产量最大,目标函数为:

minZ = -11000x11 − 9500x 12 − 9000x 13 - 8000x 21 − 6800x 22


− 6000x 23 - 14000x 31 − 12000x 32 − 10000x 33

(2)追求总产值最大,目标函数为:

maxZ = -1.20 × (11000x 11 + 9500x 12 + 9000x 13 )


- 1.50 × (8000x 21 + 6800x 22 + 6000x 23 )
- 0.80 × ( 14000x 31 + 12000x 32 + 10000x 33 )
= - 13200x 11 − 11400x 12 − 10800x 13
− 12000x 21 − 10200x 22 − 9000x 23
− 11200x 31 − 9600x 32 − 8000x 33

根据求解函数 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 ];

代入求解函数 [xopt fxopt ] = linprog ( f , A, b, [], [], lb, []) ,即可求得结果。

(2)当追求总产值最大时,将参数

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

114
实习指导 --《计量地理学》(徐建华,华东师范大学)

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 ];

代入求解函数 [xopt fxopt ] = linprog ( f , A, b, [], [], lb, []) ,即可得到求解结果。

线性规划,还有其他的几种调用函数形式,可在 Matlab 帮助中查找 LP 或者


LINPROG 的帮助说明。

115

Vous aimerez peut-être aussi