from numpy import *; from scipy.optimize import *; from math import *
def f(X):
x=X[0]; y=X[1]
return x**4-3.5*x**3-2*x**2+12*x+y**2-2*y
bnds = ((1,5), (0, 2))
min_test = minimize(f,[1,0.1], bounds = bnds);
print(min_test.x)我的函数f(X)在x=2.557, y=1有一个局部极小值,我应该可以找到它。
上面显示的代码只会给出x=1的结果。我尝试了不同的耐受性和三种方法:L B,TNC和SLSQP。这就是我到目前为止一直在看的线程:Scipy.optimize: how to restrict argument values
我怎么才能解决这个问题?
我正在使用Spyder(Python3.6)。

发布于 2018-09-21 07:33:46
您刚刚遇到了本地优化的问题:它很大程度上取决于传入的起始值(初始值)。如果您提供[2, 1],它将找到正确的最小值。
共同的解决办法是:
basinhopping()DIRECT或MADS算法(例如NOMAD)。还有一个是我还没试过的,shgo。发布于 2019-09-17 07:52:33
试试scipy.optimize.basinhopping。它只需多次重复最小化过程,得到多个局部极小值。最小值是全局最小值。
minimizer_kwargs = {"method": "L-BFGS-B"}
res=optimize.basinhopping(nethedge,guess,niter=100,minimizer_kwargs=minimizer_kwargs)https://stackoverflow.com/questions/52438263
复制相似问题