Pet*_*ter 5 python optimization scipy
运行以下代码,在要评估的参数(x)的第7个输出中,尽管将初始步长设置为.1并将间隔设置为50,但是参数仍从约100跳至.01。跳得比步幅大这么大?
import multiprocessing as mp
from scipy.optimize import basinhopping
def runEnvironment(x):
return x**2
def func(x):
print "x:",x
pool = mp.Pool(processes=1)
results=pool.apply(runEnvironment,(x,))
pool.close()
return results
if __name__ == '__main__':
x0=100
ret=basinhopping(func, x0, niter=100, T=1.0, stepsize=.1, minimizer_kwargs=None, take_step=None, accept_test=None, callback=None, interval=50, disp=False, niter_success=None)
Run Code Online (Sandbox Code Playgroud)
小智 4
盆地跳跃是一个迭代过程,它使用局部最小化,然后在坐标空间中迈出一步(步长),然后再次进行局部最小化,希望达到不同的最小值。
步骤大小参数仅适用于坐标空间中的步骤。
在您的示例中,默认局部最小化器(我认为是 BFGS)在第一次迭代时找到全局最小值。局部最小化器使用 7 个函数评估来完成此操作,但它仍在一次盆地跳跃迭代内。Basinhopping 并不知道自己处于全局最小值,因此它会继续尝试寻找更好的值。