2016-02-12 25 views
0

我有興趣探索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文檔的教程傳遞下去。我個人認爲更復雜的例子會對社區有所幫助。

回答

0

在OpenMDAO中將這樣的東西設置爲單個單片模型並不是真的可行。到目前爲止,最簡單的方法是使用三個單獨的問題實例。

  1. 高保真問題
  2. 低保真問題
  3. 低 - 高 - 傳遞函數問題(可選)

你會使用前兩個問題的情況下,計算分析結果和梯度。第三個問題可能是可選的,因爲我希望它會更簡單,並且可以通過簡單的函數手動實現。 我會編寫一個標準的python腳本來循環您的僞代碼建議的必要方式。

因此,您將使用OpenMDAO來構建分析模型並從中獲取衍生物。但是,然後圍繞它建立一個自定義的Python腳本來實現你的AMMF。

對於lagrange乘法器,我們當前的優化器沒有公開這些結果,所以您將不得不推出自己的優化器或修改我們的源代碼。它不是一個openmdao包裝問題......它是一個python包裝器沒有公開信息的問題。

在OpenMDAO中嘗試並完全構建一個完整且非常複雜的流程是很誘人的。有時候,這是正確的呼叫。但是在這種情況下,高級算法的組裝非常簡單,並且您也不需要計算其中的導數。因此,不需要直接在OpenMDAO中實現頂級流程。相反,使用OpenMDAO作爲一種工具,使這一部分:

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) 

容易,做一個更傳統類型的編碼來實現頂層算法。

+0

感謝賈斯汀的幫助! –