【问题标题】:Distinguishing between iterations and function evaluations in OpenMDAO SciPy SLSQP区分 OpenMDAO SciPy SLSQP 中的迭代和函数评估
【发布时间】:2018-02-09 14:00:22
【问题描述】:

我正在通过 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 条记录。所以这里的“迭代”实际上是指功能评估。显然,这也可以给出收敛的想法,但是有没有办法真正访问 iteration 信息,无论是通过某种输出机制还是通过回算哪些函数评估指的是迭代的结束?

【问题讨论】:

    标签: scipy openmdao


    【解决方案1】:

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

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

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

    【讨论】:

    • 能否详细解释一下这些方法?
    • 主要迭代涉及 SQP 方法中的二次子问题的求解 (en.wikipedia.org/wiki/Sequential_quadratic_programming)。此步骤计算搜索方向。一旦知道了搜索方向,您就可以沿该方向执行线搜索,寻找一个足以执行下一次主要迭代的点。线搜索通常在没有任何梯度的情况下完成。行搜索中通常会进行 2 次或更多次评估。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2023-04-10
    相关资源
    最近更新 更多