不尊重步骤的Scipy盆地?
问题描述:
运行以下代码,在第7次打印出正在评估的参数(x)时,尽管初始步长设置为.1且间隔设置为50,但参数将从大约100跳至.01。如何流域购物能够跳过如此大幅度的跳跃?不尊重步骤的Scipy盆地?
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)
答
basinhopping是它使用局部极小迭代过程,然后采取步骤在坐标空间(步长),然后再次做局部极小,希望以不同的最小。
stepsize参数仅适用于坐标空间中的步骤。
在你的例子中,默认的局部最小值(BFGS,我认为)在第一次迭代中找到全局最小值。局部最小值使用7个函数评估来完成这个任务,但它仍然在一次流域迭代中。流域购物中心并不知道它在全球范围内的最低限度,所以它仍然在试图找到一个更好的。