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

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

室内定位/导航/优化技术探讨:WX: ZB823618313

目录

  • 优化工具包—无约束非线性优化求解器(fminsearch)
    • 一、fminunc总体介绍
    • 二、fminsearch求解器的具体用法
    • 三、举例:计算 Rosenbrock 函数的最小值
    • 四、设置选项:监视优化过程/检查优化过程
    • 五、具有额外参数时求最小值
    • 五、检查求解过程(options 设置)

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×21.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×21.0000    1.0000

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

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

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

设置目标函数和起始点。

function f = objectivefcn1(x)
f = 0;
for k = -10:10f = 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×23.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的参数表如下:

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

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

  1. 非线性优化求解器IPOPT

    目录 1.IPOPT的安装(简洁版本) 2.IPOPT测试案例 3.ADOL-C的使用 4.CppAD的使用 5.IPOPT的initial gauss 以及 warm star 参考链接: 优化,在 ...

  2. 约束非线性优化(fmincon)——优化工具包

    优化工具包-约束非线性优化求解器(fmincon) 原创不易,路过的各位大佬请点个赞 目录 优化工具包-约束非线性优化求解器(fmincon) 1.约束非线性优化 2.fmincon求解器语法 3.f ...

  3. 优化求解器SCIP介绍

    SCIP(Solving Constraint Integer Programs)一款非常成熟的开源混合整数规划(MILP)框架,支持自定义搜索树中的各个模块,当然包括在分支限界(Branch and ...

  4. 学习中碰到的一些优化工具包和库

    1.linear svm 这个工具包目前用的比较多.例如面部特征点的回归方法中,学习线性回归的权重,例如:Face Alignment at 3000 FPS中: minWt∑i=1N||△s^ti− ...

  5. 市面上的数学规划求解器都有哪些?

    运筹学从形成到发展,在此过程中积累的大量理论和方法在国防.能源.制造.交通.金融.通信等各个领域发挥着越来越重要的作用.我们在生产生活中遇到的很多实际问题,都可以通过运筹学所涉及的优化方法对其进行数学 ...

  6. 求解器:助力智能决策的利器

    在工业化发展进程中,底层基础技术和软件的发展非常重要,这其中有一项技术被认为是运筹优化领域的"皇冠"--求解器. 求解器技术属于典型的底层技术领域,技术门槛高.研发难度大.投入时间 ...

  7. newuoa matlab包,PDFO首页、文档和下载 - Powell 无导数优化求解器

    PDFO(Powell's Derivative-Free Optimization solvers,Powell 无导数优化求解器)为 Michael J. D. Powell 的无导数优化求解器提 ...

  8. 计算智能课程设计(遗传算法求解无约束单目标优化问题)

    写在前面 前天写完了基于传递闭包的模糊聚类,今天准备写"遗传算法求解无约束单目标优化问题".昨天和npy玩了一下午,去齐白石艺术学院看了画展,一起在最高处看了夕阳,并在落日前接吻. ...

  9. 2-2 组合优化问题-常用模型与通用求解器

    组合优化问题常用模型 组合优化问题常常难以求解,我们可以把这些转化为目前已经有成熟求解器的模型. 1. 可满足性问题(Satisfiability, SAT) 上一节已经讲过,SAT 是一个 NPC ...

最新文章

  1. 深度解析 | 大数据面前,统计学的价值在哪里?
  2. linkerd——针对java的为微服务提供可靠性的proxy,服务发现重试LB等
  3. (转)C# Delegate.Invoke、Delegate.BeginInvoke
  4. JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
  5. Mac电脑同步工程到github
  6. easyui validatebox验证
  7. 对象头、锁的四种状态、Java和处理器实现原子操作的方式(CAS、锁机制;总线锁定、缓存锁定)
  8. PAI和Hologres的个性化推荐最佳实践
  9. Jenkins Pipeline 语法
  10. Spring Cloud Sidecar –节点初始化
  11. C语言,利用求余运算拆分三位数的个,十,百位数字,并求和
  12. SpringCloud Alibaba Sentinel断路器介绍与控制台搭建
  13. 11 JVM 垃圾回收(上)
  14. CentOS 7 搭建GlusterFS
  15. YARN调试过程中的常见问题
  16. CF1132G Greedy Subsequences
  17. Linux安装软件包时的“依赖关系树”算法(C#)
  18. [转]程序员能力矩阵
  19. Spring Cloud Alibaba Nacos集群和持久化配置
  20. JavaCV的摄像头实战之一:基础

热门文章

  1. input禁止输入html转义字符,input 禁止输入特殊字符
  2. 基于Linux ncurses图形库的贪吃蛇小游戏
  3. 习题4-11 兔子繁衍问题 (15分)
  4. 关于PLC的scl语言
  5. 黄炎公开课发布:《MySQL中间件的性能测试》
  6. AJPFX讲解java关键词过滤算法
  7. H5下载视频到andriod/ios相册中
  8. 现金流量报表与现金收支报表的区别
  9. NSLog使用与说明
  10. cf1200构造15道