【问题标题】:scipy.optimize.basinhopping interval and accept test syntacesscipy.optimize.basinhopping 间隔并接受测试语法
【发布时间】:2014-03-17 10:39:49
【问题描述】:

我正在尝试使用basinhopping 找到目标函数的全局最小值,但在大多数情况下它都停留在局部最小值上。我通读了basinhopping 的文档,发现intervalaccept_test 可能会有所帮助,但现在的问题是赋予它们什么值,例如我希望我的目标函数尽可能接近 0(1e-5 接近),而不会在 4 或 5 等非常大的值上花费太多时间。至于 interval 如何知道步长的更新频率?

这是我寻找“全局”最小值的方法:

np.random.seed(555)   # Seeded to allow replication.
minimizer_kwargs = {"method": "L-BFGS-B", "bounds": bnds,, tol=1e-4}
ret = basinhopping(merit_function, abcdex, minimizer_kwargs=minimizer_kwargs, niter=10)
zoom = ret['x']

res = minimize(merit_function, zoom, method = 'L-BFGS-B', bounds=bnds, tol=1e-9)
print res

【问题讨论】:

    标签: python optimization scipy global minimum


    【解决方案1】:

    如果您陷入局部最小值,那么这可能意味着您需要更大的步长。您可以使用关键字“stepsize”设置步长。

    适当的步长取决于问题,但幸运的是,basinhopping 会自动调整步长。它多久执行一次取决于“间隔”关键字。每 interval 次迭代步长将增加或减少 0.9 倍。如果最初对步长的猜测与此相差甚远,这仍然需要一些时间。如果您将间隔减少到 10(左右),这应该会快得多。

    我认为accept_test 在这里不会对您有所帮助。例如,这可用于强制执行配置空间的禁止区域。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-01
      • 2011-12-04
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多