问题描述
在使用 OpenMDAO 进行优化期间,有没有办法在优化期间访问迭代次数或先前迭代中设计变量的值?
我创建了一个连续函数,表示由指数函数链接的离散点。我想用迭代次数增加中间函数的指数,以便它惩罚中间值并且优化收敛到接近离散值之一。
提前致谢。
解决方法
您所描述的听起来像是一种延续/平滑的形式。我可以建议两种不同的方法:
-
在优化器上设置合理的最大迭代限制,并在对
run_driver
的调用周围添加外部 for 循环。您甚至可以在到达每个停止点后调整迭代限制。从一个非常小的迭代限制开始,让它随着收敛的增加而增长。优点:
- 实施起来相当简单
- 使用现有的 OpenMDAO 驱动程序 API
缺点:
- 设置自己的停止条件的能力有限(只有真正的迭代限制)
- 重新开始优化不会保留先前的 Hessian 近似,并且可能导致拟牛顿方法的收敛性不佳
-
跳过 OpenMDAO 驱动程序接口,自行开发。 This approach 是在 2020 OpenMDAO Reverse Hackathon 中建议的,用于发现 OpenMDAO Driver 接口不满足其需求的用户。
优点:
- 更大的灵活性
- 完全控制
缺点:
- 还有很多工作