Python scipy.optimize.BASINHING间隔和验收测试语法
我试图用Python scipy.optimize.BASINHING间隔和验收测试语法,python,optimization,scipy,global,minimum,Python,Optimization,Scipy,Global,Minimum,我试图用basinhopping找到目标函数的全局最小值,但在大多数情况下,它停留在局部最小值。我仔细阅读了文档,发现间隔和接受测试可能会有所帮助,但现在的问题是给它们什么值,例如,我希望我的目标函数尽可能接近0(1e-5 close),而不必花费太多时间在非常大的值(如4或5)上。至于interval如何知道步长的更新频率 以下是我如何寻找“全球”最小值: 如果你陷入局部最小值,那么这可能意味着你需要一个更大的步长。您可以使用关键字“步长”设置步长 合适的步长取决于问题,但幸运的是,basin
basinhopping
找到目标函数的全局最小值,但在大多数情况下,它停留在局部最小值。我仔细阅读了文档,发现间隔
和接受测试
可能会有所帮助,但现在的问题是给它们什么值,例如,我希望我的目标函数尽可能接近0(1e-5 close),而不必花费太多时间在非常大的值(如4或5)上。至于interval
如何知道步长的更新频率
以下是我如何寻找“全球”最小值:
如果你陷入局部最小值,那么这可能意味着你需要一个更大的步长。您可以使用关键字“步长”设置步长 合适的步长取决于问题,但幸运的是,basinhopping会自动调整步长。它执行此操作的频率取决于“interval”关键字。每一次迭代间隔,步长将增加或减少0.9倍。如果对步长的最初猜测相差甚远,这仍然需要一些时间。如果将时间间隔减少到10(左右),则速度应该快得多 我认为在这里接受考试对你没有帮助。例如,可用于强制执行配置空间的禁止区域
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