运用Matlab进行线性规划求解(实例)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8.2 线性规划

线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。

8.2.1 基本数学原理

线性规划问题的标准形式是:

⎪⎪⎪⎪⎩

⎪⎪⎪⎪⎨⎧≥=+++=+++=++++++=0,,,min 21221122222121112

121112211n m n mn m m n n n n n n x x x b x a x a x a b x a x a x a b x a x a x a x c x c x c z 或

⎪⎪⎪⎩

⎪⎪⎪⎨⎧=≥===∑∑==n j x m i b x a x c z j n j i j ij n j j

j ,,2,1,0,,2,1,min 1

1

写成矩阵形式为:

⎪⎩

⎪⎨⎧≥==O X b AX CX z min

线性规划的标准形式要求使目标函数最小化,约束条件取等式,变量b 非负。不符合这几个条件的线性模型可以转化成标准形式。

MATLAB 采用投影法求解线性规划问题,该方法是单纯形法的变种。

8.2.2 有关函数介绍

在MATLAB 工具箱中,可用linprog 函数求解线性规划问题。

linprog 函数的调用格式如下:

●x=linprog(f,A,b):求解问题minf'*x ,约束条件为A*x<=b 。

●x=linprog(f,A,b,Aeq,beq):求解上面的问题,但增加等式约束,即Aeq*x=beq 。若没有不等式约束,则令A=[ ],b=[ ]。

●x=linprog(f,A,b,Aeq,beq,lb,ub):定义设计x 的下界lb 和上界ub ,使得x 始终在该范围内。若没有等式约束,令Aeq=[ ],beq=[ ]。

●x=linprog(f,A,b,Aeq,beq,lb,ub,x0):设置初值为x0。该选项只适用于中型问题,默认时大型算法将忽略初值。

●x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options):用options 指定的优化参数进行最小化。

●[x,fval]=linprog(…):返回解x 处的目标函数值fval 。

●[x,lambda,exitflag]=linpro g(…):返回exitflag 值,描述函数计算的退出条件。 ●[x,lambda,exitflag,output]=linprog(…):返回包含优化信息的输出参数output 。 ●[x,fval,exitflag,output,lambda]=linprog(…):将解x 处的拉格朗日乘子返回到

lambda 参数中。

调用格式中,lambda 参数为解x 处包含拉格朗日乘子的结构。它有以下一些字段:

lower —下界lb

upper —上界ub

ineqlin —线性不等式

eqlin —线性等式

exitflag 参数表示算法终止的原因,下面列出不同值对应的退出原因:

1 函数在解x 处有解

0 迭代次数超过options.MaxIter

-2 没有找到可行点

-3 问题无解

-4 执行算法时遇到NaN

-5 原问题和对偶问题都不可行

-7 搜索方向太小,不能继续前进。

8.2.3 应用实例

例8-2 某河流边有两个化工厂,流经第一个化工厂的河水流量是每天500万立方米,在两个工厂之间有一条流量为200万立方米的支流(如图8-1所示)。第一个化工厂每天排放工业污水2万立方米,第二个化工厂每天排放工业污水1.4万立方米,从第一个化工厂排出的污水流到第二个化工厂之前,有20%可自然净化。根据环保要求,河流中工业污水的含量应不大于0.2%,因此两个化工厂都必须各自处理净化一部分污水,第一个化工厂处理污水的成本是0.1元∕立方米,第二个化工厂处理污水的成本是0.08元∕立方米。问在满足环保要求的条件下,各化工厂每天应处理多少污水,才能使两厂总的处理污水费用最少?

第一化工厂 第二化工厂

图8-1

解:设1x ,2x 分别表示第一个化工厂和第二个化工厂每天处理的污水量(万立方米∕天)。

则目标函数:218001000x x f +=(元∕天)

约束条件1:

%2.0500

21≤-x ,即11≥x ; 约束条件2:%2.0700

)4.1()2(8.021≤-+-x x ,即6.18.021≥+x x ; 约束条件3:⎩⎨⎧≤≤4.1221x x 。

因此,该问题的线性规划模型归结为:

218001000m in x x f +=

⎪⎪⎪⎩

⎪⎪⎪⎨⎧≥≤≤-≤---≤-0,4.12

6.18.01..2121211x x x x x x x t s 求解程序:

%线性规划问题

f=[1000 800];

A=[-1 0;-0.8 -1;1 0;0 1];

b=[-1;-1.6;2;1.4];

lb=zeros(2,1);

[x,fval,exitflag]=linprog(f,A,b,[],[],lb)

运行结果:

x =

1.0000

0.8000

fval =1.6400e+003

exitflag =1

由上可知,第一个化工厂每天处理的污水量为1万立方米∕天,第二个化工厂每天处理的污水量为0.8万立方米∕天,才能使两厂总的处理污水费用最少。

相关文档
最新文档