我正在使用scipy.optimize.minimize来查找对所使用的初始猜测相当敏感的4D函数的最小值。如果我稍微改变一下,解决方案会发生很大变化。
在SO中有许多与此类似的问题(例如:1,2,3),但没有真正的答案。
在我的一个老问题中,zunzun.com网站one of the developers(显然是no longer online)解释了他们是如何做到的:
Zunzun.com使用差分进化遗传算法(DE)来找到初始参数估计值,然后将其传递给scipy中的Levenberg-Marquardt求解器。 DE实际上并不是用作全局优化器本身,而是用作“初始参数猜测器”。
我发现最接近此算法的是this answer,其中for
块用于通过随机初始猜测多次调用最小化函数。这会生成多个最小化的解决方案,最后选择最佳(最小值)解决方案。
是否有类似zunzun dev描述的内容已经在Python中实现了?
答案 0 :(得分:3)
对于这样的问题没有一般性的答案,因为最大限度地减少任意功能的问题无法解决。你可以在特定类别的函数上做得更好或更差,因此它是数学家的一个领域,分析你的函数可能的样子。
显然,你也可以使用几十个所谓的“元优化器”,它们只是一堆启发式算法,它可能(或不会)为你的特定应用程序工作。那些包括循环中的随机抽样起点,使用遗传算法,或者 - 据我所知,大多数数学上合理的方法 - 使用贝叶斯优化。一般来说,当您尝试将函数最小化时,我们的想法是同时对函数进行建模,这样您就可以明智地猜测下次启动的位置(抽象级别高于随机猜测或使用遗传算法/差分进化) 。因此,我会按照以下方式订购这些方法