1、,f=inline(x(1)2-2*x(1)*exp(-x(1)2-x(2)2-(1)*x(2),x);x0=0,0;ff=optimset;ff.Display=iter;x=fminsearch(f,x0,ff)x=fminunc(f,x0,ff),基本用法:x=fminunc(fun,x0)x=fminunc(fun,x0,options,P1,P2,.),fun.m f(x)的m文件名x0 初始点;x 最优解P1,P2,传给fun的参数中间输入项缺省用占据位置,function y=fun071(x,a,b)y=x(1)2/a+x(2)2/b;,x0=1,1;a=2;b=2;x=fmi
2、nunc(fun071,x0,a,b),3、全局最优解和局部最优解,例:,f=inline(exp(-2*t)*cos(10*t)+exp(-3*(t+2)*sin(2*t),t);t0=1;t1,f1=fminsearch(f,t0),t1=0.92275390625000,f1=-0.15473299821860,t0=0.1;t2,f2=fminsearch(f,t0),t2=0.29445312500000,f2=-0.54362463738706,目标函数:,约束条件:,约束最优化,1、线性规划,目标函数:,其中:,价值向量,资源向量,决策变量向量,目标函数:,命令形式2:X,f,f
3、lag,c=linprog(C,A,b,Aeq,Beq,xm,xM,x0,opt)功能:各个参数的解释如前,若各个约束条件不存在,则用空矩阵来代替。,c=-2,-1,-4,-3,-1;A=0 2 1 4 2;3 4 5-1-1;b=54;62;Ae=;Be=;xm=0,0,3.32,0.678,2.57;ff.LargeScale=off;%是否采用大规模算法 ff.TolX=1e-15;%解的控制精度 ff.Display=iter;%显示信息的级别 X,f,flag,c=linprog(c,A,b,Ae,Be,xm,ff),目标函数:,2、二次规划,命令形式:X,f,flag,c=quad
4、prog(H,C,A,b,Aeq,Beq,xm,xM,x0,opt)功能:求解,H=4,-4;-4,8;C=-6,-3;A=1,1;4,1;b=3;9;ff.TolX=1e-15;X,f,flag,c=quadprog(H,C,A,b,Ae,Be,zeros(2,1),ff),定义 如果目标函数或约束条件中至少有一个是非线性函数时的最优化问题就叫做非线性规划问题,一般形式:(1)其中,是定义在 En 上的实值函数,简记:,其它情况:求目标函数的最大值或约束条件为大于等于零的情况,都可通过取其相反数化为上述一般形式,非线性规划,其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量
5、,其它变量的含义与线性规划、二次规划中相同.,(1)间接法(2)直接法,直接搜索法以梯度法为基础的间接法,非线性规划的求解算法,间接法,在非线性最优化问题当中,如果目标函数能以解析函数表示,可行域由不等式约束确定,则可以利用目标函数和可行域的已知性质,在理论上推导出目标函数为最优值的必要条件,这种方法就称为间接法(也称为解析法)。一般要用到目标函数的导数。,直接法,直接法是一种数值方法。这种方法的基本思想是迭代,通过迭代产生一个点序列 X(k),使之逐步接近最优点。只用到目标函数。如黄金分割法、Fibonacci、随机搜索法。,迭代法一般步骤,注意:数值求解最优化问题的计算效率取决于确定搜索方
6、向P(k)和步长 的效率。,最速下降法(steepest descent method)由法国数学家Cauchy于1847年首先提出。在每次迭代中,沿最速下降方向(负梯度方向)进行搜索,每步沿负梯度方向取最优步长,因此这种方法称为最优梯度法。特点:方法简单,只以一阶梯度的信息确定下一步的搜索方向,收敛速度慢;越是接近极值点,收敛越慢;它是其它许多无约束、有约束最优化方法的基础。该法一般用于最优化开始的几步搜索。,最速下降法算法:,1.首先建立M文件fun.m,定义目标函数F(X):function f=fun(X);f=F(X);,用Matlab求解上述问题,基本步骤分三步:,Matlab求解
7、步骤,3.建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:(1)x=fmincon(fun,X0,A,b)(2)x=fmincon(fun,X0,A,b,Aeq,beq)(3)x=fmincon(fun,X0,A,b,Aeq,beq,VLB,VUB)(4)x=fmincon(fun,X0,A,b,Aeq,beq,VLB,VUB,nonlcon)(5)x=fmincon(fun,X0,A,b,Aeq,beq,VLB,VUB,nonlcon,options)(6)x,fval=fmincon(.)(7)x,fval,exitflag=fmincon(.)(8)x,fval,e
8、xitflag,output=fmincon(.),输出极值点,M文件,迭代的初值,参数说明,变量上下限,输入参数的几点说明,模型中如果没有A,b,Aeq,beq,VLB,VUB的限制,则以空矩阵 作为参数传入;nonlcon:如果包含非线性等式或不等式约束,则将这些函数编写一个Matlab函数,nonlcon就是定义这些函数的程序文件名;不等式约束 G(x)=0等式约束 Ceq(x)=0.如果nonlcon=mycon;则myfun.m定义如下function G,Ceq=mycon(x)G=.%计算非线性不等式约束在点x处的函数值Ceq=.%计算非线性等式约束在点x处的函数值,对参数non
9、lcon的进一步示例,2个不等式约束,2个等式约束3个决策变量x1,x2,x3如果nonlcon以mycon1作为参数值,则程序mycon1.m如下,对照约束条件编写myfun1.m,function G,Ceq=mycon1(x)G(1)=x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-100G(2)=60-x(1)*x(1)+10*x(3)*x(3)Ceq(1)=x(1)+x(2)*x(2)+x(3)-80Ceq(2)=x(1)3+x(2)*x(2)+x(3)-80,注意:1 fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options
10、参数的GradObj设置为on),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。2 fmincon函数可能会给出局部最优解,这与初值X0的选取有关。,1、写成标准形式:s.t.,2x1+3x2 6 s.t x1+4x2 5 x1,x2 0,例,2、先建立M-文件 fun3.m:function f=fun3(x);f=-x(1)-2*x(2)+(1/2)*x(1)2+(1/2)*x(2)2,3、再建立主程序youh2.m:x0=1;1;A=2 3;1 4;b=6;5;Aeq=;beq=;VLB=0;0;VUB=;x,fval=f
11、mincon(fun3,x0,A,b,Aeq,beq,VLB,VUB),4、运算结果为:x=0.7647 1.0588 fval=-2.0294,1先建立M文件 fun4.m,定义目标函数:function f=fun4(x);f=exp(x(1)*(4*x(1)2+2*x(2)2+4*x(1)*x(2)+2*x(2)+1);,x1+x2=0 s.t.1.5+x1x2-x1-x2 0-x1x2 10 0,例,2再建立M文件mycon.m定义非线性约束:function g,ceq=mycon(x)g=1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10;ceq=;,3主程
12、序为:x0=-1;A=;b=;Aeq=1 1;beq=0;vlb=;vub=;x,fval=fmincon(fun4,x0,A,b,Aeq,beq,vlb,vub,mycon),3.运算结果为:x=-1.2250 1.2250 fval=1.8951,非负条件下线性最小二乘 lsqnonneg,适合如下模型:,注意:约束只有非负约束,语法:,x=lsqnonneg(c,d)x=lsqnonneg(c,d,x0)x=lsqnonneg(c,d,x0,options),语法:,x=lsqlin(C,d,A,b)x=lsqlin(C,d,A,b,Aeq,beq)x=lsqlin(C,d,A,b,Ae
13、q,beq,lb,ub)x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)x,resnorm=lsqlin(.)x,resnorm,residual=lsqlin(.)x,resnorm,residual,exitflag=lsqlin(.)x,resnorm,residual,exitflag,output=lsqlin(.)x,resnorm,residual,exitflag,output,lambda=lsqlin(.),非线性最小二乘lsqnonlin,适合模型:,语法:,x=lsq
14、nonlin(fun,x0)x=lsqnonlin(fun,x0,lb,ub)x=lsqnonlin(fun,x0,lb,ub,options)x=lsqnonlin(fun,x0,options,P1,P2,.)x,resnorm=lsqnonlin(.)x,resnorm,residual=lsqnonlin(.)x,resnorm,residual,exitflag=lsqnonlin(.)x,resnorm,residual,exitflag,output=lsqnonlin(.)x,resnorm,residual,exitflag,output,lambda=lsqnonlin(.)x,resnorm,residual,exitflag,output,lambda,jacobian=lsqnonlin(.),例:求解x,使得下式最小,resnorm 等于 norm(C*x-d)2residual 等于C*x-d,返回参数说明,编写M文件myfun.m计算向量F,function F=myfun(x)k=1:10;F=2+2*k-exp(k*x(1)-exp(k*x(2);,调用优化函数lsqnonlin,%给定搜索起点x0=0.3
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1