运行以下代码,在第7次打印出被评估的参数(x)时,参数从大约100跳到.01,尽管初始步长设置为.1且间隔设置为50。是否能够使跳跃超过步长的跳跃如此大?
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)
答案 0 :(得分:4)
盆景购物是一个迭代过程,它使用局部最小化,然后在坐标空间(步长)中迈出一步,然后再次进行局部最小化,希望达到不同的最小值。
stepsize参数仅适用于坐标空间中的步骤。
在您的示例中,默认的局部最小化器(我认为是BFGS)在第一次迭代时找到全局最小值。局部最小化器使用7个函数求值来做到这一点,但它仍然在一个流域迭代中。盆地购物并不知道它处于全球最低点,所以它继续试图找到一个更好的。