Navigator

  • 无约束优化原理
  • Matlab工具箱求解算法
  • 应用1:资金调用问题
    • matlab code
  • 应用2:经营最佳安排问题
    • matlab code
  • 数值迭代法求解无约束极值问题
    • 黄金分割法
  • 无约束多维极值
    • 模式搜索法
      • code
    • 单纯形搜索(Simplex)
    • Powell法
    • 最速下降法
    • 共轭梯度法
    • 拟牛顿法

无约束优化原理

求解无约束优化的方法主要有直接搜索法(search method)和梯度法(gradient method).
直接搜索法适合目标函数高度非线性,没有导数或者导数很难计算的情况,直接搜索方法包括单纯形法,Hooke-Jeeves搜索法,Pavell共轭方向法等.
梯度法在可以得到导数信息的情况下是一种更优的方法,该方法利用一阶导数和Hessian矩阵的信息,可以得到更快的收敛速度。常用的梯度法包括最速下降法,Newton法,Marquart法,共轭梯度法和拟牛顿法(Quasi-Newton method).

Matlab工具箱求解算法

  1. 大型优化算法:在提供函数梯度信息的情况下,默认使用大型优化算法,在每一个迭代步骤中使用PCG法求解大型线性系统得到近似解。
  2. 中型优化算法:fminunc函数中的参数options.LargeScale设置为off,该算法采用基于二次和三次混合插值的一维搜索算法的BFGS拟牛顿法
  3. 一维搜索算法的设置,options.LineSearchType设置为quadcubic时,采用二次和三次混合插值法,options.LineSearchType设置为cubicpoly时,将采用三次插值法

应用1:资金调用问题

source:Matlab优化算法 Page 186
令xix_ixi​表示第iii所使用的资金,总收益为TTT,目标函数为
max⁡T=x1+x2+x3+x4\max T=\sqrt{x_1}+\sqrt{x_2}+\sqrt{x_3}+\sqrt{x_4} maxT=x1​​+x2​​+x3​​+x4​​
约束条件为
{x1≤4001.1x1+x2≤4401.21x1+1.1x2+x3≤4841.331x1+1.21x2+1.1x3+x4≤532.4xi≥0\begin{cases} x_1\leq 400\\ 1.1x_1+x_2\leq 440\\ 1.21x_1+1.1x_2+x_3\leq 484\\ 1.331x_1+1.21x_2+1.1x_3+x_4\leq 532.4\\ x_i\geq 0 \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​x1​≤4001.1x1​+x2​≤4401.21x1​+1.1x2​+x3​≤4841.331x1​+1.21x2​+1.1x3​+x4​≤532.4xi​≥0​

matlab code

clear all;
clc;
A = [1.1, 1, 0, 0; 1.21, 1.1, 1, 0; 1.331, 1.21, 1.1, 1];
b = [440, 484, 532.4];
lb = [0, 0, 0, 0];
ub = [400, 1000, 1000, 1000];
x0 = [100, 100, 100, 100]; % set initial point
[x, fval] = fmincon('obj_642', x0, A, b, [], [], lb, ub);
disp(x);
disp(fval);

应用2:经营最佳安排问题

source:Matlab优化算法 Page 189

matlab code

clear all;
clc;
lb = [0, 0];
x0 = [0, 0];
[x, w] = fmincon('obj_643', x0, [], [], [], [], lb, [], 'cons');
disp(x);
disp(w);

数值迭代法求解无约束极值问题

数值迭代的基本思想是从一个初始点X(0)X^{(0)}X(0)出发,在可行方向d(0)d^{(0)}d(0)搜索,确定最佳步长α0\alpha_0α0​,使得函数沿着d⃗(0)\vec{d}^{(0)}d(0)下降最大
X(k+1)=X(k)+αkd⃗(0)(k)(1)X^{(k+1)}=X^{(k)}+\alpha_k\vec{d}^{(0)(k)}\tag{1} X(k+1)=X(k)+αk​d(0)(k)(1)

黄金分割法

该方法适合在已知极值区间的基础上,不断缩小区间找到极值,要求目标函数为单峰,算法步骤如下:

  1. 给定区间[a,b][a, b][a,b]及eps>0eps>0eps>0
  2. 计算r=a+0.382(b−a),u=a+0.618(b−a)r=a+0.382(b-a), u=a+0.618(b-a)r=a+0.382(b−a),u=a+0.618(b−a)
  3. 如果f(r)>f(u)f(r)>f(u)f(r)>f(u),则进行下一步,否则转(5)
  4. 如果u−r<epsu-r<epsu−r<eps,则停止计算,输出x∗=u,f∗=f(u)x^*=u, f^*=f(u)x∗=u,f∗=f(u),否则令a=r,r=u,u=a+0.618(b−a)a=r, r=u, u=a+0.618(b-a)a=r,r=u,u=a+0.618(b−a),转(3)
  5. 如果u−r<epsu-r<epsu−r<eps,则停止计算,输出x∗=r,f∗=f(r)x^*=r, f^*=f(r)x∗=r,f∗=f(r),否则令b=u,u=r,r=a+0.382(b−a)b=u, u=r, r=a+0.382(b-a)b=u,u=r,r=a+0.382(b−a),转(3)

无约束多维极值

该类问题可以使用直接法求解,不需要计算导数,只需要计算函数值。

模式搜索法

轴向移动的目标是找到有利的下降方向,而模式移动的目标是沿着有利下降方向加速移动,可以使用patternsearch函数调用。

code

clear all;
clc;
x0 = [0, 0];
x = patternsearch(@psobj, x0);
disp(x);

单纯形搜索(Simplex)

单纯形法是从一个可行解出发,不断找到可以改进目标值的基本可行解,达到最优基本可行解。

Powell法

该方法的本质是共轭方向法,Powell法将整个计算过程分解为若干阶段,在每个阶段由n+1n+1n+1次一维搜索组成,首先沿着已知的nnn个方向进行搜索,找到一个最好点,然后沿着本阶段的初始点与该最好点连线方向进行搜索,定位出本阶段的最好点。根据得到的最好方向进行下一阶段的迭代。

最速下降法

将nnn维问题转化维一系列负梯度方向使用一维搜索方法寻优。
由方程(1)(1)(1),设置方向为负梯度方向
d⃗(k)=−∇f(x(k))∥∇f(x(k))∥\vec{d}^{(k)}=-\frac{\nabla f(x^{(k)})}{\lVert\nabla f(x^{(k)})\rVert} d(k)=−∥∇f(x(k))∥∇f(x(k))​
最速方向的迭代公式为
X(k+1)=X(k)−αk∇f(X(k))∥f(X(k))∥X^{(k+1)}=X^{(k)}-\alpha_k\frac{\nabla f(X^{(k)})}{\lVert f(X^{(k)})\rVert} X(k+1)=X(k)−αk​∥f(X(k))∥∇f(X(k))​
在第kkk次迭代初始点X(k)X^{(k)}X(k)和搜索方向d⃗(k)\vec{d}^{(k)}d(k)确定时,原始目标函数为关于步长α\alphaα的一维函数
φ(α)=f(x(k)+αS(k))\varphi(\alpha)=f(x^{(k)}+\alpha S^{(k)}) φ(α)=f(x(k)+αS(k))
在可导的情况下,可以得到
{φ(α)=[∇f(x(k)+αd⃗(k))]T∇f(x(k))=0[∇f(x(k+1))]T∇f(x(k))=0[d⃗(k+1)]Td⃗(k)=0\begin{cases} \varphi(\alpha)=[\nabla f(x^{(k)}+\alpha \vec{d}^{(k)})]^T\nabla f(x^{(k)})=0\\ [\nabla f(x^{(k+1)})]^T\nabla f(x^{(k)})=0\\ [\vec{d}^{(k+1)}]^T\vec{d}^{(k)}=0 \end{cases} ⎩⎪⎨⎪⎧​φ(α)=[∇f(x(k)+αd(k))]T∇f(x(k))=0[∇f(x(k+1))]T∇f(x(k))=0[d(k+1)]Td(k)=0​
可以发现,连续两次搜索方向互相正交,形成Z形状的搜索路径。

共轭梯度法

最速下降法在越接近极值点的区域的搜索效率越差,因此采用近似的思想对最速下降法进行改进,根据目标函数在极值点附近可以近似于一个二次函数,希望进行一次迭代达到极值点x∗x^*x∗
x∗=x(1)+αd⃗(1)x^*=x^{(1)}+\alpha\vec{d}^{(1)} x∗=x(1)+αd(1)
对f(x)f(x)f(x)进行Taylor Expansions
f(x)=12xTGx+BTx+Cf(x)=\frac{1}{2}x^TGx+B^Tx+C f(x)=21​xTGx+BTx+C
在x(1)x^{(1)}x(1)的梯度为
∇f(x(1))=Gx(1)+B\nabla f(x^{(1)})=Gx^{(1)}+B ∇f(x(1))=Gx(1)+B
在极值点x∗x^*x∗,满足必要条件,代入得到
∇f(x∗)=G[x(1)+α1d⃗(1)]+B=∇f(x(1))+α1Gd⃗(1)=0\nabla f(x^*)=G[x^{(1)}+\alpha_1\vec{d}^{(1)}]+B=\nabla f(x^{(1)})+\alpha_1G\vec{d}^{(1)}=0 ∇f(x∗)=G[x(1)+α1​d(1)]+B=∇f(x(1))+α1​Gd(1)=0
等式两侧同时乘以[d⃗(0)]T[\vec{d}^{(0)}]^T[d(0)]T,可以得到
[d⃗(0)]TGd⃗(1)=0[\vec{d}^{(0)}]^TG\vec{d}^{(1)}=0 [d(0)]TGd(1)=0
向量d⃗(0)\vec{d}^{(0)}d(0)和d⃗(1)\vec{d}^{(1)}d(1)成为GGG的共轭方向。

拟牛顿法

拟牛顿法是利用目标函数fff和一阶导数ggg的信息,构造出目标函数的曲率近似

Matlab无约束优化相关推荐

  1. matlab解决无约束优化问题

    无约束优化问题 要用到的数学知识: 1.向量范数与矩阵范数 2.多元函数梯度与Hessian阵 3.凸集与凸函数 特别要提示的是:如果该函数为凸函数,那么它有且仅有一个最优点,如果它的值不在无穷处,我 ...

  2. matlab某分子由25个原子组成,清华大学数学实验-实验7无约束优化1

    数学实验 实验 7 无约束优化 实验 7 无约束优化 生医 0 王言 2010013212 实验目的 1 掌握用 MATLAB 优化工具箱的基本用法 对不同算法进行初步分析 比较 2 练习用无约束优化 ...

  3. matlab某分子由25个原子组成,清华大学数学实验实验7无约束优化1

    清华大学数学实验实验7无约束优化1 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.9 积分 实验7无约束优化生医0 王言 2010013212 ...

  4. Matlab建模—无约束优化与非线性规划相关算例

    数学建模期末复习,撰写博客做总结之用,主要侧重于算例的模型建立与部分代码的实现,其中不足之处望读者多多指正. 文章目录 前言 非线性规划问题 供应与选址 问题描述 模型建立 无约束最优化 梯子长度问题 ...

  5. matlab某分子由25个原子组成,实验七(无约束优化)

    实验七(无约束优化) 化21 张腾 2014-4-18 大学数学实验 实验报告 --无约束优化 一. 实验目的 1.掌握MATLAB优化工具箱的基本用法,对不同算法进行初步分析.比较. 2.练习用无约 ...

  6. 02(c)多元无约束优化问题-牛顿法

    此部分内容接<02(a)多元无约束优化问题>! 第二类:牛顿法(Newton method) \[f({{\mathbf{x}}_{k}}+\mathbf{\delta })\text{ ...

  7. 无约束优化:Hessian-Free Optimization 拟牛顿类算法(BFGS,L-BFGS)

    文章目录 无约束优化:Hessian-Free Optimization 拟牛顿类算法(BFGS,L-BFGS) 为什么要用拟牛顿算法 割线方程 严格凸且光滑函数的BFGS算法 非凸但光滑函数的BFG ...

  8. 最优化 | 无约束优化方法 | C++实现

    文章目录 参考资料 1. 前言 2. 梯度下降法 2.1 原理 2.2 c++实现 2.3 共轭梯度法 3. 牛顿法 3.1 原理 3.2 c++实现 4. 模拟退火算法 4.1 原理 4.2 c++ ...

  9. MATLAB无约束多维极值——最速下降法

    一.算法原理 1.首先了解一个概念,什么式无约束最优化. 无约束优化问题就是在x∈R^n的范围内,找到一点x*,使得f(x*)<f(x)对于任意x∈R^n都成立.点x*就是全局最优解. 其一般形 ...

  10. 02(d)多元无约束优化问题-拟牛顿法

    此部分内容接<02(a)多元无约束优化问题-牛顿法>!!! 第三类:拟牛顿法(Quasi-Newton methods) 拟牛顿法的下降方向写为: ${{\mathbf{d}}_{k}}= ...

最新文章

  1. Hue、Hive、Sentry、Airflow、Oozie
  2. 每天学一点flash(23) flash.net包常用笔记
  3. qt creator创建cmake构建的程序,无法启动调试(点左下角运行不出结果 No executable specified.)
  4. 常量、变量、数据类型
  5. 计算机意外关闭原因 安全问题,win7弹出“计算机意外地重新启动或遇到错误”处理方法...
  6. 10月5日起 部分小米红米机型将停止开发版内测公测
  7. spark学习-33-Spark的RPC通信源码分析
  8. 叶子问题(层次遍历加判断叶子)
  9. The Bits(找规律)
  10. php 基于redis计数器类
  11. Improving Opencv 1:The Core Functionality (core module) Mat - The Basic Image Container
  12. paip.c++ static 变量的定义以及使用...
  13. 95后公务员晒3004元工资引群嘲:安逸过了头,人生也就止步了
  14. win10 IDE改AHCI,无需重装系统
  15. Java SE基础知识点总结(四)
  16. *sql注入实战--记一次绕过WTS-WAF拦截注入**
  17. ecshop 添加php标签,ecshop模板调用标签大全
  18. uniapp 原生js实现公历转农历
  19. Windows下部署ubuntu16.04+anaconda2.7+tensorflow
  20. 【Unity】Kinect屏幕显示环境背景及人体投影

热门文章

  1. 编1加到100的代码用C语言,用C语言编写一个程序,计算从1加到100的和,并将结果输出。跪求代码,急!...
  2. 关于Ajax原理与使用方式,收藏这一篇文章就够了!!
  3. 大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低平 每日一题--2020049--
  4. ul阻燃标准有几个等级_塑料制品中的UL 阻燃等级防火等级划分标准
  5. Php中什么时候用单引号,PHP中单引号和双引号的用法举例
  6. java cookie 跨域共享_跨域共享cookie
  7. 银行核心业务系统性能测试方法
  8. GAPS-银行综合前置系统
  9. 前端css 宠物列表
  10. linux中deb文件怎么安装,deb是什么文件?deb文件怎么安装?