【问题标题】:Scipy basinhopping not respecting stepsize?Scipy盆地跳跃不尊重步长?
【发布时间】:2016-04-21 23:28:35
【问题描述】:

运行以下代码,在第 7 次打印出正在评估的参数 (x) 时,尽管初始步长设置为 0.1 并且间隔设置为 50,但参数从大约 100 跳到 0.01。 Basinhopping 能够实现超过 stepsize 如此大幅度的跳跃?

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)

【问题讨论】:

    标签: python optimization scipy


    【解决方案1】:

    盆地跳跃是一个迭代过程,它使用局部最小化,然后在坐标空间(步长)中采取一步,然后再次进行局部最小化,希望达到不同的最小值。

    stepsize参数只适用于坐标空间中的step。

    在您的示例中,默认的局部最小化器(我认为是 BFGS)在第一次迭代时找到了全局最小值。局部最小化器使用 7 次函数评估来做到这一点,但它仍在一次盆地跳跃迭代中。 Basinhopping 不知道它处于全局最小值,因此它会继续尝试寻找更好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-08
      • 2018-06-19
      • 2015-09-25
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多