1、1实验四 用 MATLAB 求解线性规划问题一、实验目的:了解 Matlab 的优化工具箱,能利用 Matlab 求解线性规划问题。二、实验内容:线性规划的数学模型有各种不同的形式,其一般形式可以写为:目标函数: nxffxz21min约束条件: snsss bxaxa 21 1snttt dxccx 21 110,n这里 ffz21称为目标函数, jf称为价值系数,Tnff),(21称为价值向量, jx为求解的变量,由系数 ija组成的矩阵mnaA 11称为不等式约束矩阵,由系数 ijc组成的矩阵snscC 11称为等式约束矩阵,列向量Tnbb),(21和Tndd),(21为右端向量,条件
2、0jx称为非负约束。一个向量 nxx,21 ,满足约束条件,称为可行解或可行点,所有可行点的集合称为可行区域,达到目标函数值最大的可行解称为该线性规划的最优解,相应的目标函数值称为最优目标函数值,简称最优值。我们这里介绍利用 Matlab 来求解线性规划问题的求解。在 Matlab 中有一个专门的函数 linprog()来解决这类问题,我们知道,极值有最大和最小两种,但求z的极大就是求 z的极小,因此在 Matlab 中以求极小为标准形式,函数 linprog()的具体格式如下:X=linprog(f,A,b)X,fval,exitflag,ouyput,lamnda=linprog(f,A,
3、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 表示优化结果已经超过了函数的估计值或者已声明的最大迭代次数;exitflag0 表示优2化过
4、程中变量收敛于解 X,exitflag0 表示不收敛。output 有 3 个分量,iterations 表示优化过程的迭代次数,cgiterations 表示 PCG 迭代次数,algorithm 表示优化所采用的运算规则。lambda 有 4 个分量,ineqlin是线性不等式约束条件,eqlin 是线性等式约束条件,upper 是变量的上界约束条件,lower 是变量的下界约束条件。它们的返回值分别表示相应的约束条件在约束条件在优化过程中是否有效。三、实验方法与步骤:例 1:某工厂生产 A,B 两种产品,所用原料均为甲、乙、丙三种:生产一件产品所需原料和所获利润以及库存原料情况如下所示:
5、原料甲(公斤) 原料乙(公斤) 原料丙(公斤) 利润(元)产品 A 8 4 4 7000产品 B 6 8 6 10000库存原料量 380 300 220在该厂只有表中所列库存原料的情况下,如何安排 A,B 两种产品的生产数量可以获得最大利润?设生产 A 产品 1x件,生产 B 产品 2x件, z为所获利润,我们将问题归结为如下的线性规划问题:12min(70)s.t. 218634x接着写出 Matlab 程序如下:clearf=-7000,10000;A=8,6;4,8;4,6;b=380,300,220;X,fval=linprog(f,A,b)运行结果为:Optimization te
6、rminated.X =40.000010.0000fval =-3.8000e+005例 2:求解下面的线性规划问题: 123min546xs.t. 012330x, , 3x解决上述问题的 Matlab 程序为:Clearf=-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)程序运行的结果为:3Optimization terminated.X =0.000015.00003.0000fval =-78.0000exitflag =1output = iterations: 6algorithm: large-scale: interior pointcgiterations: 0message: Optimization terminated.lambda = ineqlin: 3x1 doubleeqlin: 0x1 doubleupper: 3x1 doublelower: 3x1 double四、实验总结在使用 linprog()命令时,系统默认它的参数至少为 3 个,但如果我们需要给定第 5 个参数,则第 4 个参数也必须给出,否则系统无法认定给出的是第 5 个参数。遇到无法给出时,则用空矩阵“”替代。