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. 【知识积累】C#中结构体和类的区别
  2. 给GAN一句描述,它就能按要求画画,微软CVPR新研究 | 附PyTorch代码
  3. 裸机中代码书写的细节总结
  4. 获取GridView中RowCommand的当前索引行
  5. 2019年江苏省计算机一级考试题目和答案,江苏省计算机等级考试一级2019年(春)...
  6. 小码农也有大梦想!人机猜拳java项目代码
  7. 50张图片做出李飞飞数万张的效果,类脑AI竟然这样玩?
  8. 2019年8月19日矩阵
  9. Windows下杀进程的命令
  10. Json文件格式化方法
  11. VC 模拟鼠标和键盘输入
  12. Java杂谈——求所有的4位吸血鬼数字
  13. 点击图片 实现放大功能
  14. Django的CBV和FBV
  15. 如何在Android Framework中添加自定义硬件编解码器?
  16. JSON 格式化和校验工具
  17. zemax---单透镜设计实例01
  18. checkmarx检测js中的jQuery安全漏洞
  19. 如何降低程序员的工资?【你中招没】
  20. 视频监控对接GB/T28181国标平台

热门文章

  1. ElasticSearch问题求解:master not discovered yet: have discovered
  2. html背景图片在文字下面,背景图片加文字的HTML怎么写
  3. 开启windows10系统组策略更新、开启Windows自动更新、关闭自动更新
  4. 感觉现在的技术圈越来越像娱乐圈了
  5. python读取grd数据_从等值线图形获取DAT和GRD格式的数据文件_王宜芳
  6. 从“一时红”到“持久火”,“网红”农产品如何越向“长红”?
  7. 【Rust日报】 2019-04-28
  8. raise notice oracle,openGauss 循序渐进:通过 raise notice 模拟 Oracle 的 DBMS_OUTPUT
  9. 闲谈一下,ES3、ES4、ES5、ES6 分别是什么
  10. powershell_符号链接(symbolic)的创建/重新指向设定Target/与快捷方式的区别/符号链接的应用/onedrive任意文件(夹)同步问题/git管理和符号链接\辨识符号链接函数