MATLAB 求解最优化问题

来源:互联网 发布:怎么用php设计网站 编辑:程序博客网 时间:2024/05/01 19:55

MATLAB 求解最优化问题

MATLAB 优化工具箱解线性规划

模型1

minz=cXs.t.AXb

命令:x=linprog(c,A,b)

模型2

minz=cXs.t.AXbAeqX=beq

命令:x=linprog(c,A,b,Aeq,beq)

注意:若没有不等式:AXb存在,则令A=[ ]b=[ ]

模型3

minz=cXs.t.AXbAeqX=beqVLBXVUB

命令:[1] x=linprog(c,A,b,Aeq,beq,VLB,VUB),[2] x=linprog(c,A,b,Aeq,beq,VLB,VUB,x0)

注意:[1] 若没有等式约束:AeqX=beq,则令Aeq=[ ]beq=[ ];[2] 其中x0表示初始点

命令:[x,fval]=linprog()

返回最优解xx出的目标函数的值fval

求解优化问题的主要函数

1. MATLAB求解优化问题的主要函数

类型 模型 基本函数名 一元函数极小
min F(x)s.t. x1<x<x2
x=fminbnd(F,x1,x2) 无约束极小
min F(X)
X=fminunc(F,x0)X=fminsearch(F,x0)
线性规划
min cTXs.t. AXb
X=linprog(c,A,b) 二次规划
min 12XTHX+cTXs.t. AXb
X=quadprog(H,c,A,b) 约束极小(非线性规划)
min F(X)s.t. G(X)b
X=fmincon(FG,x0) 达到目标问题
min rs.t. F(x)wrgoal
X=fgoalattain(F,x,goal,w) 极小极大问题
min maxx {Fi(x)}s.t. G(x)0
X=fminimax(FG,x0)

2. 优化函数的输入变量

变量 描述 调用函数 f 线性规划的目标函数fX或二次规划的目标函数XHX+fX中线性项的系数向量 linprog, quadprog fun 非线性优化的目标函数。fun必须为行命令对象或M文件、嵌入函数或MEX文件的名称 fminbnd, fminsearch,fminunc, fmincon, lsqcurvefit, lsqnonlin, fgoalattain, fminimax H 二次规划的目标函数XHX+fX中二次项的系数矩阵 quadprog A, b A矩阵和b向量分别为线性不等式约束:AXb中的系数矩阵和右端向量 linprog, quadprog, fgoalattain, fmincon, fminimax Aeq, beq Aeq矩阵和beq向量分别为线性等式约束:AeqX=beq中的系数矩阵和右端向量 linprog, quadprog, fgoalattain, fmincon, fminimax vlb, vub X的下限和上限向量:vlbXvub linprog, quadprog, fgoalattain, fmincon, fminimax, lsqcurvefit, lsqnonlin X_0 迭代初始点坐标 除fminbnd外所有优化函数 X1, X2 函数最小化的区间 fminbnd options 优化选项参数结构,定义用于优化函数的参数 所有优化函数

3. 优化函数的输出变量表

变量 描述 调用函数 x 由优化函数求得的值。若exitflag>0,则x为解;否则x不是最终解,它只是迭代终止时优化过程的值 所有优化函数 fval 解x处的目标函数值 linprog, quadprog, fgoalattain, fmincon, fminimax, lsqcurvefit, lsqnonlin, fminbnd exitflag 描述退出条件:exitflag>0,表明目标函数收敛于解x处;exitflag0=,表明目标函数评价或迭代的最大次数;exitflag<0,表明目标函数不收敛 output 包含优化结果信息的输出结构:Iterations:迭代次数;Algorithm:所采用的算法;FuncCount:函数评价次数 所有优化函数

4. 控制参数options的设置

用MATLAB解无约束问题

1. 一元函数无约束优化问题

min f(x)s.t. x1xx2

常用格式如下

x=fminbnd(fun,x1,x2);x=fminbnd(fun,x1,x2,options);[x,fval]=fminbnd(...);[x,fval,exitflag]=fminbnd(...);[x,fval,exitflag,output]=fminbnd(...);%%其中3、4、5的等式右边可用1或2的等式右边

函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。

2. 多元函数无约束优化问题

标准型为:min F(X)

命令格式为:

x=fminunc(fun,X0);  %或x=fminsearch(fun,X0)x=fminunc(fun,X0,options);  %或x=fminsearch(fun,X0,options)[x,fval]=fminunc(...);  %或[x,fval]=fminsearch(...)[x,fval,exitflag]=fminunc(...); %或[x,fval,exitflag]=fminsearch(...)[x,fval,exitflag,output]=fminunc(...);  %或[x,fval,exitflag,output]=fminsearch(...)

fminsearch是用单纯性法寻优

fminunc的算法:

  1. fminunc为无约束优化提供了大型优化和中型优化算法。
    1. options中的参数LargeScale控制:LargeScale='on'使用大型算法,LargeScale='off'使用小型算法
  2. fminunc为中型优化算法的搜素方向提供了4种算法,由options中的参数HessUpdate控制
    1. HessUpdate='bfgs'(默认值),拟牛顿法的BFGS公式
    2. HessUpdate='dfp',拟牛顿法的DFP公式
    3. HessUpdate='steepdesc',最速下降法
  3. fminunc为中型优化算法的步长一维搜索提供了两种算法,由options中参数LineSearchType控制:
    1. LineSearchType='quadcubic'(缺省值),混合的二次和三次多项式插值
    2. LineSearchType='cubicpoly',三次多项式插值

使用fminuncfminsearch可能会得到局部最优解

用MATLAB解非线性规划

标准型为:

min F(X)s.t. AXbAeqX=beqG(X)0Ceq(X)=0VLBXVUB

其中Xn维变元向量,G(X)Ceq(X)均为非线性函数组成的向量,其他变量的含义和线性规划、二次规划相同。MATLAB求解:

  1. 首先建立M文件fun.m,定义目标函数F(X)

    function f=fun(X);f=F(X);
  2. 若约束条件中有非线性约束:G(X)0Ceq(X)=0,则建立M文件nonlcon.m定义函数G(X)Ceq(X)

    function [G,Ceq]=nonlcon(X);G=...Ceq=...
  3. 建立主程序,非线性规划求解的函数是fmincon,命令的基本格式如下:

    x=fmincom('fun',X0,A,b);x=fmincon('fun',X0,A,b,Aeq,beq);x=fmincon('fun',X0,A,b,Aeq,beq,VLB,VUB);x=fmincon('fun',X0,A,b,Aeq,beq,VLB,VUB,'nonlcon');x=fmincon('fun',X0,A,b,Aeq,beq,VLB,VUB,'nonlcon',options);[x,fval]=fmincon(...);[x,fval,exitflag]=fmincon(...);[x,fval,exitflag,output]=fmincon(...);

fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为on),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。

fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。

fmincon函数可能会给出局部最优解,这与初值X0的选取有关。

原创粉丝点击