OpenMDAO:取决于迭代次数的条件语句

问题描述

在使用 OpenMDAO 进行优化期间,有没有办法在优化期间访问迭代次数或先前迭代中设计变量的值?

我想根据相应的迭代次数创建一个条件语句。

我创建了一个连续函数,表示由指数函数链接的离散点。我想用迭代次数增加中间函数的指数,以便它惩罚中间值并且优化收敛到接近离散值之一。

提前致谢。

解决方法

您所描述的听起来像是一种延续/平滑的形式。我可以建议两种不同的方法:

  1. 在优化器上设置合理的最大迭代限制,并在对 run_driver 的调用周围添加外部 for 循环。您甚至可以在到达每个停止点后调整迭代限制。从一个非常小的迭代限制开始,让它随着收敛的增加而增长。

    优点:

    • 实施起来相当简单
    • 使用现有的 OpenMDAO 驱动程序 API

    缺点:

    • 设置自己的停止条件的能力有限(只有真正的迭代限制)
    • 重新开始优化不会保留先前的 Hessian 近似,并且可能导致拟牛顿方法的收敛性不佳
  2. 跳过 OpenMDAO 驱动程序接口,自行开发。 This approach 是在 2020 OpenMDAO Reverse Hackathon 中建议的,用于发现 OpenMDAO Driver 接口不满足其需求的用户。

    优点:

    • 更大的灵活性
    • 完全控制

    缺点:

    • 还有很多工作

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...