2016-04-21 105 views
4

运行以下代码,在第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) 

回答

3

basinhopping是它使用局部极小迭代过程,然后采取步骤在坐标空间(步长),然后再次做局部极小,希望以不同的最小。

stepsize参数仅适用于坐标空间中的步骤。

在你的例子中,默认的局部最小值(BFGS,我认为)在第一次迭代中找到全局最小值。局部最小值使用7个函数评估来完成这个任务,但它仍然在一次流域迭代中。流域购物中心并不知道它在全球范围内的最低限度,所以它仍然在试图找到一个更好的。