了解scipy.optimize.basinhopping的输出

时间:2015-01-01 05:25:02

标签: python optimization scipy

我正在使用scipy.optimize.basinhopping来最小化一个函数。这是我得到的:

Out[96]: 
                  nfev: 162178
 minimization_failures: 2501
                   fun: 4.4702905615653705
                     x: array([-194.7754468])
               message: ['requested number of basinhopping iterations completed successfully']
                  njev: 44057
                   nit: 2500

但是,我很难理解输出。这些返回参数的含义是什么:

  • nfev

  • minimization_failures

  • njev

  • NIT

我猜nfev =函数评估的数量,而nit应该对应于迭代次数'。但为什么尼特!= nfev?

1 个答案:

答案 0 :(得分:3)

部分输出记录在scipy.optimize.OptimizeResult

  • nfev:功能评估次数
  • njev:雅可比评估的数量
  • nit:算法的迭代次数

其他选项的记录较少,但您可以随时查看Github source以了解。 minimization_failures指的是本地优化器未能收敛的次数(如果蒙特卡罗步骤提出本地优化器的起始位置离本地最小值太远,则可能会发生这种情况)。

nit,盆地跳跃算法的迭代次数预计远小于nfev,即函数评估的数量。迭代对应于以下步骤:

  • 通过在当前位置周围随机移位来提出新的位置,
  • 最小化功能(使用本地优化器)以找到盆地最小值,
  • 接受或拒绝新盆地。

作为局部最小化过程的一部分,将会有许多函数评估,因此我们希望nfevnit大得多。