理解scipy.optimize.basinhopping的输出结果

3
我正在使用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应该对应于“迭代次数”。但为什么nit != nfev?
1个回答

8

一些输出结果在scipy.optimize.OptimizeResult文档中有记录:

  • nfev:函数评估的次数
  • njev:雅可比矩阵评估的次数
  • nit:算法迭代的次数

其他选项文档不太完整,但您可以查看Github源代码来了解。minimization_failures指的是本地优化器未能收敛的次数(如果蒙特卡罗步骤提出的起始位置距离局部最小值太远,则可能会发生这种情况)。

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

  • 随机位移当前位置以提出新位置
  • 使用本地优化器最小化函数以找到盆地最小值
  • 接受或拒绝新盆地

在局部最小化过程中将有许多函数评估,因此我们预计nfev远大于nit


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接