高次元 (10+) 単調関数 (すべての方向で単調のように) のグローバルな最大値を見つけることからなる最適化問題を解決しようとしています。制約は、検索空間を平面で切断するようなものです。
すべてをコーディングし、ソルバーpyomo
を使用しています。ipopt
ほとんどの場合、大域的最適にうまく収束すると確信しています。しかし、制約を少し試してみると、極小値に収束することがあることがわかります。
探索と搾取のトレードオフのように見えます。渡すことができるオプションを調べましたがipopt
、リストが非常に長いため、グローバル最小値への収束を支援するためにどのパラメーターを使用すればよいかわかりません。
編集:
解決策の 2 つのヒント:
私の変数は、非常に無限の境界で定義されていました。たとえば
bounds=(0,None)
、無限の半直線上を移動します。それらに 2 つの有限境界を適用しました。私は現在、複数の開始を使用しています:
opt = SolverFactory('multistart') results = opt.solve(self.model, solver='ipopt', strategy='midpoint_guess_and_bound')
これまでのところ、これは収束に満足しています。