单位文秘网 2021-07-19 08:24:42 点击: 次
思想计算非线性规划问题,即从一个满足约束条件的初始可行点出发,按照一定的搜索机制,找到下一个使目标函数更优的可行解,直到找到最优解其目标。在Matlab中,二次规划函数是x的二次型形式,约束条件仍为线性的。一般的二次规划问题的数学表示为[4]:
与线性规划相比,二次型规划多出一项XHX描述x和xx项。在MATLAB工具箱中,求解二次型规划的是命令函数是quadprog()。函数调用形式如下所示:
[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
其输入参数H为对角矩阵,表示x和xx项前面的系数,其他参数的输入格式与linprog()完全相同,见表1。
例如求解下列二次型规划问题
程序如下:
clc,clear;
H=diag([10 8 6 4 2]);
f=[-2,-1,-2,-5,-10];
A=[1,1,1,1,1;-5,4,-3,2,-1;1,1,0,0,-1;0,0,0,1,1;0,0,-1,0,0;0,0,0,-1,0];
b=[20;-5;8;10;-5;-3];
[x,fval,exitflag]=quadprog(H,f,A,b)
运算结果如下:
Optimization terminated.
x=[0.2000 0.1250 5.0000 3.0000 5.0000]
fval=42.7375
exitflag=1
所以当x=0.2,x=0.125,x=5,x=3,x=5时,目标函数取得最小值42.7375。exitflag=1说明函数取得最优解。
四、MATLAB在目标规划中的应用
目标规划在处理实际决策问题时,承认各项决策要求的存在有其合理性,即在最终决策时,不强调其绝对意义上的最优性,在一定程度上弥补了线性规划存在的某些缺陷。因此,在运筹学中所有的规划问题中,与实际联系最大的当属目标规划。MATLAB所定义的目标函数的标准形式为
γs.t. f(x)-weight·γ≤goal c(x)≤0 ceq(x)=0 Ax≤b Aeqx=beq lb≤x≤ub
其中x、weight、goal、b、beq、lb、ub为相应维数的向量,A、Aeq为矩阵,c(x)、ceq(x)、f(x)为返回向量的函数,它们可以是线性函数,也可以是非线性函数。
在MATLAB的库函数中,针对目标规划的命令函数名为fgoalattain(),调用形式为:
[x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
其中在输入参数中,fun为目标函数,x■是求解的初始值,goal是目标函数的期望值,weight是目标权重,nonlcon是非线性约束函数。输出参数中,attainfactor参数包含解处的γ值,γ取负值时表示结果溢出。
例如,某化工厂拟生产两种新产品A和B,其生产设备费用分别为:2万元/t和5万元/t。这两种产品均造成环境污染,假设由公害所造成的损失可折算为4万元/t和1万元/t。由于条件限制,该厂的两种产品的最大生产能力分别为每月5t和6t,而市场需要这两种产品的总量每月不少于7t。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达到最小?
该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值20万元,公害损失的目标为12万元。
相应的MATLAB程序如下:
clc,clear;
A=[1,0;0,1;-1;-1];
b=[5;6;7];
x0=[0,0];
goal=[20,12];%设置期望目标值
weight=abs(goal);%设置目标权重
[x,fval,attainfactor]=fgoalattain(@funa,x0,goal,weight,A,b)
function f=funa(x)
f(1)=2*x(1)+5*x(2);
f(2)=4*x(1)+x(2);
运算结果如下:
x=[2.9167 4.0833]
fval=26.2500 15.7500
attainfactor=0.3125
由结果可知,每月生产A产品3t,B产品4t时,设备投资费用和公害损失与目标最为接近,设备投资费用为26.25万元,公害损失为15.75万元。Attaintfactor>0说明γ值未溢出,结果可信。
五、结语
以上实例说明,利用MATLAB可以方便地求出线性规划等优化问题的解,不仅算法简单,避免了手工的繁琐计算,而且可以大大提高计算速度和计算的准确性。将MATLAB软件用于运筹学教学,可以更直观地理解运筹学中的基本概念理论,并可培养动手和科研实践能力。
同时,运筹学还包含其他内容,如动态规划、整数规划、非线性规划等内容,在Matlab中,也有与之对应的命令或工具箱,学习者可以结合网络资源或者Matlab中的help命令进行学习。
参考文献:
[1]王立欣,王爱维,赵美.运筹学常用软件综述[J].科技情报开发与经济,2009,26:95-96.
[2]张明,王文文.Matlab在经管类运筹学教学中的探索与实践[J].大学教育,2012,07:81-82.
[3]胡运权.运筹学教程(第三版)[M].北京:清华大学出版社,2007.
[4]杨云峰,胡金燕,宋国亮.数学建模与数学软件[M].哈尔滨:哈尔滨工程大学出版社,2012.
[5]马莉.MATLAB数学实验与建模[M].北京:清华大学出版社,2010.
(责任编辑:单位文秘网) )地址:https://www.kgf8887.com/show-177-66954-1.html
上一篇:基于数学建模的运筹学案例教学
下一篇:系统科学的兴起
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用