python - Scipy basinhopping 不尊重 stepsize?

标签 python optimization scipy

运行以下代码,在第 7 次打印出正在评估的参数 (x) 时,参数从大约 100 跳到 .01,尽管初始步长设置为 .1,间隔设置为 50。如何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)

最佳答案

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

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

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

关于python - Scipy basinhopping 不尊重 stepsize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782172/

相关文章:

c++ - for 循环条件中常量的评估

optimization - GCC热属性语义

python - 在 python 中滑动 Gabor 过滤器

python - python-3.5 中死多处理的未知原因

python - 无法使用 python : incomplete parsing of text file 解析文本 block

java - TreeSet搜索花费很长时间,谜题: to find lucky numbers

python - 查找从 (x,y) 坐标移动的距离

python - 转换为稀疏矩阵 - TypeError : no supported conversion for types: (dtype ('0' ), )

Python 按值排序字典可能不稳定? (在 Hackerrank 中)

python - python 网络抓取期间索引超出范围错误(漂亮的汤)