lmfit/scipy.optimize 最小化方法描述?

问题描述

method包的minimize function中有没有对参数lmfit的每种算法进行简要说明的地方?在那里和 documentation of SciPy 中都没有关于每个算法的细节的解释。现在我知道我可以在它们之间进行选择,但我不知道该选择哪一个...

我目前的问题

我在 Python 中使用 lmfit 来最小化一个函数。我想在有限和预定义的范围内最小化函数,其中函数具有以下特征:

  • 几乎处处都为零,这使得它在数值上几乎处处都为零。
  • 它在某些时候有一个非常非常尖锐的峰值。
  • 峰值可以在区域内的任何地方。

这使得许多最小化算法不起作用。现在我结合使用蛮力法 (method="brute") 找到接近峰值的点,然后将此值提供给 Nelder-Mead 算法 (method="nelder") 以最终执行最小化.它大约有 50% 的时间在工作,而另外 50% 的时间它无法找到最小值。我想知道对于这种情况是否有更好的算法......

解决方法

我认为lmfit(例如https://lmfit.github.io/lmfit-py/fitting.html#fit-methods-table)和scipy.optimize(例如https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html#optimization-scipy-optimize)的文档没有给出算法的详细数学描述是公平的。 再说一次,大多数 scipy、numpy 和相关库的文档都描述了如何使用这些方法,但没有详细描述算法的工作原理。

公平地说,不同的优化算法共享许多功能,它们之间的差异可能会变得非常技术性。所有这些方法都试图通过更改所提供函数的参数值来最小化某些指标(通常称为“成本”或“残差”)。

需要一本教科书(或至少是维基百科页面)来建立用于这些方法的概念和数学术语,然后是一篇论文(或至少是维基百科页面)来描述每种方法与其他。所以,我认为基本的答案是查找不同的方法。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...