最优化方法

刘建军

目录

  • 1 第一单元 数学规划基础
    • 1.1 序言
    • 1.2 数学规划基础
  • 2 第二单元 线性规划
    • 2.1 线性规划简史
    • 2.2 线性规划模型
    • 2.3 线性规划图解法及软件求解
    • 2.4 线性规划基本定理
    • 2.5 线性规划的标准形
    • 2.6 标准形线性规划的解
    • 2.7 单纯形法原理
    • 2.8 单纯形法算法步骤及程序实现
    • 2.9 表格单纯形法
    • 2.10 人工变量求解线性规划问题
  • 3 第三单元 对偶规划及灵敏度分析
    • 3.1 对偶规划
    • 3.2 对偶单纯形法
    • 3.3 灵敏度分析
    • 3.4 线性规划-内点法
    • 3.5 整数线性规划
  • 4 第四单元 无约束非线性优化
    • 4.1 非线性优化概论
    • 4.2 一维搜索算法
    • 4.3 梯度类算法
      • 4.3.1 最速下降法
      • 4.3.2 牛顿法与修正牛顿法
      • 4.3.3 拟牛顿法(DFP+BFGS)
      • 4.3.4 共轭梯度法(FR)
      • 4.3.5 最小二乘法
      • 4.3.6 梯度类算法比较实验
      • 4.3.7 梯度算法历史注记
    • 4.4 直接类算法
      • 4.4.1 模式搜索法(Hooke Jeeves)
      • 4.4.2 单纯形加速法
      • 4.4.3 无约束优化算法比较实验
  • 5 第五单元 约束非线性优化
    • 5.1 KKT点及程序实现
    • 5.2 罚函数法(SUMT)
    • 5.3 可行方向法
    • 5.4 二次规划(QP)
    • 5.5 约束优化软件求解
  • 6 第六单元 多目标规划
    • 6.1 多目标规划原理
    • 6.2 多目标的四个求解技巧
    • 6.3 目标规划方法
    • 6.4 多目标规划应用实例
  • 7 第七单元 动态规划
    • 7.1 动态规划基本概念和原理
    • 7.2 动态规划应用
  • 8 第八单元  现代优化算法
    • 8.1 现代优化算法概论
    • 8.2 禁忌搜索算法(Taboo Search, TS)
      • 8.2.1 禁忌搜索算法原理
      • 8.2.2 禁忌搜索算法步骤与参数设置
      • 8.2.3 禁忌搜索算法的应用
    • 8.3 模拟退火算法(Simulated Annealing, SA)
      • 8.3.1 模拟退火算法物理背景
      • 8.3.2 模拟退火算法步骤与数学模型
      • 8.3.3 模拟退火算法应用案例
    • 8.4 遗传算法(Genetic Algrithm, GA)
      • 8.4.1 遗传算法生物学背景
      • 8.4.2 遗传算法流程用简单实例
      • 8.4.3 改进遗传算法改进与应用
    • 8.5 粒子群算法(Partical Swarm Optimization, PSO)
      • 8.5.1 粒子群算法原理及实现
      • 8.5.2 粒子群算法应用实例
约束优化软件求解
  • 1 MATLAB用fmincon函...
  • 2 Python——使用sci...

MATLAB用fmincon函数求非线性约束下的最优化问题

该实例皆为在MATLAB R2014a运行所得。

优化模型

我们要求解的最优化问题的形式如下:

其中  是一个向量, 是非等式约束,是等式约束。

约束条件可以进一步细化为:

  1. 线性不等式约束:Axb

  2. 线性等式约束:Aeqx=beq

  3. 非线性不等式约束:Cx≤0

  4. 非线性等式约束:Ceq x =0

  5. 的下界和上界:Lbnd≤xUbnd

MATLAB最优化工具箱提供了一个fmincon函数,专门用于求解各种约束下的最优化问题。该函数的调用格式为:

[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,options)

其中x、fval、filename、x0和option的含义分别为自变量、因变量、函数名、初值、优化参数。其余参数为约束条件,参数NonF为非线性约束函数的M文件名。如果某个约束不存在,则用空矩阵来表示。 

例题

求解有约束最优化问题

 首先编写目标函数M文件fop.m:

function f=fop(x) 
    f=0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)+1/30*x(1)^3; 
end

再设定约束条件,并调用fmincon函数求解此约束最优化问题:

x0=[0.5;0.5]; 
A=[-1,-0.5;-0.5,-1]; b=[-0.4;-0.5]; 
lb=0;0]; 
option=optimset; 
option.LargeScale='off';
option.Display='off'; 

[x,f]=fmincon('fop',x0,A,b,[],[],lb,[],[],option)

输出结果为:

x =

          0.34

          0.33

f =

          0.25