用matlab求解线性规划问题
- 格式:docx
- 大小:17.64 KB
- 文档页数:3
1 / 3
实验四用MATLAB^解线性规划问题 、实验目的:
了解Matlab的优化工具箱,能利用 Matlab求解线性规划问题。
、实验内容:
线性规划的数学模型有各种不同的形式,其一般形式可以写为:
mi nZ 二 fiXi f2X2 亠 亠 fnXn
a11x1 • a12x2 亠 亠 a1nxn 三 b|
Xi,X2, ,Xn 一 0
称为等式约束矩阵,列向量b =(b1,b2,…,bn)和d十,2,…,dn)为右端向量,条件Xj -0称为
・」 T
非负约束。一个向量 X -(X^X2, ,Xn),满足约束条件,称为可行解或可行点,所有可行点的集合称为
可行区域,达到目标函数值最大的可行解称为该线性规划的最优解,相应的目标函数值称为最优目标函数 值,简称最优值。
我们这里介绍利用 Matlab来求解线性规划问题的求解。
在Matlab中有一个专门的函数linprog()来解决这类问题,我们知道,极值有最大和最小两种,但求 的极大就是求 「Z的极小,因此在 Matlab中以求极小为标准形式,函数 linprog()的具体格式如下:
X=li nprog(f,A,b) [X,fval,exitflag,ouyput,lam nda]=li nprog(f,A,b,Aeq,Be q,L B,UB,XO,optio ns) 这里X是问题的解向量,f是由目标函数的系数构成的向量, 变量x={x1,x2,…,xn} —起,表示了线性规划中不等式约束条件, 表示了线性规划中等式约束条件中的系数矩阵和右端向量。 是给定的变量的初始值,options为控制规划过程的参数系列。
值。exitflag=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数; 程中变量收敛于解 X, exitflag<0表示不收敛。output有3个分量,iterations表示优化过程的迭代次数, cgiterations表示PCG迭代次数,algorithm表示优化所采用的运算规则。 lambda有4个分量,ineqlin是线 性不等式约束条件,eqlin是线性等式约束条件,upper是变量的上界约束条件,lower是变量的下界约束条 件。它们的返回值分别表示相应的约束条件在约束条件在优化过程中是否有效。
三、实验方法与步骤:
例1:某工厂生产 A,B两种产品,所用原料均为甲、乙、丙三种:生产一件产品所需原料和所获利 润以及库存原料情况如下目标函数:
约束条件: as1 X1 as2X2 asnXn Ebs
CiiXi -G2X2 亠'亠 GnXn 皿
CtiXi -G2X2 •…CtnX^ds
这里z = f1 X1 'f2X2 fnXn称为目标函数, j称为价值系数, f = ( f1, f2,…,fn)称为价值向
量,Xj为求解的变量,由系数 a"
an …am 组成的矩阵
_am1 amn
称为不等式约束矩阵,由系数
乙1 Cin
Csi… csn ] Cij组成的矩阵
A是-
A, b是系数矩阵和右端向量。 Aeq和Beq
LB和UB是约束变量的下界和上界向量, X0
返回值中fval是优化结束后得到的目标函数
exitflag>0表示优化过 2 / 3
所示:
原料甲(公斤) 原料乙(公斤) 原料丙(公斤) 利润(元)
产品A 8 4 4 7000
产品B 6 8 6 10000
库存原料量 380 300 220
在该厂只有表中所列库存原料的情况下,如何安排 A, B两种产品的生产数量可以获得最大利润?
设生产A产品xi件,生产B产品x2件,z为所获利润,我们将问题归结为如下的线性规划问题:
min { -(7000 x-i - 10000x2)}
(8x1 6x2 _ 380
4x1 8x2 一 300
st 4x1+6x^220
接着写出Matlab程序如下:
clear
f=-[7000,10000];
A=[8,6;4,8;4,6];
b=[380,300,220];
[X,fval]=linprog(f,A,b)
运行结果为:
Optimization terminated.
X =
40.0000
10.0000
fval =
-3.8000e+005
例2:求解下面的线性规划问题:
min { -5xi -4x2 -6x3}
s.t. X1 —X2 +X3 生 20
3x-i 2x2 4x3 _ 4 2
3x-i 2x2 乞 30
0兰捲,0兰x2, 0兰x3
解决上述问题的 Matlab程序为:
Clear
f=-[5,4,6];
A=[1,-2,1;3,2,4;3,2,0];
b=[20,42,30];
LB=[0;0;0];
[X,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],LB)
程序运行的结果为:
Optimization terminated.
X =
0.0000
15.0000
3.0000
fval =
-78.0000
exitflag =
1
output =
iterations: 6
algorithm: 'large-scale: interior point'
cgiterations: 0
message: 'Optimization terminated.'
lambda = 3 / 3
ineqlin: [3x1 double] eqlin: [0x1 double] upper: [3x1 double] lower: [3x1 double] 四、实验总结
在使用 linprog() 命令时,系统默认它的参数至少为 3个,但如果我们需要给定第 5 个参数,则第 4个 参数也必须给出,否则系统无法认定给出的是第 5 个参数。遇到无法给出时,则用空矩阵“ []”替代。