了解 scipy.optimize.basinhopping 的输出
Understanding the output of scipy.optimize.basinhopping
我正在使用 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应该对应'number of iteration'。但为什么 nit != nfev?
一些输出记录在 scipy.optimize.OptimizeResult
:
nfev
: 函数求值次数
njev
:雅可比计算的次数
nit
:算法的迭代次数
其他选项的文档较少,但您始终可以查看 Github source 以了解。 minimization_failures
指的是局部优化器未能收敛的次数(如果 Monte Carlo 步骤为局部优化器建议的起始位置距离局部最小值太远,则可能会发生这种情况)。
nit
,跳盆算法的迭代次数,预计会比nfev
,函数求值次数少很多。一次迭代对应以下步骤:
- 通过围绕当前位置随机移动来提出新位置,
- 最小化函数(使用局部优化器)以找到盆地最小值,
- 接受或拒绝新盆地。
作为局部最小化过程的一部分,将有许多函数评估,因此我们预计 nfev
比 nit
大得多。
我正在使用 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应该对应'number of iteration'。但为什么 nit != nfev?
一些输出记录在 scipy.optimize.OptimizeResult
:
nfev
: 函数求值次数njev
:雅可比计算的次数nit
:算法的迭代次数
其他选项的文档较少,但您始终可以查看 Github source 以了解。 minimization_failures
指的是局部优化器未能收敛的次数(如果 Monte Carlo 步骤为局部优化器建议的起始位置距离局部最小值太远,则可能会发生这种情况)。
nit
,跳盆算法的迭代次数,预计会比nfev
,函数求值次数少很多。一次迭代对应以下步骤:
- 通过围绕当前位置随机移动来提出新位置,
- 最小化函数(使用局部优化器)以找到盆地最小值,
- 接受或拒绝新盆地。
作为局部最小化过程的一部分,将有许多函数评估,因此我们预计 nfev
比 nit
大得多。