scipy - 区分 OpenMDAO SciPy SLSQP 中的迭代和函数评估

标签 scipy 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

我现在正尝试对结果进行后处理,并检查整个迭代过程中优化的收敛性。当我通过 sqlite 字典访问迭代时

db = sqlitedict.SqliteDict('opt_record.sqlite','iterations')
db.keys()

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

最佳答案

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

  1. 迭代,或主要迭代
  2. 线搜索

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

关于scipy - 区分 OpenMDAO SciPy SLSQP 中的迭代和函数评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984395/

相关文章:

python - 为什么 from scipy import spatial 有效,而 scipy.spatial 在 import scipy 后不起作用?

python - 使用 scipy.ndimage.map_cooperatives 对 ndarray 中的所有数组进行高效采样

python - 使用 NSGA2 解决多目标问题时出现“TypeError”。来自 OpenMDAO 1.x 中的 pyopt-sparse

openmdao - Dymos 棘手的相位连接

python - 获取 numpy.poly1d 曲线的最小点

Python Pandas 使用新的 x 轴进行插值

multi-level - 如何在 OpenMDAO 1.x 中使用嵌套问题?

matlab - 将 Matlab 脚本作为 ExternalCode 组件运行

openmdao - 如何将离散时间估计集成到 OpenMDAO 组件中?

Python/Scipy 集成数组