0

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 ドキュメントのチュートリアルとして喜んでお渡しします。個人的には、より複雑な例がコミュニティに役立つと思います。

4

1 に答える 1

0

このようなものを OpenMDAO で単一のモノリシック モデルとして設定することは、実際には不可能です。最も簡単な方法は、3 つの個別の問題インスタンスを使用することです。

  1. 高忠実度の問題
  2. 低忠実度の問題
  3. 低高伝達関数問題 (オプション)

最初の 2 つの問題インスタンスを使用して、解析結果と勾配を計算します。3 番目の問題はオプションである可能性が高いです。これは、はるかに単純になり、単純な関数を使用して手動で実装できると予想されるためです。疑似コードが示唆する方法でループする標準の python スクリプトを作成する必要があります。

したがって、OpenMDAO を使用して、分析モデルの構築とそれらからの派生物の取得をより簡単に行うことができます。ただし、その周りにカスタム Python スクリプトを作成して、AMMF を実装します。

ラグランジュ乗数に関しては、現在のオプティマイザは結果としてそれらを公開していないため、独自のオプティマイザをロールするか、いずれかのソース コードを変更する必要があります。それは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)

より簡単で、より伝統的なタイプのコーディングを行ってトップレベルのアルゴリズムを実装します。

于 2016-02-13T02:35:12.653 に答える