确定 scipy.optimize 的合理初始猜测的函数?
Function to determine a reasonable initial guess for scipy.optimize?
我正在使用 scipy.optimize.minimize 来查找 4D 函数的最小值,该函数对所使用的初始猜测相当敏感。如果我稍微改变一下,解决方案就会有很大的不同。
SO 中已有许多与此类似的问题(例如:1, 2, ),但没有真正的答案。
在我的一个老问题中,one of the developers of the zunzun.com site (apparently no longer online) 解释了他们是如何做到这一点的:
Zunzun.com uses the Differential Evolution genetic algorithm (DE) to find initial parameter estimates which are then passed to the Levenberg-Marquardt solver in scipy. DE is not actually used as a global optimizer per se, but rather as an "initial parameter guesser".
我发现最接近此算法的是 this answer,其中 for
块用于多次调用最小化函数并随机初始猜测。这会生成多个最小化解决方案,最后选择最佳(最小值)的解决方案。
有没有类似zunzun dev描述的东西已经在Python实现了?
对于这样的问题没有通用的答案,因为最小化任意函数的问题不可能解决。您可以在特定的 类 函数上做得更好或更差,因此它更像是数学家的领域,可以分析您的函数 可能 的样子。
显然,您还可以使用许多所谓的 "meta optimizers",它们只是一堆启发式方法,可能(或不)适用于您的特定应用程序。这些包括循环中的随机采样起点,使用遗传算法,或者——据我所知,这是数学上最合理的方法——使用贝叶斯优化。一般来说,想法是在尝试最小化函数的同时对函数进行建模,这样您就可以做出明智的猜测,下次从哪里开始(抽象级别高于随机猜测或使用遗传 algorithms/differential进化)。因此,我将按以下方式订购这些方法
- 网格搜索/随机抽样 - 不使用之前运行的信息,因此 - 最差结果
- 遗传方法、进化、盆环、退火 - 使用以前运行的信息作为 (x, f(x)) 对,在有限的时间段(几代)内 - 因此平均结果
- 贝叶斯优化(和类似方法)- 使用来自 所有 以往经验的信息,通过对基础函数建模并根据预期改进执行抽样选择 - 最佳结果(成本最复杂的方法)
我正在使用 scipy.optimize.minimize 来查找 4D 函数的最小值,该函数对所使用的初始猜测相当敏感。如果我稍微改变一下,解决方案就会有很大的不同。
SO 中已有许多与此类似的问题(例如:1, 2,
在我的一个老问题中,one of the developers of the zunzun.com site (apparently no longer online) 解释了他们是如何做到这一点的:
Zunzun.com uses the Differential Evolution genetic algorithm (DE) to find initial parameter estimates which are then passed to the Levenberg-Marquardt solver in scipy. DE is not actually used as a global optimizer per se, but rather as an "initial parameter guesser".
我发现最接近此算法的是 this answer,其中 for
块用于多次调用最小化函数并随机初始猜测。这会生成多个最小化解决方案,最后选择最佳(最小值)的解决方案。
有没有类似zunzun dev描述的东西已经在Python实现了?
对于这样的问题没有通用的答案,因为最小化任意函数的问题不可能解决。您可以在特定的 类 函数上做得更好或更差,因此它更像是数学家的领域,可以分析您的函数 可能 的样子。
显然,您还可以使用许多所谓的 "meta optimizers",它们只是一堆启发式方法,可能(或不)适用于您的特定应用程序。这些包括循环中的随机采样起点,使用遗传算法,或者——据我所知,这是数学上最合理的方法——使用贝叶斯优化。一般来说,想法是在尝试最小化函数的同时对函数进行建模,这样您就可以做出明智的猜测,下次从哪里开始(抽象级别高于随机猜测或使用遗传 algorithms/differential进化)。因此,我将按以下方式订购这些方法
- 网格搜索/随机抽样 - 不使用之前运行的信息,因此 - 最差结果
- 遗传方法、进化、盆环、退火 - 使用以前运行的信息作为 (x, f(x)) 对,在有限的时间段(几代)内 - 因此平均结果
- 贝叶斯优化(和类似方法)- 使用来自 所有 以往经验的信息,通过对基础函数建模并根据预期改进执行抽样选择 - 最佳结果(成本最复杂的方法)