您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 最优化问题的MATLAB求解.
Matlab最优化工具箱Name:曾泰山E-mail:zengtsh@gmail.commin..01,2,,()()01,2,ijfxsthximPgxjp最优化问题的一般数学模型最优化问题的一般算法f(X)局部最优解整体最优解3使得或者某个kx恰好是问题的一个最优解,或者该点列kx收敛到问题的一个最优解*x。2产生可行点1x,2x,…,kx,…,记为kx;1给定一个初始可行点0xD;求解P的基本方法(迭代算法):2以kx为出发点,作射线kkxp,其中0,在此射线上求一点1kx,1kx=kkkxp,使得1()()kkfxfx,其中k称为步长。1在可行域内kx点处求一个方向kp,称这个方向为下降方向或搜索方向;点列kx的产生,通常采取两步完成:下降算法:在迭代算法中,若1()()kkfxfxMatlab优化工具箱简介1.MATLAB求解优化问题的主要函数类型模型基本函数名一元函数极小MinF(x)s.t.x1xx2x=fminbnd(‘F’,x1,x2)无约束极小MinF(X)X=fminunc(‘F’,X0)X=fminsearch(‘F’,X0)线性规划MinXcTs.t.AX=bX=linprog(c,A,b)二次规划Min21xTHx+cTxs.t.Ax=bX=quadprog(H,c,A,b)约束极小(非线性规划)MinF(X)s.t.G(X)=0X=fmincon(‘FG’,X0)达到目标问题Minrs.t.F(x)-wr=goalX=fgoalattain(‘F’,x,goal,w)极小极大问题Minmax{Fi(x)}X{Fi(x)}s.t.G(x)=0X=fminimax(‘FG’,x0)工具箱的结构2.优化函数的输入变量使用优化函数或优化工具箱中其它优化函数时,输入变量见下表:变量描述调用函数f线性规划的目标函数f*X或二次规划的目标函数X’*H*X+f*X中线性项的系数向量linprog,quadprogfun非线性优化的目标函数.fun必须为行命令对象或M文件、嵌入函数、或MEX文件的名称fminbnd,fminsearch,fminunc,fmincon,lsqcurvefit,lsqnonlin,fgoalattain,fminimaxH二次规划的目标函数X’*H*X+f*X中二次项的系数矩阵quadprogA,bA矩阵和b向量分别为线性不等式约束:bAX中的系数矩阵和右端向量linprog,quadprog,fgoalattain,fmincon,fminimaxAeq,beqAeq矩阵和beq向量分别为线性等式约束:beqXAeq中的系数矩阵和右端向量linprog,quadprog,fgoalattain,fmincon,fminimaxvlb,vubX的下限和上限向量:vlb≤X≤vublinprog,quadprog,fgoalattain,fmincon,fminimax,lsqcurvefit,lsqnonlinX0迭代初始点坐标除fminbnd外所有优化函数x1,x2函数最小化的区间fminbndoptions优化选项参数结构,定义用于优化函数的参数所有优化函数3.优化函数的输出变量下表:变量描述调用函数x由优化函数求得的值.若exitflag0,则x为解;否则,x不是最终解,它只是迭代制止时优化过程的值所有优化函数fval解x处的目标函数值linprog,quadprog,fgoalattain,fmincon,fminimax,lsqcurvefit,lsqnonlin,fminbndexitflag描述退出条件:exitflag0,表目标函数收敛于解x处exitflag=0,表已达到函数评价或迭代的最大次数exitflag0,表目标函数不收敛output包含优化结果信息的输出结构.Iterations:迭代次数Algorithm:所采用的算法FuncCount:函数评价次数所有优化函数模型输入时需要注意的问题•(1)目标函数最小化•优化函数fminbnd、fminsearch、fminunc、fmincon、fgoalattain、fminmax和lsqnonlin都要求目标函数最小化。•(2)约束非正•优化工具箱要求非线性不等式约束的形式为Ci(x)≤0,通过对不等式取负可以达到使大于零的约束形式变为小于零的不等式约束形式的目的。最优化问题的求解一、无约束最优化问题求解问题的描述:求)(minxfxx=[x1,x2,…,xn]——最优化变量f(x)——目标函数该求解问题就是要求取x的值,使目标函数f(x)为最小。即求函数f(x)的最小值。除满足函数定义域的要求外,对自变量x无其他约束条件。因此称为无约束最优化问题。若要计算一个函数f(x)的最大值,可根据“f(x)的最大值=-f(x)的最小值”得到。目前所有的最优化算法均不能保证求出全局最优解,即整个定义域上的最值,以下介绍的命令实际上是求极小值(局部最小值)点。命令:fminsearch或fminunc用于求解无附加条件的极小值点。两命令的语法相同。语法:x=fminsearch(fun,x0)——最简形式x0——向量,指搜索点初值,表示为列向量。x0较难确定,所以最好使用flag参数来把握求解过程的有效性。fun——用内联函数,或M-函数文件(被引用时必须用单引号括住函数名),或直接以单引号括起的函数表达式给出的方程(组)。在求多元函数最值时,需在fun的编写过程中将各变量写成一个向量的各分量的形式,即x(1),x(2),…,并且方程组要以多行一列的矩阵形式来表示。例1:求一元函数y=ex–x3–4x2的(局部)最小值点。格式1——x=fminsearch('exp(x)-x^3-4*x^2',1)可使用ezplot命令作出函数图象来验证上述结果。与fsolve的情况类似,由于极值不一定唯一,改变初始搜索点位置可能会得到不同的结果。格式2——首先编写M-函数文件如下:functiony=ff1(x)y=exp(x)-x^3-4*x^2;之后在命令窗口输入命令:x=fminsearch('ff1',1)格式3——使用内联函数g=inline(‘exp(x)-x^3-4*x^2’,’x’);x=fminsearch(g,1)x=4.6123-10-8-6-4-202468100500100015002000xexp(x)-x3-4x2ezplot('exp(x)-x^3-4*x^2',[-10,10])执行结果:结合函数图像来检验初始搜索点的确定是否合理:x=fminsearch('exp(x)-x^3-4*x^2',-2)从函数图像看,如果初始搜索点改为负数,我们可能得到另一个结果。如:得:x=-2.6752格式2——首先编写M-函数文件如下:functiony=ff2(x)y=(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2));之后在命令窗口输入命令:x=fminsearch('ff2',[1,1])x=fminsearch('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))',[1,1])例2:求二元函数的(局部)最小值点(曲面的最低点)xyyxexxz22)2(2格式1格式3——使用内联函数g=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))','x');x=fminsearch(g,[1,1])得:x=0.6111-0.3055x=0:0.2:5;y=0:0.2:5;[xx,yy]=meshgrid(x,y);zz=(xx.^2-2*xx).*exp(-xx.^2-yy.^2-xx.*yy);mesh(xx,yy,zz)可事先绘制图像,来获得初始搜索点。首先较为随意地给出一个绘图区域:0123450246-0.6-0.4-0.200.2-4-2024-505-1-0.500.511.5x=-3:0.2:3;y=-3:0.2:3;[xx,yy]=meshgrid(x,y);zz=(xx.^2-2*xx).*exp(-xx.^2-yy.^2-xx.*yy);mesh(xx,yy,zz)根据上图,重新确定一个更为合理的绘图区域:-3-2-10123-505-1-0.500.511.5xy-505-505-1-0.500.511.5xy通过改变观察视角,可以看出极小值点的横纵坐标的大致值。2、线性规划问题的求解线性规划问题是一种最简单的有约束最优化问题,其目标函数和约束函数都是线性的,约束函数包括线性不等式和线性等式。问题的描述:求xfMmxxxDCxBAxtsx..minx——自变量,是由若干分量组成的列向量;f——x的各分量前的系数构成的向量;f﹒x——目标函数(即求该函数的最小值),是f与x的数量积。以下为约束函数:Ax≤B——对目标函数的自变量x的线性不等式约束;对“≥”的情况,需要通过两边同乘以-1改成标准的“≤”的形式;Cx=D——对目标函数的自变量x的线性等式约束;xm≤x≤xM——x的取值范围,xm和xM分别为下界向量和上界向量。命令:linprog语法:[x,fopt,flag,c]=linprog(f,A,B,C,D,xm,xM,x0,OPT,p1,p2,…)含义见前面的“问题描述”初始搜索点控制选项,包含若干分量,用于对求解过程进行控制。可省略。附加参数,可省略求解结果(令目标函数取得最优解的x)目标函数的最优解反映求解过程中的迭代次数等信息该值若为正,说明求解成功,否则表明求解出现问题。最简形式:x=linprog(f,A,B,C,D,xm,xM,x0)注意:各参数的参数名可以变,但位置必须跟上述格式对牢。若相应的约束不存在,应该用空矩阵[]占位。由于输入变量较多且往往较复杂,一般需事先定义。用MATLAB优化工具箱解线性规划minz=fXbAXts..1、模型:命令:x=linprog(f,A,b)2、模型:minz=fXbAXts..beqXAeq命令:x=linprog(f,A,b,Aeq,beq)注意:若没有不等式:存在,则令A=[],b=[].bAX3、模型:minz=fXbAXts..beqXAeqVLB≤X≤VUB命令:[1]x=linprog(f,A,b,Aeq,beq,VLB,VUB)[2]x=linprog(f,A,b,Aeq,beq,VLB,VUB,X0)注意:[1]若没有等式约束:,则令Aeq=[],beq=[].[2]其中X0表示初始点beqXAeq4、命令:[x,fval]=linprog(…)返回最优解x及x处的目标函数值fval.解:编写M文件如下:c=[-7-5];A=[32;46;07];b=[90;200;210];Aeq=[];beq=[];vlb=[0,0];vub=[inf,inf];[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)21)57(minxxz2100xx21020090706423..21xxts2157maxxxz0,02107200649023..2122121xxxxxxxts问题2解答例3:求)342(min543215.2,678.0,32.3,0,6254354242..54321543215432xxxxxxxxxxxxxxxxxxxtsx编写M-脚本文件如下:f=[-2-1-4-3-1];%线性的目标函数的系数向量(行、列均可)A=[02142;
本文标题:最优化问题的MATLAB求解.
链接地址:https://www.777doc.com/doc-2316959 .html