用matlab求解线性规划问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
实验四 用MATLAB 求解线性规划问题
一、实验目的:
了解Matlab 的优化工具箱,能利用Matlab 求解线性规划问题。
二、实验内容:
线性规划的数学模型有各种不同的形式,其一般形式可以写为:
目标函数: n n x f x f x f z +++= 2211m in
约束条件: s n sn s s n n b x a x a x a b x a x a x a ≤+++≤+++
221
11
1212111 s n tn t t n n d x c x c x c d x c x c x c =+++=+++
221
11
1212111
0,,,21≥n x x x 这里
n n x f x f x f z +++= 2211称为目标函数,j f 称为价值系数,T n f f f f ),,,(21 =称为价值向量,j x 为求解的变量,由系数ij a 组成的矩阵
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=mn m n a a a a A 1111
称为不等式约束矩阵,由系数ij c 组成的矩阵
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=sn s n c c c c C 1111
称为等式约束矩阵,列向量
T n b b b b ),,,(21 =和T n d d d d ),,,(21 =为右端向量,条件0≥j x 称为非负约束。一个向量T
n x x x x ),,,(21 =,满足约束条件,称为可行解或可行点,所有可行点的集合称为
可行区域,达到目标函数值最大的可行解称为该线性规划的最优解,相应的目标函数值称为最优目标函数值,简称最优值。
我们这里介绍利用Matlab 来求解线性规划问题的求解。
在Matlab 中有一个专门的函数linprog()来解决这类问题,我们知道,极值有最大和最小两种,但求z 的极大就是求z -的极小,因此在Matlab 中以求极小为标准形式,函数linprog()的具体格式如下: X=linprog(f,A,b)
[X,fval,exitflag,ouyput,lamnda]=linprog(f,A,b,Aeq,Beq,LB,UB,X0,options)
这里X 是问题的解向量,f 是由目标函数的系数构成的向量,A 是一个矩阵,b 是一个向量,A ,b 和变量x={x1,x2,…,xn}一起,表示了线性规划中不等式约束条件,A ,b 是系数矩阵和右端向量。Aeq 和Beq 表示了线性规划中等式约束条件中的系数矩阵和右端向量。LB 和UB 是约束变量的下界和上界向量,X0是给定的变量的初始值,options 为控制规划过程的参数系列。返回值中fval 是优化结束后得到的目标函数值。exitflag=0表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;exitflag>0表示优化过
2 程中变量收敛于解X ,exitflag<0表示不收敛。output 有3个分量,iterations 表示优化过程的迭代次数,cgiterations 表示PCG 迭代次数,algorithm 表示优化所采用的运算规则。lambda 有4个分量,ineqlin 是线性不等式约束条件,eqlin 是线性等式约束条件,upper 是变量的上界约束条件,lower 是变量的下界约束条件。它们的返回值分别表示相应的约束条件在约束条件在优化过程中是否有效。
三、实验方法与步骤:
例1:某工厂生产A ,B 两种产品,所用原料均为甲、乙、丙三种:生产一件产品所需原料和所获利
设生产A 产品1x 件,生产B 产品2x 件,z 为所获利润,我们将问题归结为如下的线性规划问题:
12min {(700010000)}x x -+
s.t. 12121286380
48300
46220x x x x x x +≤⎧⎪+≤⎨⎪+≤⎩
接着写出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:求解下面的线性规划问题:
123min {546}x x x ---
s.t. 12320x x x -+≤
12332442x x x ++≤
123230x x +≤
10x ≤,20x ≤,30x ≤
解决上述问题的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 =
ineqlin: [3x1 double]
eqlin: [0x1 double]
upper: [3x1 double]
lower: [3x1 double]
四、实验总结
在使用linprog()命令时,系统默认它的参数至少为3个,但如果我们需要给定第5个参数,则第4个参数也必须给出,否则系统无法认定给出的是第5个参数。遇到无法给出时,则用空矩阵“[]”替代。
3