2016-09-28 6 views
0

含むif文で制約定義私はPyomoを使用して最適化を実行しようとしていますが、私はこのような問題のための制約を定義するのに苦労しています:混合整数計画:変数

if Variable 1 > Parameter 
    Variable 2 = Variable 1 - Parameter 
else skip constraint (?) 

if Parameter > Variable 1 
    Variable 3 = Variable 4 -(Parameter - Variable 1) 
else skip constraint (?) 

は何とかこの仕事をしていますか? スキップ制約について:それが必要なのかどうかはわかりません。

基本的には、変数とパラメータの関係を表現したいだけです。

私はここで(Mixed integer programming: variable assignment per condition (if then else))と似たようなものを見ましたが、私の問題に調整することはできません。

ありがとうございます!

+0

ちょっと不明です。正確にあなたが達成しようとしていることは、あなたがいくつかの基本が欠けているようです。ある変数をあるハーフバウンドまたは他の値に依存する値に制限したい場合は、この制約を(常に線形方程式に変換されます)常にモデルに追加する必要があります(ソルバーはこれについての理由)。つまり、**スキップ制約**は意味をなさないことを意味します。この擬似コードは、混合 - 整数プログラミングよりも制約プログラミングベースのアプローチに似ています。タスクを分割する:バイナリインジケータ制約と大きなM値を追加します。 – sascha

+0

私は基本的に制約などの作業を始めましたので、あまりにも多くを一度に含めたいと思います。 ありがとう、私はあなたが言及した2つの方法を調べます。 – AWi

+0

[this](http://download.aimms.com/aimms/download/manuals/AIMMS3OM_LinearProgrammingTricks.pdf)から開始してください。インジケータ制約とbig-Mアプローチの両方が説明されている。 – sascha

答えて

0

私はモデルの残りの部分についてはほとんど分かっていないので、私の答えは多分過労です。

x1>p => x2=x1-pは、次のように表すことができる。ここ

y1=x1-p 
-d*M <= y1 <= (1-d)*M 
y1-d*M <= x2 <= y1+d*M 
d in {0,1} 

M大きな定数(我々はこれらのビッグMのための良好な値を見つける必要があるでしょう)です。他の条件と同様です。

ほとんどの場合、これを単純化するためにモデルの残りの部分についてもっと多くの知識を使用することができます(多くの場合)。実際には私の一般的な定式化を使用しません。

+0

あなたの答えをありがとう。私はちょうど今実際のコードにあなたのフォーマットを適用しようとしていますが、私は完全にbig_Mの機能を理解していません。 – AWi

+0

big-Mは、方程式をオンまたはオフにするのに必要な大きな定数です。 –

+0

申し訳ありませんが、それはそれをクリアします。ありがとうございました! – AWi