Scipy的优化可以找到多个局部极值吗?

时间:2019-09-04 08:29:56

标签: optimization scipy

这是我上一个问题的后续解答:Finding Local Extema in Scipy's Gaussian KDE

我一直试图找出如何使用scipy.optimize.minimize_scalar,因为它专门用于一个变量的函数,并为我提供了一种控制关注区间的方法。但是当我尝试使用它时,我只有一个极值,而对于我的实际应用程序,我将需要多个极值。

这是一个简单的例子

from scipy.optimize import minimize_scalar

def f(x):
    return x*(x-1)*(x-2)*(x-3)

minimum=minimize_scalar(f,bounds=(-1,4),method='bounded')

有两个局部最小值:一个接近x = 0.382,另一个接近x = 2.618;但只报告了其中的第一个。

有没有办法让我同时报告这两种情况(除了手动更改范围以一次仅捕获最小值,如果我不知道最小值在哪里,我将没有这种奢侈)?还是可以使用其他功能?在我的实际应用中,我希望它报告3个最高的局部最大值。

谢谢

1 个答案:

答案 0 :(得分:0)

我相信您将不得不采用可以提供这些信息的全局优化算法,但是无论如何您还是要很幸运。您可以尝试AMPGO(我编写的隧道策略),看看它是否能为您提供任何见识。

AMPGO:https://github.com/andyfaff/ampgo/blob/master/%20ampgo%20--username%20andrea.gavana%40gmail.com/go_amp.py

基准:http://infinity77.net/global_optimization/multidimensional.html