区分 OpenMDAO 中的迭代和函数求值 SciPy SLSQP

Distinguishing between iterations and function evaluations in OpenMDAO SciPy SLSQP

我正在通过 OpenMDAO 使用 SLSQP 来解决优化问题。优化工作充分;最后的 SLSQP 输出为:

Optimization terminated successfully.    (Exit mode 0)
            Current function value: [-0.07475851]
            Iterations: 44
            Function evaluations: 87
            Gradient evaluations: 44
Optimization Complete

我现在正在尝试 post 处理结果并检查整个迭代过程中优化的收敛性。当我通过

通过 sqlite 字典访问迭代时
db = sqlitedict.SqliteDict('opt_record.sqlite','iterations')
db.keys()

然后我看到了 87 条记录。所以这里的 "iterations" 实际上是指函数评估。显然这也可以给出收敛的想法,但是有没有办法真正访问 iteration 信息,通过某种输出机制或通过反向计算哪些函数评估指向结束迭代的?

在 SLSQP 中,您可以通过以下两种方式之一获取函数调用:

  1. 迭代,或 Major iterations
  2. 行搜索的

这两件事都被案例记录器记录下来,OpenMDAO 无法区分它们。不过,您可以将它们过滤掉,因为主要迭代总是会在导数计算之前出现。因此,没有任何导数的案例很可能来自线搜索。