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

OpenMDAO: conditional statement depending on the number of iterations

在使用 OpenMDAO 进行优化期间,是否有任何方法可以访问优化期间迭代次数或先前迭代中设计变量的值?

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

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

提前致谢。

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

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

    优点:

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

    缺点:

    • 设置自己的停止条件的能力有限(只有迭代限制)
    • 重新开始优化不会保留先验的 Hessian 近似,可能会导致拟牛顿法的收敛性较差
  2. 跳过 OpenMDAO 驱动程序接口,并滚动您自己的。 This approach was suggested in the 2020 OpenMDAO Reverse Hackathon,对于发现 OpenMDAO Driver 接口不能满足他们需求的用户。

    优点:

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

    缺点:

    • 还有很多工作要做