2016-10-25 10 views
0

私は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) 

答えて

0

一つは、二つのクラスに制約最適化問題を解決するためのアプローチを分類することができる:

  • (1)実現可能な方法:すべての反復が満足さを拘束
  • (2)実行不可能なメソッド:反復は収束するまで制約を満たす必要はありませんnce

したがって、実行可能な方法を使用することは、あなたのケースでは自然です。悲しいことにscipyのドキュメントは、利用可能なアルゴリズムに関してこの特性について少し不明です。

私はL-BFGS-Bはここに移動するための方法であることを、確信している(あなたが唯一のバウンド制約を必要として!)うまくいくかもしれない

+0

さらに洗練された実行不可能なパスソルバー(例:MINOS)は、その境界外のxの関数と勾配を評価しません。実行不可能は拘束された違反と同一ではない。実際の世界の問題については、ソルバが 'lb <= x <= ub'だけの評価を確実にすることが重要です。これを使用してドメインエラー(例えば、負のxのlog(x))から保護します。 –

+0

@ErwinKalvelagenご意見ありがとうございます。私はMINOSを使用したことはなく、そのソルバーについて過去に読んでいたかもしれない内部構造を思い出すことはできませんでしたが、私はいつも、汎用のNLPソルバーのいくつか/ほとんどが最適化中に実行不可能な点を評価すると感じました(COBYLAはいくつかの[例](https://mail.scipy.org/pipermail/scipy-user/2007-July/012955.html))。私はコンバージェンスプルーフに関する利点を想像することさえできます。問題は今です:私は間違っているか、あなたの印象は商用ソルバに縛られていますか? – sascha

+0

はいポイントは実行不可能かもしれませんが、良いソルバのために関数を評価するときに構造変数の境界に従います。つまりxは境界の間にありますが、方程式はまだ実行不可能です。実現可能なパスメソッドは実際には実行不可能であるかもしれないことに注意してください。実現可能な状態になったら(基本的に厳密なフェーズI /フェーズIIアプローチ)、実現可能な状態になったら、実現可能なパスを意味します。例えば。 CONOPTは実行可能な経路アルゴリズムですが、実行不可能な初期点を受け入れます。 –

0

何かが変数wをredifining/reparametrizingされ、それが残したことがないように、境界。 xは-Infinityと無限大との間で移行する場合、

W = A +(B-A)/(1 + EXP(-x))

(a、b)は区間であろう。

minimize関数では、xを最適化の引数に設定し、この式にはwを含める必要があります。 xが何であれ、wが範囲内にあることが保証されます。

これは悪い考えはいつですか?間違いなく、aまたはbのいずれかでコーナー解があると思われる場合は、それ以外は、通常はうまくいくと思いますが、それがあなたのために働いたかどうかを報告してください。

関連する問題