区分 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 中,您可以通过以下两种方式之一获取函数调用:
- 迭代,或
Major iterations
- 行搜索的
这两件事都被案例记录器记录下来,OpenMDAO 无法区分它们。不过,您可以将它们过滤掉,因为主要迭代总是会在导数计算之前出现。因此,没有任何导数的案例很可能来自线搜索。
我正在通过 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 中,您可以通过以下两种方式之一获取函数调用:
- 迭代,或
Major iterations
- 行搜索的
这两件事都被案例记录器记录下来,OpenMDAO 无法区分它们。不过,您可以将它们过滤掉,因为主要迭代总是会在导数计算之前出现。因此,没有任何导数的案例很可能来自线搜索。