論理AND:線形制約を使用して、、、、どこ整数になるように制約されます。これにより、目的の関係が強制されます。(ちょうど線形不等式でそれを行うことができることはかなりきちんとしている?)y1≥x1+x2−1y1≤x1y1≤x20≤y1≤1y1
論理OR:線形制約を使用し、、、、どこ整数になるように制約されます。y2≤x1+x2y2≥x1y2≥x20≤y2≤1y2
論理否定:使用します。y3=1−x1
論理的な意味:(つまり、)を表現するために、論理ORの構成を適合させることができます。具体的には、線形制約使用、、、、整数であるように制約されます。y4=(x1⇒x2)y4=¬x1∨x2y4≤1−x1+x2y4≥1−x1y4≥x20≤y4≤1y4
強制的な論理的含意:を保持する必要があることを表すには、単純に線形制約使用します(とが既にブール値に制約されていると仮定します)。x1⇒x2x1≤x2x1x2
XOR:(と排他的論理和)を表すには、線形不等式、、、、、整数であるように制約されます。y5=x1⊕x2x1x2y5≤x1+x2y5≥x1−x2y5≥x2−x1y5≤2−x1−x20≤y5≤1y5
また、ボーナスとして、ゼロから1(ブール)変数と整数変数の混合を含む問題を定式化するときに役立つもう1つのテクニックを次に示します。
ブール(バージョン1)にキャスト:あなたは、整数の変数があるとし、あなたが定義したいなるようにの場合およびの場合。であることがさらにわかっている場合、線形不等式、、ます。ただし、これは上限と下限がわかっている場合にのみ機能します。または、を知っている場合 定数に対して(つまり、)、ここで説明する方法を使用できますxyy=1x≠0y=0x=00≤x≤U0≤y≤1y≤xx≤Uyx|x|≤U−U≤x≤UU。これは、上限がわかっている場合にのみ適用されます。|x|
ブール型へのキャスト(バージョン2):同じ目標を考えてみましょうが、上限はわかりません。ただし、あることがわかっていると仮定し。この制約を線形システムで表現する方法を次に示します。最初に、新しい整数変数導入します。不等式、、を追加します。次に、を最小化するように目的関数を選択します。これは、目的関数がまだない場合にのみ機能します。あなたが持っている場合負でない整数の変数は、あなたは、ブール値にそれらのすべてをキャストしたいので、の場合xx≥0t0≤y≤1y≤xt=x−ytnx1,…,xnyi=1xi≥1 and if場合、変数を不等式、、で、目的関数を定義できますを最小化します。繰り返しますが、これは目的関数を定義するのに他に必要なことはありません(変数の一部の関数を最小化/最大化しようとせずに、結果のILPの実行可能性を確認することを計画していた場合)。yi=0xi=0nt1,…,tn0≤yi≤1yi≤xiti=xi−yit1+⋯+tn
優れた実践上の問題と実際の例については、整数線形プログラムの定式化:不正なギャラリーをお勧めします。