《数学建模讲座之三――利用Matlab求解线性规划问题》由会员分享,可在线阅读,更多相关《数学建模讲座之三――利用Matlab求解线性规划问题(18页珍藏版)》请在金锄头文库上搜索。
1、利用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=linp
2、rog() 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) 作有等式约束的问题。若没有不等式约束,则令A= 、b= 。 x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options为指定优化参数进行最小化。,Options的参数描
3、述:Display显示水平。 选择off 不显示输出;选择Iter显示每一 步迭代过程的输出;选择final 显示最终结果。,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.algor
4、ithm表示所采用的算法;outprt.funcCount表示函数评价次数。 lambda 返回x处的拉格朗日乘子。它有以下属性: lambda.lower-lambda的下界; lambda.upper-lambda的上界; lambda.ineqlin-lambda的线性不等式; lambda.eqlin-lambda的线性等式。,下面通过具体的例子来说明: 例如:某农场I、II、III等耕地的面积分别为100 hm2、300 hm2和200 hm2,计划种植水稻、大豆和玉米,要求三种作物的最低收获量分别为190000kg、130000kg和350000kg。I、II、III等耕地种植三种
5、作物的单产如表5.1.4所示。若三种作物的售价分别为水稻1.20元/kg,大豆1.50元/kg,玉米0.80元/kg。那么,(1)如何制订种植计划,才能使总产量最大?(2)如何制订种植计划,才能使总产值最大?,表1不同等级耕地种植不同作物的单产(单位:kg / hm2),首先根据题意建立线性规划模型(决策变量设置如表2所示,表中xij 表示第种作物在第j等级的耕地上的种植面积。):,表2 作物计划种植面积(单位:hm2),约束方程如下: 耕地面积约束: 最低收获量约束:,非负约束:,(1)追求总产量最大,目标函数为:,(2)追求总产值最大,目标函数为:,根据求解函数linprog中的参数含义,
6、列出系数矩阵,目标函数系数矩阵,以及约束条件等。 这些参数中没有的设为空。譬如,,(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
7、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.00
8、00 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 ; 代入求解函数 , 即可求得结果。,(2)当追求总产值最大时,将参数 f=-13200 11400 10800 12000 10200 9000 11200 9600 -8000; 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.000
9、0 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 ; 代入求解函数 ,即可得到求解结果。,线性规划,还有其他的几种调用函数形式,可在Matlab帮助中查找LP或者LINPROG的帮助说明。 Help LINPROG,