{{翻訳告知|en|Integer programming|…}}
整数計画問題(せいすうけいかくもんだい)は、線型計画問題において、解ベクトル x {\displaystyle x} の各要素を整数に限定した問題をいう。これはNP困難な問題に該当する。線型計画問題には多項式時間アルゴリズムが存在するのに対し、整数計画問題ではまだ見つかっていない。
解ベクトル x {\displaystyle x} の各要素を 0 {\displaystyle 0} または 1 {\displaystyle 1} のみに限定したものを、特に0-1整数計画問題という。
整数計画問題では、定式化を標準形(standard form)および基準形(canonical form)に従った形式で表される。基準形の整数計画問題は次のように書き表される(このときベクトル x {\displaystyle \mathbf {x} } について求める問題である)[1]:
また標準形の整数計画問題は次のように書き表される:
ここで A ∈ R m × n {\displaystyle A\in \mathbb {R} ^{m\times n}} は行列、 b ∈ R m , c ∈ R n {\displaystyle \mathbf {b} \in \mathbb {R} ^{m},\mathbf {c} \in \mathbb {R} ^{n}} は列ベクトルである。線形計画問題と同様に、不等式の制約式に対して非負の制約をもつスラック変数(英語版) s ≥ 0 {\displaystyle \mathbf {s} \geq \mathbf {0} } を不等式制約式の小さな項に対して導入することで等式の制約式に書き換えられ、 x ≥ 0 {\displaystyle \mathbf {x} \geq \mathbf {0} } という非負の条件を持たない自由変数に対しては、非負の変数 x + ≥ 0 {\displaystyle \mathbf {x^{+}} \geq \mathbf {0} } , x − ≥ 0 {\displaystyle \mathbf {x^{-}} \geq \mathbf {0} } を用いて、 x = x + − x − {\displaystyle \mathbf {x} {=}\mathbf {x^{+}} -\mathbf {x^{-}} } と書き直すことで、整数計画問題を標準形に表すことができる。
右の図に対する整数計画問題は以下の通りである:
ここで赤点は実行可能な整数点を表しており、赤の破線は実行可能な点をすべて含む最小の多面体(凸包)を表している。青い線と座標軸によって定義されるのが、制約条件から整数制約を除いた線形計画(LP)緩和の多面体を表している。最適化の目標としては、黒の破線が多面体に接した状態を維持したまま可能な限り上方に移動させることである。整数問題の最適解は ( 1 , 2 ) {\displaystyle (1,2)} , ( 2 , 2 ) {\displaystyle (2,2)} で、目的関数値が 2 {\displaystyle 2} である。一方、変数の整数条件を取り除いた線形計画緩和の最適解は ( 1.8 , 2.8 ) {\displaystyle (1.8,2.8)} で、目的関数値は 2.8 {\displaystyle 2.8} である。この線形計画緩和の最適解に対して小数部分を最も近い整数に丸めると、 ( 2 , 3 ) {\displaystyle (2,3)} となり、整数計画問題の実行可能解ではない。
混合整数線形計画問題(Mixed-integer linear programming: MILP)とは、変数の一部分に対して整数条件が課された問題である。
0-1整数計画問題(Zero–one linear programming、binary integer programming)とは、変数の取り得る値が 0 または 1 に限定された問題である。整数変数が有界の場合はバイナリ変数(英語版)を用いて表現することができる[2][3]。具体例として、整数変数が 0 ≤ x ≤ U {\displaystyle 0\leq x\leq U} の範囲であるとき、変数は ⌊ log 2 U ⌋ + 1 {\displaystyle \lfloor \log _{2}U\rfloor +1} 個のバイナリ変数を用いて:
もしくは、 U {\displaystyle U} 個のバイナリ変数を用いて:
と書き換えられる。