如何解决OpenMDAO:取决于迭代次数的条件语句
在使用 OpenMDAO 进行优化期间,有没有办法在优化期间访问迭代次数或先前迭代中设计变量的值?
我想根据相应的迭代次数创建一个条件语句。
我创建了一个连续函数,表示由指数函数链接的离散点。我想用迭代次数增加中间函数的指数,以便它惩罚中间值并且优化收敛到接近离散值之一。
提前致谢。
解决方法
您所描述的听起来像是一种延续/平滑的形式。我可以建议两种不同的方法:
-
在优化器上设置合理的最大迭代限制,并在对
run_driver
的调用周围添加外部 for 循环。您甚至可以在到达每个停止点后调整迭代限制。从一个非常小的迭代限制开始,让它随着收敛的增加而增长。优点:
- 实施起来相当简单
- 使用现有的 OpenMDAO 驱动程序 API
缺点:
- 设置自己的停止条件的能力有限(只有真正的迭代限制)
- 重新开始优化不会保留先前的 Hessian 近似,并且可能导致拟牛顿方法的收敛性不佳
-
跳过 OpenMDAO 驱动程序接口,自行开发。 This approach 是在 2020 OpenMDAO Reverse Hackathon 中建议的,用于发现 OpenMDAO Driver 接口不满足其需求的用户。
优点:
- 更大的灵活性
- 完全控制
缺点:
- 还有很多工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。