python - 了解 scipy.optimize.basinhopping 的输出

标签 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

  • 最小化失败次数

  • njev

  • 尼特

我猜 nfev = 函数求值次数,nit 应该对应于“迭代次数”。但为什么 nit != nfev?

最佳答案

一些输出记录在 scipy.optimize.OptimizeResult 中:

  • nfev : 函数求值次数
  • njev :雅可比计算的次数
  • nit : 算法的迭代次数

其他选项的文档较少,但您始终可以查看 Github source了解。 minimization_failures 指的是局部优化器未能收敛的次数(如果蒙特卡罗步骤为局部优化器建议的起始位置离局部最小值太远,则可能会发生这种情况)。

nit 是 basin-hopping 算法的迭代次数,预计远小于 nfev 是函数求值次数。一次迭代对应以下步骤:

  • 通过围绕当前位置随机移动来提出新位置,
  • 最小化函数(使用局部优化器)以找到盆地最小值,
  • 接受或拒绝新盆地。

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

关于python - 了解 scipy.optimize.basinhopping 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27728483/

相关文章:

python - 验证函数打印以前的输入而不是当前的

python - 我无法直接运行 python 脚本的原因是什么?

python - django 表单为关键字参数获取了多个值

javascript - 创建一个 Jquery 对象的对象

mysql - 需要刷新表吗?

python - 如何计算(正态)分布上的点的 p 值?

python - 将列表列表/嵌套列表转换为没有嵌套的列表列表

java - 如何使用通用代码改进类?

python - scipy.sparse.csr.csr_matrix :Matrix extension

python - Scipy稀疏矩阵和稀疏向量之间的欧几里德距离