1

サロゲートベースの最適化の調査に興味があります。私はまだ opendao のコードを書いていません。OpenMDAO がこの作業をどの程度サポートするかを理解しようとしているだけです。

トレーニング データを生成するための DOE ドライバー ( http://openmdao.readthedocs.org/en/1.5.0/usr-guide/tutorials/doe-drivers.html ) があることがわかります。いくつかの代理モデルがあることがわかります。メタモデルに追加できます ( http://openmdao.readthedocs.org/en/1.5.0/usr-guide/examples/krig_sin.html )。しかし、DOE の結果がトレーニング データとしてメタモデルに渡される例は見つかりませんでした。

サンプル/チュートリアル/フォーラム投稿の多くでは、トレーニング データがメタ モデル上またはメタ モデル内で直接作成されているようです。したがって、これらがどのように連携するかは明らかではありません。

開発者は、トレーニング データが DOE からメタ モデルにどのように渡されるかを説明できますか? ありがとう!

4

1 に答える 1

1

openmdao 1.x では、この種のプロセスは (まだ) DOE 経由で直接サポートされていませんが、確実に可能です。最終的な目標に応じて異なる利点を提供する 2 つのパスがあります。

1 つの大まかな分類に基づいて、さまざまなシナリオを分けます。

1) DOE/メタモデルの組み合わせ全体で勾配ベースの最適化を行いたい。これは、たとえば、CFD を使用していくつかの重要なポイントで抗力を予測し、メタモデルを使用してミッション分析用の抗力極を生成する場合に当てはまります。この種のモデリングの好例は、同時航空機ミッション設計の最適化に関するこの論文で見つけることができます。.

2) モデル全体で勾配ベースの最適化を行いたくない。勾配のない最適化を行いたい場合があります (遺伝的アルゴリズムのように)。固定トレーニング データを使用して、サロゲート自体の周囲で勾配ベースの最適化を実行することができます。または、最適化をまったく行いたくない場合もあります...

ユース ケースがシナリオ 1 に該当する場合 (または将来的にこのユース ケースに該当する場合)、マルチポイントアプローチを使用します。トレーニング ケースごとにモデルのインスタンスを 1 つ作成し、メタモデルに渡す配列に結果を多重化できます。これは、導関数をモデル全体に​​伝播できるようにするために必要です。マルチポイント アプローチはうまく機能し、非常に並列化可能です。トレーニング データ自体を生成するために使用するモデルの構造によっては、分散コンポーネントを使用した、わ​​ずかに異なるマルチポイント アプローチを検討することもできます。またはチェーン化された一連の分散コンポーネント。モデルがそれをサポートしている場合、分散コンポーネント アプローチは、この場合に使用する最も効率的なモデル構造です。

ユース ケースがシナリオ 2 に該当する場合でも、必要に応じてマルチポイント アプローチを使用できます。それは箱から出してすぐに動作します。ただし、通常の DOE を使用してトレーニング データを生成することも検討できます。これを行うには、ネストされた問題アプローチを使用する必要があります。ここでは、DOE トレーニング データの生成をサブ問題に配置します。これも機能しますが、現在実装されていないため、DOE から結果の配列を取得するには、少し余分なコーディングが必要になります。

DOE を使用してデータを生成し、それをダウンストリームで最適化されるサロゲートに渡したい場合は、問題インスタンスのペアを使用できます。これは、ネストされた問題を作成することを必ずしも必要としません。代わりに、DOE を使用する 1 つの問題インスタンスを含む実行スクリプトを作成するだけです。完了したら、データを配列に収集します。次に、それを 2 番目の問題インスタンスのメタモデルのトレーニング入力に手動で割り当てることができます。次の擬似コードのようなもの:

prob1 = Problem()
prob1.driver = DOE()
#set up the DOE variables and model ... 
prob1.run()
training_data = prob1.driver.results

prob2 = Problem()
prob2.driver = Optimizer()
#set up the meta-model and optimization problem 
prob2['meta_model.train:x'] = training_data
prob2.run()
于 2016-02-13T02:27:00.343 に答える