0

私は最適化の目的でパルプ(https://pythonhosted.org/PuLP/)を使用しています。 Bは0または1であり、M十分に大きい値である最小絶対値を持つPythonパルプオプティマイザ

x + M * B >= MIN 
-x + M * (1 - B) >= MIN 

:私はちょうど2つの制約を作成して、私はabs(x) > MINのような制約を使用する必要があると私はここで解決策http://lpsolve.sourceforge.net/5.5/absolute.htmを見つけました。問題は、M〜10000を使用するとすばらしいことですが、INT_MAX_VALUEまたは〜10000000000を使用すると機能しません。 誰かにこのような問題がありますか?

+0

'B'はブール変数です。なぜ、' 10000'や '100000000000'などの値を使用しますか? – Holt

+0

'M'は可能な限り小さく選択する必要があります(そうしないと、気づいたように深刻な数値的な問題に陥ります)。あなたの場合、 'M 'を' x'の境界、すなわち| x |とみなすことができます。 <= Mである。実用的な場合には、| x |の良い束縛をよく知ることがある。 –

答えて

1

おそらくあなたはCOIN-CBCでうまくいくでしょう。あなたの数値問題を別の投稿で見ましたが、それはちょうどいくつかのVUB制約から来ているようです。

まずCBCの背後にLPソルバー(CLP)を次にGLPKより精巧であり、第二、あなたのABS-機能のためのuたいの使用は任意の数値危険なし(より良いmuchtモデルこれらVUB制約、SOS制約を、使用することができます、それだけでそれらを分岐させる)。全体的にパフォーマンスが良いのが普通です。 私の答えにフォローアップして、質問にコメントすることをどうぞ気をつけてください。

関連する問題