私は3つの変数(w、V、m)を持つ(制約付き)非線形最小化問題を解いています。与えられた最小化問題は、(V、m)に対して線形(制約付き)である。線形最小化問題は[w_0、w_1]においてwに対して定義される。Scipyの範囲内で最適化検索を維持するには?
私は問題を設定した方法は、私が制約線形プログラムを解くことだwが与えられ、その後、私はbounds = ((w_0, w_1),)
ワットの境界としての範囲でwがそれを上に最小化していますということです。私は問題を抱えています.Wの最小化がその境界の外で、すなわち線形プログラムが定義されていない領域を探索するときです。
検索範囲を指定した範囲外に制限する方法はありますか? 他にも選択肢がありますか?より厳しい境界を渡す?範囲外の値が渡された場合、目的関数は大きな値を返しますか?
ごくわずかな実例を提供できないのは残念です。ここ
は、いくつかの擬似コードである:
from scipy.optimize import linprog,minimize
def objective(w):
A_ub,b_ub = constraints(w)
results = linprog(c,A_ub = A_ub,b_ub=b_ub)
return results.fun
bounds = ((w_0,w_1),)
x0 = (w_0+w_1)/2
minimize(objective,x0,bounds)
さらに洗練された実行不可能なパスソルバー(例:MINOS)は、その境界外のxの関数と勾配を評価しません。実行不可能は拘束された違反と同一ではない。実際の世界の問題については、ソルバが 'lb <= x <= ub'だけの評価を確実にすることが重要です。これを使用してドメインエラー(例えば、負のxのlog(x))から保護します。 –
@ErwinKalvelagenご意見ありがとうございます。私はMINOSを使用したことはなく、そのソルバーについて過去に読んでいたかもしれない内部構造を思い出すことはできませんでしたが、私はいつも、汎用のNLPソルバーのいくつか/ほとんどが最適化中に実行不可能な点を評価すると感じました(COBYLAはいくつかの[例](https://mail.scipy.org/pipermail/scipy-user/2007-July/012955.html))。私はコンバージェンスプルーフに関する利点を想像することさえできます。問題は今です:私は間違っているか、あなたの印象は商用ソルバに縛られていますか? – sascha
はいポイントは実行不可能かもしれませんが、良いソルバのために関数を評価するときに構造変数の境界に従います。つまりxは境界の間にありますが、方程式はまだ実行不可能です。実現可能なパスメソッドは実際には実行不可能であるかもしれないことに注意してください。実現可能な状態になったら(基本的に厳密なフェーズI /フェーズIIアプローチ)、実現可能な状態になったら、実現可能なパスを意味します。例えば。 CONOPTは実行可能な経路アルゴリズムですが、実行不可能な初期点を受け入れます。 –