問題タブ [openmdao]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - スケーリングされた放物面と導関数のチェック
check_partial_derivatives()
以前の質問で示した問題に適用された方法の出力に驚いています:スケーリングを必要とする放物面最適化。そのメソッドへの呼び出しを追加すると:
次の出力が得られます。
最適化は正しい (つまり、導関数が正しいことをほぼ確実に証明している) が、check_partial_derivatives
出力は fd と forward/reverse メソッドの間で一貫した結果を示していない。
openmdao - pyOptSparseDriver の終了フラグ
何かが失敗した場合に終了フラグを指定する機能が必要です。pyoptsparse_driver のOpenMDAOドキュメントには、終了フラグのオプションがあります。ただし、オプションとして終了フラグを指定して実行すると、Option 'exit_flag' has not been added
. また、何かが失敗したかどうかを実際に指定する方法もわかりません。solve_nonlinear() で失敗したコンポーネントからフラグを渡し、それを使用して pyoptsparse_driver にオプションを設定する必要がありますか? このようなことをしたいのですが、構文がよくわからず、例が見つかりません。
mpi - OpenMDAO1+: 並列の変数ツリー
いくつかの異なるコンポーネントを制御するモデル パラメーターの大規模なセットがあります。モデルは並行して実行されています。実行中、モデル パラメーターは一定に保たれます。IndepVarComp()
問題は、すべてをオブジェクトで渡したいのに、並行して実行するときにすべてのモデル パラメーターを追加する必要があることです。モデルを実行する前 (セットアップと実行の間) に、実行スクリプトの値を編集できるようにする必要があります。これを行う良い方法はありますか?パラメータの「ソース」なしで MPI の下で実行することによるデータの受け渡しの問題を認識しています。
IndepVarComp()
オブジェクトを渡さない限り、各モデル パラメータを追加すると機能します。これは理にかなっています。値を変更してモデルの変更を追跡できるようにすることを OpenMDAO に伝えると、オブジェクトによる受け渡しは矛盾します。ただし、セットアップ後にパラメーター値を渡すことができるようにする必要があり、IndepVarComp()
各モデル パラメーターを作成せずに MPI でそれを行うことはできません。
私がやりたいことのOpenMDAOドキュメントからのセラーの問題に基づいた例を添付しました。の行 28 のコメントを外し、行 27 のコメントを外し、行 139 のコメントを外すことによりsrc.py
、この例は正常に並列に機能します。
で実行$ mpirun -np 4 python call.py
call.py
src.py
openmdao - OPENMDAO: バージョン 0.9.5 で行ったのと同じように、openmdao 1.6.3 を有効にする必要がありますか?
現在、openmdao を利用する「webcam-pulse-detector」を変更しようとしていますが、2 つのバージョンの openmdao で失敗しました。
バージョン 0.9.5 では、インポート エラー "no module named traits.api" が報告され、最新バージョン 1.6.3 ではエラー "ImportError: No module named datatypes.api" が報告されます。これは、openmdao がアクティブ化されていないためです。まだ。
では、「OPENMDAO/Scripts/activate」と入力して、バージョン 0.9.5 のように openmdao バージョン 1.6.3 をアクティブにするにはどうすればよいでしょうか。どうもありがとうございました!
openmdao - 偏導関数と有限差分エラーのチェック
私の以前の質問であるScaled paraboloid とデリバティブのチェックに関連して、問題を一度実行することに関連して修正したことがわかります。試してみたかったのですが、次のコードに示されている導関数のチェックと有限差分にまだ問題があります。
最初のチェックは正常に機能しますが、2 番目のチェックcheck_partial_derivatives
では FD に対して奇妙な結果が得られます。
そして(関係ないかもしれませんが)設定しようとするとroot.fd_options['force_fd'] = True
(確認するだけです)、最初のチェック中にエラーが発生します:
私は OpenMDAO HEAD (d1e12d4) を使用しています。
openmdao - OpenMDAO 1.x でカスタム ドライバー/エグゼキューターを作成する
私は OpenMDAO を使用して CNC 旋削プロセスのシミュレーションを実行しており、 SimAcceleration ドライバーを使用して実装するOpenMDAO の古いバージョンの自動車の例Component
と同様に、自分の 'executor(s)' を実装したいと考えています。コンポーネントが実行される方法。
ただし、OpenMDAO 1.x でこのような例を実装する方法がわかりません。カスタム ロジックを実装して、コンポーネントやGroup
s への入力を駆動し、出力を取得する必要がある場合があります。どんな指針も本当に役に立ちます。
PS - コンポーネントを でラップし、Problem
そのインスタンスを別のコンポーネントに作成し、すべての実行ロジックをその中に配置することを考えていました (ここでsolve_nonlinear
提案されているように)。しかし、これがこの問題に対処するための正しいアプローチであるかどうかはわかりません。
openmdao - OpenMDAO の分散コンポーネントを使用した並列 DoE
分散コードで DoE を並行して実行しようとしていますが、うまくいかないようです。以下は、実際のコードと同じエラーを発生させる簡単な例です。
私はこれを実行します
次のエラーが表示されます。
最新のマスターでこのユースケースのテストが見られないので、まだサポートしていないということですか、それともバグですか?
python - 学際的な問題のためのオプティマイザーの選択
検証の手段として OpenMDAO を使用して、 MDO テスト スイートの問題を解決しようとしています。私が直面している問題は、特定の問題のオプティマイザー/アルゴリズムを選択することです。
以下は、 IDF メソッドによって定式化されたスイートからのプロパン燃焼問題のコードです。pyOptSparseDriver で利用可能なSLSQP & NSGA2 を使用して解決しようとしました。しかし、どちらのオプティマイザーも最適ではないソリューションを提供しています。
SLSQP のソリューション -
NSGA2 のソリューション -
制約 f2、f6、f7 & f9 を下限ではなく等式制約 (=0) として問題を実行しようとしたため、問題が定義にないことはわかっています。オプティマを取得しています。
では、他にどのようなオプティマイザーを検討する必要がありますか? または、オプティマイザの問題と混同している他の問題はありますか。
前もって感謝します。
python - ScipyOptimizer が誤った最適化結果を返す
OpenMDAOで非線形最適化問題を実行していますが、これは最適解を知っています (解を検証したいだけです)。fromSLSQP
のドライバー構成を使用しています。ScipyOptimizer
openmdao.api
3 つの設計変数 A、B、C、それぞれの設計空間 (A の A最小から A最大など)、および単一の目的関数 Z があります。前述のように、3 つの設計変数すべての最適値を知っています。 (それらを A sol、 B sol、 C solと呼びましょう) Z の最小値を生成します (Z solと呼びます)。
この問題を実行すると、Z solよりも大きい Z の値が得られます。これは、最適解ではないことを示しています。C solを Cに割り当て、設計変数として A と B のみを使用して問題を実行すると、Z solにはるかに近く、実際には以前に取得した値よりも小さい Z の値が得られます (3 つの設計変数のシナリオで) )。
なぜ私はこの行動を観察しているのですか? ScipyOptimizer
両方のケースで同じ解決策を与えるべきではありませんか?
編集:いくつかのコードを追加..
このコードは間違った結果をもたらします。両方のクラスから削除desvar_twc
し、(私が持っているソリューションから) 最適な値を割り当てると、かなり正しい結果、つまり前のシナリオよりも少ない目的関数の答えが得られます。