そのため、コードを古い OpenMDAO から新しい OpenMDAO に変換しています。すべての出力と部分勾配が正しいことが確認されました。最初は問題はまったく最適化されませんでしたが、古いコードには勾配を提供しないコンポーネントがいくつかあることに気付きました。そのため、これらのコンポーネントに fd_options['force_fd'] = True を追加しましたが、それでも正しい値に最適化されません。全導関数を確認しましたが、それでも正しくありませんでした。また、古い OpenMDAO よりも各反復を実行するのにかなり長い時間がかかります。新しいコードを古い OpenMDAO コードと同じ値に最適化する唯一の方法は、勾配を提供するコンポーネントであっても、各コンポーネントを有限差分に設定することです。
- 古いOpenMDAOが自動有限差分を実行したとき、最適化に必要な出力と入力に対してのみ実行したのですか、それともすべての入力と出力のヤコビアン全体を計算しましたか? 「force_fd」を True にすると、新しい OpenMDAO について同じ質問が表示されます。
- コンポーネントのヤコビアンの一部を提供して、残りの有限差分を取得できますか? 古い OpenMDAO では、missing_deriv_policy = 'assume_zero' を設定しない限り、提供されていない勾配は有限差分でしたか?