整数線形計画法の場合、ブールにキャスト


11

次の制約を整数線形プログラムで表現したいと思います。

y={0if x=01if x0.

私はすでに整数変数を持っていますが、ことが約束されています。上記の制約を整数線形計画法ソルバーでの使用に適した形式でどのように表現できますか?- 100 X 100x,y100x100

これはおそらくいくつかの追加の変数を導入する必要があります。追加する必要がある新しい変数と制約は何ですか?1つの新しい変数できれいに実行できますか?二?

同様に、これは制約を強制する方法を尋ねています

y0 if and only if x0.

を暗示する制約がすでにある状況では および。0 Y 1|x|1000y1


(私の目標は、/cs//a/12118/755のエラーを修正することです。)


1
何を試しましたか?パターンが表示されるかどうかを確認するために、いくつかの例を試してみましたか?はいの場合、推測を試み、それを証明してみましたか?
Brika

1
へえ!私が見るあなたがそこに何をしたか、@Brikaを。私が試したものを見ている好奇心あなたがいる場合、参照ここだけでなく、それが実際に間違っていた理由のこの説明。私の次の試みを見たい場合は、私の答えをください。私の古い質問を読んでいただきありがとうございます。それらが将来のために改善される可能性がある場合は、皆さんからの提案をお待ちしています。
DW

それはとても良いことです。;)
Brika

回答:


4

私は1つの余分バイナリ変数でそれを行うことができると思いδ{0,1}

100yx100y
0.001y100.001δx0.001y+100.001(1δ)

更新

これは、x連続変数であることを前提としています。我々は制限する場合xする整数値、第2の制約は、に簡略化することができる:

y101δxy+101(1δ)


1
小さなプログラムで徹底的にテストして、これが正しいことを確認しました。解決策をありがとう!
DW

@ErwinKalvelagen、より一般的な場合、たとえば、y = {a:x> 0、b:x <0}の場合、バイナリ変数デルタを使用してロジックを説明してください。
Nick

1
@Nickバイナリ変数は、「OR」構造のモデル化に使用されます。質問の回答については、こちらをご覧ください。
Erwin Kalvelagen、2016年

@ErwinKalvelagen、素晴らしい答え、私はあなたのアプローチを私の質問cs.stackexchange.com/questions/64794/…に適用しようとしました
Nick

1
@GonzaloSolera実際、私は間違っていましたは連続変数であると想定しました。実際、xが整数値の場合、提案どおりに0.001から1に移動できます。バツバツ
Erwin Kalvelagen

1

以下は決して美しくはありませんが、動作します。してみましょうN = 100、問題の特定のケースに。次に、次の制約があります。0バツNN=100

  1. 0z1z2z1
  2. バツN1z10
  3. バツNz11
  4. バツN1z20
  5. バツNz21
  6. z1+z21z
  7. zz1
  8. zz2

直感は以下の通りです。。これは制約2および3でエンコードされます。同様に、制約4および5は z 2 = 1をエンコードしますz1=1バツ0。最後の3つの制約は、発現 Z = Z 1Z 2z2=1バツ0z=z1z2


これにはバグがあるようです。あなたはを意図していると思います。ただし、x = 100の場合はまだ間違っています。この場合はy = 1z = 0)を強制したいのですが、方程式x N zとして、すべての方程式を満たすz 1z 2の選択肢はありません。2- 1が必要X < Nを(すなわち、X 99)。したがって、このILPは次の場合に誤った結果を返します。z=1yバツ=100y=1z=0z1z2バツNz21バツ<Nバツ99 y = 1が必要ですが、 y = 0です。他にも所望の範囲のX質問に記載されているようである - N X Nではなく 0 X Nバツ=99y=1y=0バツNバツN0バツN
DW

1

tあなたt=1バツ0あなた=1バツ0y=¬tあなた

0tあなたy11+バツ101t101+バツ1バツ101あなた101バツt+あなた11y1yt1yあなた

バツ99バツ100バツ99

@TLW、キャッチしてくれてありがとう!回答を編集してバグを修正しました。小さなプログラムで徹底的にテストしましたが、今は正しいはずです。
DW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.