2016-04-21 27 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個函數評估來完成這個任務,但它仍然在一次流域迭代中。流域購物中心並不知道它在全球範圍內的最低限度,所以它仍然在試圖找到一個更好的。