首页 > 解决方案 > 如何在 Python 中使 scipy 的盆地跳跃不那么敏感

问题描述

我正在运行一项优化,优化约 10 个参数的函数。该函数本身需要相当长的时间(几秒钟)来评估,并且它的景观非常不稳定。它可以取 0 到 1 之间的值,0 是理论上的最佳值,但我预计最佳值约为 ~0.01

我正在使用盆地跳跃算法来评估其最小值,但是在每个盆地内,该函数似乎正在针对大约 10^-9 的非常小的 ftol 进行优化。

我不需要这种级别的精确度,而是想更彻底地搜索景观。我想调整算法,使局部最小值最多只能优化到 10^-4 左右的值。

我认为这是将一些 ftol 传递给最小化函数的问题,但我似乎无法让它工作。我将其传递给basinhopping:

minimizer_kwargs = {"method": "L-BFGS-B","options": {"ftol":1e-2}}

但这似乎没有效果,并且仍在对函数进行评估,以获得最佳值中微小的 10^-9 增加的值。

我怎样才能避免这种情况?如果确实无法评估该函数高于该值的情况,那么我宁愿它只输出该值是“0.10”,而不是花费时间评估它是“0.1000000001”还是“0.1000000002”

标签: pythonoptimizationscipysimulated-annealing

解决方案


推荐阅读