zoukankan      html  css  js  c++  java
  • MATLAB 求解最优化问题

    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的选取有关。

  • 相关阅读:
    堆(heap)和栈(stack)的区别
    STL容器学习总结
    从瀑布模型、极限编程到敏捷开发
    智力题
    Trie树详解及其应用
    理解inode
    找出字符串中连续出现次数最多的子串
    Oracle数据库中大数据量查询优化问题分区表的操作方法
    “在解决方案中的一个或多个项目由于以下原因未能加载 项目文件或网站已移动或重新命名,或者不在您的计算机上” 的解决办法
    转:完全卸载Oracle方法
  • 原文地址:https://www.cnblogs.com/born2run/p/9581412.html
Copyright © 2011-2022 走看看