我对探索多保真 (MF) 优化方法很感兴趣。我试图弄清楚 OpenMDAO 将如何支持这项工作。我不想深入研究 OpenMDAO 代码,除非我确信它可以完成这项工作。
一种简单的 MF 方法是 AMMF。它基本上通过一阶校正优化了信任区域内的低保真模型,因此结果类似于高保真方法。基本算法如下:
X=X_0
While not converged
Calculate y_hf = high_fidelity(X)
Calculate y_lf = low_fidelity(X)
Calculate grad_y_hf = grad_high_fidelity(X)
Calculate grad_y_lf = grad_low_fidelity(X)
set_low_to_high_transfer_function(y_hf,y_lf,grad_y_hf,grad_y_lf)
optimize on corrected_transfer_function within |X-X0|<rho
based on solution, lagrange multipliers adjust rho
X=X_opt_solution
repeat
我认为在 OpenMDAO 中 high_fidelity() 和 low_fidelity() 可以与适当的驱动程序组合在一起,我可以调用线性化方法来获取渐变。
然后优化阶段是一个基本的 OpenMDAO 优化问题,就像教程中的那些对包含低保真分析的组以及纠正该分析输出的附加组件的组一样。
然后外部循环可以实现为纯python。我真的看不出哪里需要 OpenMDAO。也许有人可以对此发表评论?
问题:
这是用 OpenMDAO 实现 AMMF 的明智方法吗?
在纯 python 中使用循环时我可以看到的一个问题是在记录器中。我需要为外部循环添加一个额外的迭代变量。我如何配置记录器以了解这个额外的循环?
要评估收敛性并调整信任区域,您需要使用拉格朗日乘数。对于基于梯度的方法,这些通常在优化解决方案中计算。OpenMDAO 包装器有提取这些值的方法吗?还是我必须创建自己的意大利面条代码来从优化输出文件中检索值?
谢谢您的帮助!
如果我得到这个工作,我会很乐意将它作为 OpenMDAO 1.x 文档的教程传递。我个人认为更复杂的例子会对社区有所帮助。