Global Optimization Toolbox 求解器特性
求解器选择
本节介绍 Global Optimization Toolbox 求解器的特性。本节包括更有效地获得结果的建议。
为了获得更好或更快的解,首先尝试通过设置适当的选项或边界来调整推荐的求解器。如果结果不令人满意,请尝试其他求解器。
需要的解 | 平滑的目标和约束 | 非光滑目标或约束 |
---|---|---|
“期望解决方案”的解释 | 选择求解器来解决平滑问题 | 选择非光滑问题求解器 |
单一局部解 | Optimization Toolbox™ 函数;请参阅 优化决策表 | fminbnd 、patternsearch 、fminsearch 、ga 、particleswarm 、simulannealbnd 、surrogateopt |
多个局部解 | GlobalSearch ,MultiStart | patternsearch 、ga 、particleswarm 、simulannealbnd 或 surrogateopt 从多个初始点 x0 或多个初始种群开始 |
单一全局解 | GlobalSearch 、MultiStart 、patternsearch 、particleswarm 、ga 、simulannealbnd 、surrogateopt | patternsearch , ga , particleswarm , simulannealbnd , surrogateopt |
使用并行处理的单一局部解 | MultiStart 、Optimization Toolbox 函数 | patternsearch , ga , particleswarm , surrogateopt |
使用并行处理的多个局部解 | MultiStart | patternsearch 、ga 或 particleswarm 从多个初始点 x0 或多个初始种群开始 |
使用并行处理的单一全局解 | MultiStart | patternsearch , ga , particleswarm , surrogateopt |
“期望解决方案”的解释
要理解“期望解决方案”中术语的含义,请考虑以下示例
f(x)=100 x2(1– x)2– x,
其局部极小值 x1
接近 0,而 x2
接近 1:
极小值位于:
fun = @(x)(100*x^2*(x - 1)^2 - x); x1 = fminbnd(fun,-0.1,0.1) x1 = 0.0051 x2 = fminbnd(fun,0.9,1.1) x2 = 1.0049
条款描述
术语 | 含义 |
---|---|
单一局部解 | 找到一个局部解,即点 x,其中目标函数 f(x) 是局部最小值。有关详细信息,请参阅局部最优与全局最优。在例子中,x1 和 x2 都是局部解。 |
多个局部解 | 找到一组局部解。在示例中,局部解的完整集是 {x1,x2} 。 |
单一全局解 | 找到目标函数 f(x)为全局最小值的点 x。在示例中,全局解是 x2 。 |
选择求解器来解决平滑问题
单一全局解
首先尝试
GlobalSearch
。它最注重寻找全局解,并有一个高效的局部求解器fmincon
。接下来尝试
MultiStart
。它具有高效的局部求解器,并且可以搜索各种各样的起点。接下来尝试
patternsearch
。由于它不使用梯度,因此效率较低。然而,patternsearch
是强大的,并且比其余的局部求解器更有效。要寻找全局解,请从各种起点启动patternsearch
。接下来尝试
surrogateopt
。surrogateopt
尝试使用最少的目标函数求值来寻找全局解。surrogateopt
每次函数值的开销比大多数其他求解器都要大。surrogateopt
需要有限边界,并且接受整数约束、线性约束和非线性不等式约束。如果您的问题无约束或仅有边界约束,请接下来尝试
particleswarm
。通常,particleswarm
比其余求解器更有效率,并且可以比patternsearch
更有效率。接下来尝试
ga
。它可以处理所有类型的约束,并且通常比simulannealbnd
更有效。最后尝试
simulannealbnd
。它可以处理没有约束或有边界约束的问题。simulannealbnd
通常是效率最低的求解器。然而,只要给定一个足够慢的冷却计划,它就能找到一个全局解。
多个局部解
GlobalSearch
和 MultiStart
都提供了多个局部解。获取多个解的语法请请参阅 多个解。GlobalSearch
和 MultiStart
在以下特点上有所不同:
MultiStart
可以找到更多局部极小值。这是因为GlobalSearch
拒绝了许多生成的起点(局部解的初始点)。本质上,只有当GlobalSearch
确定该点很有可能获得全局最小值时,它才会接受该起点。相比之下,MultiStart
将所有生成的起点传递给局部求解器。有关详细信息,请参阅GlobalSearch 算法。MultiStart
提供局部求解器的选择:fmincon
、fminunc
、lsqcurvefit
或lsqnonlin
。GlobalSearch
求解器仅使用fmincon
作为其局部求解器。GlobalSearch
使用散射搜索算法来生成起点。相比之下,MultiStart
在边界内均匀随机地生成点,或者允许您提供自己的点。MultiStart
可以并行运行。请参阅 如何在 Global Optimization Toolbox 中使用并行处理。
选择非光滑问题求解器
选择编号最小的适用求解器。对于具有整数约束的问题,使用 ga
。
仅在一维有界问题上首先使用
fminbnd
。fminbnd
可证明在一维中快速收敛。在任何其他类型的问题上使用
patternsearch
。patternsearch
可证明收敛,并处理所有类型的约束。对于目标函数耗时的问题,请尝试使用
surrogateopt
。surrogateopt
寻找全局解。surrogateopt
需要有限边界,并接受整数约束、线性约束和非线性不等式约束。接下来尝试使用
fminsearch
来解决低维无界问题。fminsearch
不像patternsearch
那样通用,并且可能无法收敛。对于低维问题,fminsearch
使用起来很简单,因为它几乎没有调整选项。接下来在无界或有界约束问题上尝试
particleswarm
。particleswarm
几乎没有支持理论,但通常是一种有效的算法。接下来尝试
ga
。ga
几乎没有理论支持,而且通常效率低于patternsearch
或particleswarm
。ga
处理所有类型的约束。ga
和surrogateopt
是唯一接受整数约束的 Global Optimization Toolbox 求解器。对于无界问题或边界问题,最后尝试使用
simulannealbnd
。已证明simulannealbnd
仅对对数冷却计划收敛,这非常慢。simulannealbnd
仅接受边界约束,并且通常效率低于ga
。
求解器特征
求解器 | 收敛 | 特征 |
---|---|---|
GlobalSearch | 对于平滑问题,快速收敛到局部最优解 | 确定性迭代 |
基于梯度 | ||
自动随机起点 | ||
启发式地删除许多起点 | ||
MultiStart | 对于平滑问题,快速收敛到局部最优解 | 确定性迭代 |
可以并行运行;请参阅 如何在 Global Optimization Toolbox 中使用并行处理 | ||
基于梯度 | ||
随机或确定性的起点,或两者结合 | ||
自动随机起点 | ||
运行所有起点 | ||
局部求解器的选择:fmincon 、fminunc 、lsqcurvefit 或 lsqnonlin | ||
patternsearch | 已证明收敛到局部最优;比基于梯度的求解器慢 | 确定性迭代 |
可以并行运行;请参阅 如何在 Global Optimization Toolbox 中使用并行处理 | ||
无梯度 | ||
用户提供的起点 | ||
surrogateopt | 已证明对有界问题可以收敛到全局最优;比基于梯度的求解器慢;通常会在达到函数求值极限或其他极限时停止 | 随机迭代 |
可以并行运行;请参阅 如何在 Global Optimization Toolbox 中使用并行处理 | ||
最适合用于耗时的目标函数 | ||
需要边界约束,接受线性约束和非线性不等式约束 | ||
允许整数约束;请参阅 混合整数替代优化 | ||
无梯度 | ||
自动起点或用户提供的起点,或两者结合 | ||
particleswarm | 没有收敛证明 | 随机迭代 |
可以并行运行;请参阅 如何在 Global Optimization Toolbox 中使用并行处理 | ||
基于种群 | ||
无梯度 | ||
自动启动种群或用户提供的种群,或两者结合 | ||
仅限边界约束 | ||
ga | 没有收敛证明 | 随机迭代 |
可以并行运行;请参阅 如何在 Global Optimization Toolbox 中使用并行处理 | ||
基于种群 | ||
无梯度 | ||
允许整数约束;请参阅 混合整数 ga 优化 | ||
自动启动种群或用户提供的种群,或两者结合 | ||
simulannealbnd | 已证明,对于冷却进度非常缓慢的有界问题,可以收敛到全局最优 | 随机迭代 |
无梯度 | ||
用户提供的起点 | ||
仅限边界约束 |
一些特征的解释:
收敛-当求解器远离局部最小值时,它可能无法收敛到任何解。当从局部最小值附近开始时,基于梯度的求解器会快速收敛到局部最小值,从而解决平滑的问题。
patternsearch
可证明可以收敛到各种各样的问题,但收敛速度比基于梯度的求解器慢。对于某些问题来说,ga
和simulannealbnd
都可能无法在合理的时间内收敛,尽管它们通常很有效。迭代-求解器通过迭代来寻找解。迭代中的各个步骤都是迭代。一些求解器具有确定性迭代。其他人使用随机数并进行随机迭代。
梯度-一些求解器在计算迭代时使用估计的或用户提供的导数。其他求解器不使用或估计导数,而仅使用目标和约束函数值。
起点-大多数求解器都要求您提供优化的起点,以便获得决策变量的维度。
ga
和surrogateopt
不需要任何起点,因为它们将决策变量的维度作为输入或从边界推断维度。这些求解器会自动生成一个起点或种群,或者接受您提供的一个或多个点。
将 Global Optimization Toolbox 求解器的特性与 Optimization Toolbox 求解器的特性进行比较。
求解器 | 收敛 | 特征 |
---|---|---|
fmincon , fminunc , fseminf , lsqcurvefit , lsqnonlin | 已证明平滑问题的二次收敛到局部最优解 | 确定性迭代 |
基于梯度 | ||
用户提供的起点 | ||
fminsearch | 没有收敛证明-存在反例。 | 确定性迭代 |
无梯度 | ||
用户提供的起点 | ||
无约束 | ||
fminbnd | 已证明,对于平滑问题,其收敛到局部最优解的速度比二次函数慢。 | 确定性迭代 |
无梯度 | ||
用户提供的开始间隔 | ||
仅限一维问题 |
所有这些 Optimization Toolbox 求解器:
具有确定性迭代
需要起点或间隔
仅搜索一个吸引力盆地
为什么有些求解器是对象?
GlobalSearch
和 MultiStart
是对象。这对您意味着什么?
在运行问题之前,创建一个
GlobalSearch
或MultiStart
对象。您可以重复使用该对象来运行多个问题。
GlobalSearch
和MultiStart
对象是算法和全局选项的容器。您可以使用这些对象多次运行局部求解器。局部求解器有自己的选项。
有关详细信息,请参阅 类 文档。