IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 优化工具包—无约束非线性优化求解器(fminsearch) -> 正文阅读

[数据结构与算法]优化工具包—无约束非线性优化求解器(fminsearch)

优化工具包—无约束非线性优化求解器(fminsearch)

原创不易,路过的各位大佬请点个赞


fminsearch函数:求无约束多变量函数的最小值
相比fminunc(同样也是求无约束多变量函数的最小值),fminsearch使用无导数法计算最小值

fminun优化函数见该链接

一、fminunc总体介绍

语法:

x = fminsearch(fun,x0)
x = fminsearch(fun,x0,options)
x = fminsearch(problem)
[x,fval] = fminsearch(___)
[x,fval,exitflag] = fminsearch(___)
[x,fval,exitflag,output] = fminsearch(___)

说明:
非线性规划求解器。搜索由以下公式指定的问题的最小值:
min ? x f ( x ) \min_xf(x) xmin?f(x)
f ( x ) f(x) f(x)是返回标量的函数, x x x是向量或矩阵;fminsearch求解器面向多变量函数;fminsearch适用于无约束非线性问题。如果需要优化的问题有约束,通常使用 fmincon。
相比fminunc(同样也是求无约束多变量函数的最小值),fminsearch使用无导数法计算最小值

x = fminsearch(fun,x0) 在点 x0 处开始并尝试求 fun 中描述的函数的局部最小值 x。

二、fminsearch求解器的具体用法

下面具体介绍fminunc求解器的用法

1)x = fminsearch(fun,x0) 在点 x0 处开始并尝试求 fun 中描述的函数的局部最小值 x;

2)x = fminsearch(fun,x0,options) 使用 options 所指定的优化选项执行最小化。使用 optimset 可设置这些选项。;

3)x = fminsearch(problem) 求 problem 的最小值,它是 problem 中所述的一个结构体;

4)[x,fval] = fminsearch(___),对任何上述输入语法,在 fval 中返回目标函数 fun 在解 x 处的值。

5)[x,fval,exitflag] = fminsearch(___) 还返回描述退出条件的值 exitflag。

6)[x,fval,exitflag,output] = fminsearch(___) 还会返回结构体 output 以及有关优化过程的信息。

三、举例:计算 Rosenbrock 函数的最小值

计算 Rosenbrock 函数的最小值,对于许多算法来说,这是极难的优化问题:
Rosenbrock目标函数:
f ( x ) = 100 ( x 2 ? x 1 2 ) 2 + ( 1 ? x 1 ) 2 f(\bm{x})=100(x_2-x_1^2)^2+(1-x_1)^2 f(x)=100(x2??x12?)2+(1?x1?)2
其中 x = [ x 1 , x 2 ] x=[x_1,x_2] x=[x1?,x2?]为一个二维向量。
该函数的最小值在 x = [ 1 , 1 ] \bm{x}=[1,1] x=[1,1]处,最小值为0;
下面我们将初始点设为 x 0 = [ ? 1.2 , 1 ] x_0 = [-1.2,1] x0?=[?1.2,1],使用 fminsearch函数求解

代码:

fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
x0 = [-1.2,1];
x = fminsearch(fun,x0)

求解结果:

x = 1×2

    1.0000    1.0000

四、设置选项:监视优化过程/检查优化过程

4.1 监视优化过程

设置选项,以监视 fminsearch 尝试定位最小值的过程。

设置选项,以在每次迭代时绘制目标函数图。

options = optimset(‘PlotFcns’,@optimplotfval);

将目标函数设置为 Rosenbrock 函数,
f ( x ) = 100 ( x 2 ? x 1 2 ) 2 + ( 1 ? x 1 ) 2 f(\bm{x})=100(x_2-x_1^2)^2+(1-x_1)^2 f(x)=100(x2??x12?)2+(1?x1?)2
将起始点设置为 x 0 = [ ? 1.2 , 1 ] x_0 = [-1.2,1] x0?=[?1.2,1] 并使用 fminsearch 计算 Rosenbrock 函数的最小值。

fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
x0 = [-1.2,1];
x = fminsearch(fun,x0,options)

在这里插入图片描述
结果为:

x = 1×2

    1.0000    1.0000

4.2 检查优化过程
在优化进行期间和优化结束后检查优化结果。

将选项设置为提供迭代输出,从而在求解器运行时提供有关优化的信息。此外,将绘图函数设置为在求解器运行时显示目标函数值。

options = optimset(‘Display’,‘iter’,‘PlotFcns’,@optimplotfval);

设置目标函数和起始点。

function f = objectivefcn1(x)
f = 0;
for k = -10:10
    f = f + exp(-(x(1)-x(2))^2 - 2*x(1)^2)*cos(x(2))*sin(2*x(2));
end

将 objectivefcn1 的代码作为文件包含在您的 MATLAB? 路径中

x0 = [0.25,-0.25];
fun = @objectivefcn1;

获取所有求解器输出。在求解器运行完毕后,使用这些输出检查结果。

[x,fval,exitflag,output] = fminsearch(fun,x0,options)

具体结果显示不截图了

设置选项options 的细节见第六节

五、具有额外参数时求最小值

有时您的目标函数具有额外参数。这些参数不是要优化的变量,它们是优化过程中的固定值。例如,假设您在以下 Rosenbrock 类型函数中有一个参数 a:

f ( x , a ) = 100 ( x 2 ? x 1 2 ) 2 + ( a ? x 1 ) 2 f(\bm{x},a)=100(x_2-x_1^2)^2+(a-x_1)^2 f(x,a)=100(x2??x12?)2+(a?x1?)2

此函数在 x 1 = a x_1=a x1?=a, x 2 = a 2 x_2=a^2 x2?=a2处具有最小值 0。

假如 a = 3 a=3 a=3,创建匿名函数将该参数包含在创建的目标函数中。

f = @(x,a)100*(x(2) - x(1)^2)^2 + (a-x(1))^2;

将参数放在您的 MATLAB? 工作区中,即

a=3

单独创建包含参数的工作区值的 x 的匿名函数。

fun = @(x)f(x,a);

x 0 = [ ? 1 , 1.9 ] x0 = [-1,1.9] x0=[?1,1.9]处开始解算该问题。

x0 = [-1,1.9];
x = fminsearch(fun,x0)

结果:

x = 1×2

    3.0000    9.0000

五、检查求解过程(options 设置)

优化选项,指定为 optimoptions 的输出或 optimset 等返回的结构体。

语法:

options = optimoptions(@fminunc,'Algorithm','quasi-newton');

其中’Algorithm’设置优化工具包用什么优化算法求解问题,其中fminunc函数可以用拟牛顿法和信赖域算法。
设置fminunc采用拟牛顿法求解:其中该函数’Algorithm’的默认值为’quasi-newton’

options = optimoptions(@fminunc,'Algorithm','quasi-newton');

quasi-newton 算法使用具有三次线搜索过程的 BFGS 拟牛顿法。这种拟牛顿法使用 BFGS公式来更新 Hessian 矩阵的逼近。您可以通过将 HessUpdate 选项设置为 ‘dfp’(并将 Algorithm 选项设置为 ‘quasi-newton’)来选择逼近逆 Hessian 矩阵的 DFP公式。您可以通过将 HessUpdate 设置为 ‘steepdesc’(并将 Algorithm 设置为 ‘quasi-newton’)来选择最陡下降法,尽管此设置通常效率不高。

设置fminunc采用信赖域算法求解:必须自己提供目标函数的梯度,不建议使用。

options = optimoptions(@fminunc,'Algorithm','trust-region');

trust-region 算法要求您在 fun 中提供梯度,并使用 optimoptions 将 SpecifyObjectiveGradient 设置为 true。此算法是一种子空间信赖域方法,基于 [2] 和 [3] 中所述的内部反射牛顿法。每次迭代都涉及使用预条件共轭梯度法 (PCG) 来近似求解大型线性方程组。

用法:

fun = @(x)x(1)*exp(-(x(1)^2 + x(2)^2)) + (x(1)^2 + x(2)^2)/20;
x0 = [1,2];
[x,fval,exitflag,output,grad,hessian] = fminunc(fun,x0,options)

其它options的参数表如下:

在这里插入图片描述

原创不易,路过的各位大佬请点个赞

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:50:35  更:2022-03-30 18:52:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:59:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码