2016-08-08 9 views
0

私の問題は次のとおりです。openmdaoのさまざまな問題をさまざまなソルバーを使って最適化しています。 問題は1つ以上のルーツを持つ目的関数を与え、私の目標は最適化を使用して近づくことです。 あり、たとえばSLSQPまたはPSQPに問題はありませんが、IPOPTを使用した場合、ここで私は、印刷詳細結果(抜粋)から得ることができるものである。 enter image description here目的関数(IPOPT)の停止基準

私の問題はひどくスケールか何かが、そこにあるかもしれません目的関数が(例えば)1e-5よりも低いときにIPOPTを停止させる方法? 私はこの特定の問題で欲しいものを手に入れるために 'tol'を修正する必要がありますが、目的関数に依存するだけでなくEoに影響する 'tol'の影響...誰でもアイデアはありますか? 事前に感謝

答えて

0

Ipoptにはさまざまな収束許容値があります。 http://www.coin-or.org/Ipopt/documentation/node42.html

適切に設定すると、希望するときに停止するように設定されます。 acceptable_tolを試してみるといいでしょう。答えが終了基準として変わるのを止めるときを探します。

+0

既にリンクを確認しました。私は問題を早期に止めるために、高い 'dual_inf_tol'を設定する必要があります(inf_duは約1e1です)。問題はtolであり、acceptable_tolの基準は、実装ペーパー(http://cepac.cheme.cmu.edu/pasilectures/biegler/ipopt.pdf)に従って問題の多くのサブ変数に依存します。 したがって、あらかじめ決められた値がないことは明らかです。私は、目的関数がある値のもとで停止するように設定できます。したがって、それを行う方法についての私の質問(それはドキュメントの終了セクションで指定されません) – gael17

+0

それはあなたが停止基準に組み込まれて満足していないように聞こえる。 OpenMDAOラッパーコードを変更して、独自の停止基準を追加することができます。トータルハックとして気にならないように少し注意する必要がありますが、素早く汚いものが必要な場合は、ハックしてください。https://github.com/OpenMDAO/OpenMDAO/blob/master/openmdao /drivers/pyoptsparse_driver.py#L423 –

+0

これはまさにそのようなものです。 _objfuncは、pyoptsparseのOptimizationクラスでのみ使用されているようです。ラッパーがオプティマイザを直接呼び出して結果を処理するだけなので、停止基準をラッパーから変更する方法はありません...また、IPOPTのコードを変更することは難しいようです: – gael17

関連する問題