【问题标题】:What `visit` parameter value is allowed in scipy.optimize.dual_annealing?scipy.optimize.dual_annealing 中允许哪些“访问”参数值?
【发布时间】:2019-11-03 08:45:29
【问题描述】:

我尝试使用scipy.optimize.dual_annealing 来最小化 8 个参数的函数。搜索空间(由我的bounds 定义)相当广泛,但我知道解决方案接近x0。因此,在阅读找到here 的文档后,我决定使用visit 参数的较小值,默认为2.62,并且应该在(0, 3] 范围内。

当我使用 visit=0.8 时,我得到了一个 RuntimeWarning: invalid value 在日志中遇到,事实上,在源代码中我发现了这个:

self._factor2 = np.exp((4.0 - self._visiting_param) * np.log(self._visiting_param - 1.0))

(_dual_annealing.py 的 l.62) (基本上self._visiting_param 被直接赋值为visit

所以我想可能是文档有误,访问范围是(1,3]。

当我使用visit=1.2 时,我得到了一个FloatingPointError: invalid value 在日志中遇到,由于这次

x *= np.exp(-(self._visiting_param - 1.0) * np.log(self._factor6 / factor4) / (3.0 - self._visiting_param))

(_dual_annealing.py 的 l.121) 其中self._factor6 为负数。

这是一个真正的错误,一个错误的文档,还是只是我误解了什么?我可以为 visit 参数使用哪些值以便搜索接近 x0?

【问题讨论】:

    标签: python scipy scipy-optimize


    【解决方案1】:

    我的理解是你是对的,访问参数的取值范围没有指定正确。事实上,在限制情况 1 中,该算法(理论上)恢复了(经典)模拟退火,如paper 中所述。但是,其中描述的实际实现(也从中获取了 scipy 的实现)似乎仅适用于大于 1.4 的值。

    我为此在 github 上创建了一个问题: https://github.com/scipy/scipy/issues/12384

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-04
      • 2020-10-13
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      相关资源
      最近更新 更多