我有興趣探索Multi-Fidelity(MF)優化方法。我想弄清楚OpenMDAO將如何支持這項工作。除非我確信它可以完成這項工作,否則我不想深入研究OpenMDAO代碼。在OpenMDAO中實現AMMF
簡單的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文檔的教程傳遞下去。我個人認爲更復雜的例子會對社區有所幫助。
感謝賈斯汀的幫助! –