我正在通过 OpenMDAO 使用 SLSQP 来解决优化问题。优化工作充分;最后的 SLSQP 输出如下:
Optimization terminated successfully. (Exit mode 0)
Current function value: [-0.07475851]
Iterations: 44
Function evaluations: 87
Gradient evaluations: 44
Optimization Complete
我现在正尝试对结果进行后处理,并检查整个迭代过程中优化的收敛性。当我通过 sqlite 字典访问迭代时
db = sqlitedict.SqliteDict('opt_record.sqlite','iterations')
db.keys()
然后我看到 87 条记录。所以这里的“迭代”实际上是指函数评估。显然,这也可以给出收敛的想法,但是有没有办法真正访问迭代信息,要么通过某种输出机制,要么通过反向计算哪些函数评估指的是迭代结束?
最佳答案
在 SLSQP 中,您可以通过以下两种方式之一获取函数调用:
- 迭代,或
主要迭代
- 线搜索
这两件事都被案例记录器记录下来,OpenMDAO 无法区分它们。不过,您可以将它们过滤掉,因为主要迭代总是会在导数计算之前出现。因此,没有任何导数的情况很可能来自线搜索。
关于scipy - 区分 OpenMDAO SciPy SLSQP 中的迭代和函数评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984395/