【问题标题】:Looking for an algorithm that delivers also the local minima back寻找一种算法,也可以返回局部最小值
【发布时间】:2019-08-06 15:05:46
【问题描述】:

我知道的所有黑盒函数优化算法,如 simulated annealingBayesian optimization 都提供全局最小值。

我正在寻找一种 python 算法,它可以将全局以及所有局部最小值返回给我。

是否有任何算法可以解决此任务?

或者是否有任何全局最小值算法也可以返回局部最小值?

【问题讨论】:

  • 你提到的那些方法 try 返回一些全局最小值,但我怀疑许多库会给你一些保证(值得注意的例外:Couenne)。这是有原因的:潜在的问题通常是 NP 难的。这种硬度归结为:可以有成倍增加的局部最小值。仍然希望枚举所有最小值?即使假设无限时间,情况也会变得更糟,因为枚举的可能性需要一些健全和完整的证明系统来推理最小枚举的状态。拥有一个在内存中没有呈指数增长的内存通常会随着时间的推移而变得更糟..
  • 假设您获得了所有 20'000'000 局部最小值的列表。你想用它做什么?
  • @maxy:我正在寻找解决此处描述的问题的任何方法:stackoverflow.com/q/57375144/10698244
  • 没有那么容易,尤其是对于没有渐变的黑盒函数。可以使用网格并针对每个区域进行优化。

标签: python mathematical-optimization genetic-algorithm bayesian simulated-annealing


【解决方案1】:

或者是否有任何全局最小算法也可以提供 局部最小值回来了?

我不明白你所说的全局最小算法是什么意思,但既然你提到了模拟退火,我会假设你在谈论具有全局搜索能力的元启发式算法。

不能保证一个元启发式算法,经常用于解决 NP 难题,将探索整个搜索空间,因此,不能保证找到每个局部最小值。但是,我假设您知道这一点并且您想要的是修改一种方法,而不仅仅是一种解决方案(最好找到),在查找全局最小值的过程中找到的局部最小值列表。

禁忌搜索、迭代本地搜索等基于单一解决方案的算法基于本地搜索工作。他们执行局部搜索,直到找到局部最优解,然后应用各自的规则试图摆脱局部最小值。让我们考虑迭代局部搜索,它执行局部搜索,直到解决方案S 局部最优,然后它扰动当前的局部最优以逃避它并在搜索空间中获取另一个点再次执行局部搜索,直到一个标准满足。在您的情况下,您应该每次在搜索过程中找到一个局部最优解。

下面的伪代码是修改后的 ILS 算法,以保留在搜索过程中找到的所有局部最优解。

HillClimbing(S)
   while S is not locally optimal do
       S ← best(N(S)) // best solution in neighborhood N of solution S
   Return S

IteratedLocalSearch()
    L ← {} // set of locally optimal solutions
    G ← randomSolution()
    S ← G
    while criterionIsNotMeet() do
        HillClimbing(S)
        Add S to L // add the current local
        if S.objective < G.objective do // minimization
            G ← S // best solution found
        perturbateSolution(Copy(S))

这种算法很容易实现。如果您决定自己实现,请获得一份好的参考论文,如果这还不够,您可以尝试在 GitHub 或 Mathworks 发现上找到一个好的实现来作为您编码的基础。

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多