优化工具包—无约束非线性优化求解器(fminsearch)
优化工具包—无约束非线性优化求解器(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) xminf(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)相关推荐
- 非线性优化求解器IPOPT
目录 1.IPOPT的安装(简洁版本) 2.IPOPT测试案例 3.ADOL-C的使用 4.CppAD的使用 5.IPOPT的initial gauss 以及 warm star 参考链接: 优化,在 ...
- 约束非线性优化(fmincon)——优化工具包
优化工具包-约束非线性优化求解器(fmincon) 原创不易,路过的各位大佬请点个赞 目录 优化工具包-约束非线性优化求解器(fmincon) 1.约束非线性优化 2.fmincon求解器语法 3.f ...
- 优化求解器SCIP介绍
SCIP(Solving Constraint Integer Programs)一款非常成熟的开源混合整数规划(MILP)框架,支持自定义搜索树中的各个模块,当然包括在分支限界(Branch and ...
- 学习中碰到的一些优化工具包和库
1.linear svm 这个工具包目前用的比较多.例如面部特征点的回归方法中,学习线性回归的权重,例如:Face Alignment at 3000 FPS中: minWt∑i=1N||△s^ti− ...
- 市面上的数学规划求解器都有哪些?
运筹学从形成到发展,在此过程中积累的大量理论和方法在国防.能源.制造.交通.金融.通信等各个领域发挥着越来越重要的作用.我们在生产生活中遇到的很多实际问题,都可以通过运筹学所涉及的优化方法对其进行数学 ...
- 求解器:助力智能决策的利器
在工业化发展进程中,底层基础技术和软件的发展非常重要,这其中有一项技术被认为是运筹优化领域的"皇冠"--求解器. 求解器技术属于典型的底层技术领域,技术门槛高.研发难度大.投入时间 ...
- newuoa matlab包,PDFO首页、文档和下载 - Powell 无导数优化求解器
PDFO(Powell's Derivative-Free Optimization solvers,Powell 无导数优化求解器)为 Michael J. D. Powell 的无导数优化求解器提 ...
- 计算智能课程设计(遗传算法求解无约束单目标优化问题)
写在前面 前天写完了基于传递闭包的模糊聚类,今天准备写"遗传算法求解无约束单目标优化问题".昨天和npy玩了一下午,去齐白石艺术学院看了画展,一起在最高处看了夕阳,并在落日前接吻. ...
- 2-2 组合优化问题-常用模型与通用求解器
组合优化问题常用模型 组合优化问题常常难以求解,我们可以把这些转化为目前已经有成熟求解器的模型. 1. 可满足性问题(Satisfiability, SAT) 上一节已经讲过,SAT 是一个 NPC ...
最新文章
- 深度解析 | 大数据面前,统计学的价值在哪里?
- linkerd——针对java的为微服务提供可靠性的proxy,服务发现重试LB等
- (转)C# Delegate.Invoke、Delegate.BeginInvoke
- JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
- Mac电脑同步工程到github
- easyui validatebox验证
- 对象头、锁的四种状态、Java和处理器实现原子操作的方式(CAS、锁机制;总线锁定、缓存锁定)
- PAI和Hologres的个性化推荐最佳实践
- Jenkins Pipeline 语法
- Spring Cloud Sidecar –节点初始化
- C语言,利用求余运算拆分三位数的个,十,百位数字,并求和
- SpringCloud Alibaba Sentinel断路器介绍与控制台搭建
- 11 JVM 垃圾回收(上)
- CentOS 7 搭建GlusterFS
- YARN调试过程中的常见问题
- CF1132G Greedy Subsequences
- Linux安装软件包时的“依赖关系树”算法(C#)
- [转]程序员能力矩阵
- Spring Cloud Alibaba Nacos集群和持久化配置
- JavaCV的摄像头实战之一:基础