数学建模中优化问题的计算机解法
2014-01-12张建生
张建生
【摘 要】优化问题是数学建模中最常见的问题,本文全面系统的阐述各种类型优化问题的MATLAB解法,包括无约束优化问题、有约束优化问题、线性优化问题、二次优化问题等。
【关键词】数学建模;优化问题;计算机求解;MATLAB语言
最优化问题就是求最大(小)值问题,是数学建模中最常见的问题,几乎每个建模问题都离不开优化。数学建模是用来解决实际问题,而在现实生产生活中,每个人、每个单位都希望自己所从事的事情能达到最化化。数学建模中的优化问题主要有四种类型,即无约束的优化问题、有约束的优化问题、线性优化(规划)问题和二次化化(规划)问题。
一、无约束最优化(fminunc)
命令 利用函数fminunc求无约束函数最小值
函数 fminunc
格式 :
x = fminunc(fun,x0) %返回给定初始点x0的最小函数值点
x = fminunc(fun,x0,options) % options为指定优化参数
[x,fval] = fminunc(…) %fval最优点x处的函数值
[x,fval,exitflag] = fminunc(…) % exitflag为终止迭代的条件,与上同。
[x,fval,exitflag,output] = fminunc(…) %output为输出优化信息
二、有约束的最优化(fmincon)
有约束的多元函数的最优化的标准形式为:
min f(x)
s.t C(x)<=0
Ceq(x)=0
A*x<=b
Aeq*x=beq
lb<=x<=ub
其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函数。函数 fmincon
格式:
x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval] = fmincon(…)
[x,fval,exitflag] = fmincon(…)
[x,fval,exitflag,output] = fmincon(…)
[x,fval,exitflag,output,lambda] = fmincon(…)
[x,fval,exitflag,output,lambda,grad] = fmincon(…)
参数说明:fun为目标函数,它可用前面的方法定义;
x0为初始值;
A、b满足线性不等式约束 ,若没有不等式约束,则取A=[ ],b=[ ];
B、Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];
C、lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];
D、nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的估计C和Ceq,通过指定函数柄来使用,
如: x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
C = … % 计算x处的非线性不等约束 的函数值。
Ceq = … % 计算x处的非线性等式约束 的函数值。
lambda是Lagrange乘子,它体现哪一个约束有效。
output输出优化信息;
grad表示目标函数在x处的梯度;
hessian表示目标函数在x处的Hessiab值。
三、线性规划问题(linprog)
min f(x) x属于R
s.t: A*x<=b;
Aeq*x=beq;
lb<=x<=ub;
其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。
函数 linprog
格式:
x = linprog(f,A,b) %求min f s.t 线性规划的最优解。
x = linprog(f,A,b,Aeq,beq) %不等式约束 ,若没有不等式约束 ,则A=[ ],b=[ ]。
x = linprog(f,A,b,Aeq,beq,lb,ub)%指定x的范围 ,若没有等式约束 ,则Aeq=[ ],beq=[ ]
x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %設置初值x0
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options为指定的优化参数
[x,fval] = linprog(…) % 返回目标函数最优值,即fval= f
[x,lambda,exitflag] = linprog(…) % lambda为解x的Lagrange乘子。
[x, lambda,fval,exitflag] = linprog(…) % exitflag为终止迭代的错误条件。
说明:若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x。
四、二次规划(quadprog)
标准型为:
Min Z= XTHX+cTX
s.t. AX<=b
VLB≤X≤VUB
用MATLAB软件求解,其输入格式如下:
1.x=quadprog(H,C,A,b);
2.x=quadprog(H,C,A,b,Aeq,beq);
3.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);
4.x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0);
5.x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0,options);
6.[x,fval]=quaprog(...);
7.[x,fval,exitflag]=quaprog(...);
8.[x,fval,exitflag,output]=quaprog(...);
参考文献:
[1]孙祥、徐流美、吴清. MATLAB7.0基础教程. 清华大学出版社. 2005年
[2] 林雪松、周婧、林德新. MATLAB7.0应用集锦. 机械工业出版社. 2006年
[3]邱李华. MATLAB7及工程问题解决方案. 机械工业出版社. 2006年