Multi-Fidelity (MF) 最適化手法の調査に興味があります。私は、OpenMDAO がこの作業をどの程度サポートしているかを理解しようとしています。私は OpenMDAO のコードに深く入り込みたくありません。
シンプルな MF アプローチの 1 つに 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() を適切なドライバーでグループ化でき、linearize メソッドを呼び出して勾配を取得できると考えています。
次に、最適化段階は、忠実度の低い分析とその分析の出力を修正する追加のコンポーネントを含むグループで動作するチュートリアルのような基本的な OpenMDAO 最適化問題です。
次に、外側のループを純粋な python として実装できます。そのために OpenMDAO がどこで必要になるのか、私にはよくわかりません。多分誰かがそれについてコメントできますか?
質問:
これは OpenMDAO で AMMF を実装する賢明な方法ですか?
純粋な python でループを使用する際に見られる問題の 1 つは、レコーダーにあります。外側のループ用に反復変数を追加する必要があります。この追加のループを認識するようにレコーダーを構成するにはどうすればよいですか?
収束を評価して信頼領域を調整するには、ラグランジュ乗数が必要です。勾配ベースの方法の場合、これらは通常、最適化ソリューションで計算されます。OpenMDAO ラッパーには、これらの値を抽出する方法がありますか? それとも、最適化出力ファイルから値を取得するために独自のスパゲッティ コードを作成する必要がありますか?
助けてくれてありがとう!
これが機能するようになったら、OpenMDAO 1.x ドキュメントのチュートリアルとして喜んでお渡しします。個人的には、より複雑な例がコミュニティに役立つと思います。