1

高次元 (10+) 単調関数 (すべての方向で単調のように) のグローバルな最大値を見つけることからなる最適化問題を解決しようとしています。制約は、検索空間を平面で切断するようなものです。

すべてをコーディングし、ソルバーpyomoを使用しています。ipoptほとんどの場合、大域的最適にうまく収束すると確信しています。しかし、制約を少し試してみると、極小値に収束することがあることがわかります。

探索と搾取のトレードオフのように見えます。渡すことができるオプションを調べましたがipopt、リストが非常に長いため、グローバル最小値への収束を支援するためにどのパラメーターを使用すればよいかわかりません。

編集:

解決策の 2 つのヒント:

  • 私の変数は、非常に無限の境界で定義されていました。たとえばbounds=(0,None)、無限の半直線上を移動します。それらに 2 つの有限境界を適用しました。

  • 私は現在、複数の開始を使用しています:

    opt = SolverFactory('multistart')
    results = opt.solve(self.model, solver='ipopt', strategy='midpoint_guess_and_bound')
    

これまでのところ、これは収束に満足しています。

4

1 に答える 1

3

申し訳ありませんが、IPOPT はローカル ソルバーです。本当にグローバル ソリューションを見つけたい場合は、Baron、Couenne、Antigone などのグローバル ソルバーを使用できます。トレードオフがあります。グローバル ソルバーは低速であり、大きな問題では機能しない可能性があります。

または、適切な初期点でローカル ソルバーを支援することもできます。この点では、内点法よりもアクティブ セット法の方が優れていることが多いことに注意してください。場合によっては、不適切なローカル最適化を防ぐために、マルチスタート アルゴリズムが使用されます。さまざまな開始点を使用します。Pyomo には、これを行うための機能がいくつかあります (ドキュメントを参照してください)。

于 2019-03-04T03:24:24.780 に答える