我正在使用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
最小化失败
恩耶夫
尼特


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

最佳答案

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


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


其他选项的文献资料较少,但是您随时可以查看Github source进行了解。 minimization_failures是指本地优化程序未能收敛的次数(如果蒙特卡洛步骤为本地优化程序建议的起始位置与本地最小值相差太远,则可能会发生这种情况)。

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


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


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

08-17 20:09