函数来确定scipy.优化?

2024-04-25 16:47:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我用scipy.optimize.minimize来寻找一个4D函数的最小值,这个函数对使用的初始猜测非常敏感。如果我稍微改变一下,解决方案就会有很大的变化。在

在SO中已经有很多类似的问题(例如:123),但是没有真正的答案。在

在我的一个老问题中尊尊网网站(显然是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中实现的东西?在


Tags: theto函数答案soparameter网站as
1条回答
网友
1楼 · 发布于 2024-04-25 16:47:55

这个问题没有一般的答案,因为最小化任意函数的问题是不可能解决的。你可以在特定的函数类上做得更好或更差,因此这是一个相当于数学家的领域,去分析你的函数可能是的样子。在

显然,您还可以使用许多所谓的“元优化器”,它们只是一堆启发式方法,它们可能(或不)适用于您的特定应用程序。这些方法包括循环中随机抽样的起点,使用遗传算法,或者——据我所知,这是数学上最合理的方法——使用贝叶斯优化。一般来说,当你试图最小化你的函数的时候,你可以在同一时间对你的函数进行建模,这样你就可以有根据地猜测下一次从哪里开始(这是比随机猜测或使用遗传算法/差分进化更高的抽象层次)。因此,我将按以下方式对这些方法进行排序

  • 网格搜索/随机抽样-不使用以前运行的信息,因此-最差结果
  • 遗传方法,进化,盆地环化,退火-利用以前运行的信息作为(x,f(x))对,在有限的时间内(几代)-因此平均结果
  • 贝叶斯优化(和类似方法)-通过对底层函数建模和基于预期改进的抽样选择,使用来自所有以往经验的信息-最佳结果(以最复杂的方法为代价)

相关问题 更多 >