非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23非线性优化问题吴鹏(rocwoods)rocwoods@126.comMATLAB从零到进阶非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23主要内容理论背景理论模型MATLAB实现案例扩展非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23第一节理论背景非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/231951年Kuhn-Tucker最优条件(简称KT条件)Davidon(1959),Fletcher和Powell(1963)提出DFP方法1970年由Broyden,Fletcher,Goldfarb和Shanno从不同的角度共同提出的BFGS方法约束变尺度(SQP)方法(Han和Powell为代表)和Lagrange乘子法(代表人物是Powell和Hestenes)80年代开始研究信赖域法、稀疏拟牛顿法、大规模问题的方法和并行计算90年代研究解非线性优化问题的内点法和有限储存法非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23第二节理论模型非线性优化问题©吴鹏,MATLAB从零到进阶.一、无约束非线性优化不失一般性,无约束优化的一般形式:其中,为非线性函数。对于无约束非线性最大化可以通过如下转换将其转化为标准的无约束非线性优化的一般形式:2019/12/23min()nfxxR()fxmax()min()nnfxxRfxxR非线性优化问题©吴鹏,MATLAB从零到进阶.二、约束非线性优化不失一般性,约束优化的一般形式:其中,为非线性函数。为不等式约束,为等式约束。与无约束非线性最大化类似,对于约束非线性最大化可以通过转换,将其转化为标准的约束非线性优化的一般形式:2019/12/23min()()01,2,,.()01,2,,ijfxgximsthxjl:nfxRR()igx()0jhx非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23max()()01,2,,.()01,2,,min()()01,2,,.()01,2,,iijjfxgximsthxjlfxgximsthxjl非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23第三节MATLAB实现非线性优化问题©吴鹏,MATLAB从零到进阶.一、fminunc函数(无约束优化)2019/12/23fminunc函数是MATLAB求解无约束优化问题的主要函数,函数主要使用BFGS拟牛顿算法(BFGSQuasi-Newtonmethod)、DFP拟牛顿算法(DFPQuasi-Newtonmethod)、最速下降法等。其调用格式主要如下:x=fminunc(fun,x0)x=fminunc(fun,x0,options)[x,fval]=fminunc(...)[x,fval,exitflag]=fminunc(...)[x,fval,exitflag,output]=fminunc(...)[x,fval,exitflag,output,grad]=fminunc(...)[x,fval,exitflag,output,grad,hessian]=fminunc(...)非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23其中输入参数:Fun:目标函数一般用句柄形式给出X0:优化算法初始迭代点Options:参数设置函数输出:X:最优点输出(或最后迭代点)Fval:最优点(或最后迭代点)对应的函数值Exitflag:函数结束信息(具体参见matlabhelp)Output:函数基本信息包括迭代次数,目标函数最大计算次数,使用的算法名称,计算规模等。Grad:最优点(或最后迭代点)的导数Hessian:最优点(或最后迭代点)的二阶导数例题参考书中【例14.3-1】非线性优化问题©吴鹏,MATLAB从零到进阶.二、fminsearch函数2019/12/23fminsearch是MATLAB中求解无约束的函数之一,其使用的算法为可变多面体算法(Nelder-MeadSimplex),其调用格式主要如下:x=fminsearch(fun,x0)x=fminsearch(fun,x0,options)[x,fval]=fminsearch(...)[x,fval,exitflag]=fminsearch(...)[x,fval,exitflag,output]=fminsearch(...)非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23其中输入参数:Fun:目标函数X0:迭代初始点Options:函数参数设置函数输出:X:最优点(算法停止点)Fval:最优点对应的函数值Exitflag:函数停止信息1:函数收敛正常停止0:迭代次数,目标函数计算次数达到最大数-1:算法被output函数停止Output:函数运算信息例题参考书中【例14.3-2】非线性优化问题©吴鹏,MATLAB从零到进阶.三、fmincon函数2019/12/23fmincon是MATLAB最主要的求解约束最优化的函数,该函数要求的约束优化问题的标准形式为:其中,为向量,与为矩阵,为目标函数,为非线性约束,为线性约束,为可行解的区间约束。min()()0()0.fxcxceqxstAxbAeqxbeqlbxub,,,,xbbeqlbubAAeq()fx(),()cxceqx,AxbAeqxbeqlbxub非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23fmincon调用格式主要如下: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(...)[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(...)非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23函数输入:Fun:目标函数名称X0:初始迭代点A:线性不等约束系数矩阵B:线性不等式约束的常数向量Aeq:线性等约束系数矩阵Beq:线性等式约束的常数向量lb:可行区域下届Ub:可行区域上界Nonlcon:非线性约束Options:优化参数设置函数输出:X:最优点(或者结束迭代点)Fval:最有点(或者结束迭代点对应的函数值Exitflag:迭代停止标识Output:算法输出(算法计算信息等)Ambda:拉格朗日乘子Grad:一阶导数向量Hessian:二阶导数矩阵用法参考书中:【例14.3-2】和【例14.3-3】非线性优化问题©吴鹏,MATLAB从零到进阶.2019/12/23第四节案例扩展非线性优化问题©吴鹏,MATLAB从零到进阶.一、大规模优化问题2019/12/23MATLAB求解大规模无约束最优化问题(或者其他大规模问题)时候,一般都会通过optimset函数对默认算法设置进行改变,使其使用专用的适合大规模问题的解算设置。【例14.4-1】求解如下优化问题(含200个变量):求解程序见书中LargObjFun.m以及largUnc.m211min(()),200nifxini非线性优化问题©吴鹏,MATLAB从零到进阶.二、含参数优化问题2019/12/23含参数的优化问题一般是在程序运行过程中参数才能确定。MATLAB求解求解这类问题在编程技术上和求解含参数的方程类似【例14.4-2】求解下面含参数函数的最小值:求解程序见书中ObjFunWithPara.m以及FunWithPara.m221122min(,)xfxaaxax