整数計画問題(せいすうけいかくもんだい)は、線型計画問題において、解ベクトル の各要素を整数に限定した問題をいう。これはNP困難な問題に該当する。線型計画問題には多項式時間アルゴリズムが存在するのに対し、整数計画問題ではまだ見つかっていない。

解ベクトル の各要素を または のみに限定したものを、特に0-1整数計画問題という。

整数計画問題の基準形と標準形

編集

整数計画問題では、定式化を標準形(standard form)および基準形(canonical form)に従った形式で表される。基準形の整数計画問題は次のように書き表される(このときベクトル について求める問題である)[1]:

また標準形の整数計画問題は次のように書き表される:

ここで は行列、 は列ベクトルである。線形計画問題と同様に、不等式の制約式に対して非負の制約をもつスラック変数英語版 を不等式制約式の小さな項に対して導入することで等式の制約式に書き換えられ、 という非負の条件を持たない自由変数に対しては、非負の変数 , を用いて、 と書き直すことで、整数計画問題を標準形に表すことができる。

編集
IPとLP緩和後の多面体

右の図に対する整数計画問題は以下の通りである:

ここで赤点は実行可能な整数点を表しており、赤の破線は実行可能な点をすべて含む最小の多面体(凸包)を表している。青い線と座標軸によって定義されるのが、制約条件から整数制約を除いた線形計画(LP)緩和の多面体を表している。最適化の目標としては、黒の破線が多面体に接した状態を維持したまま可能な限り上方に移動させることである。整数問題の最適解は , で、目的関数値が である。一方、変数の整数条件を取り除いた線形計画緩和の最適解は で、目的関数値は である。この線形計画緩和の最適解に対して小数部分を最も近い整数に丸めると、 となり、整数計画問題の実行可能解ではない。

類似の問題

編集

混合整数線形計画問題(Mixed-integer linear programming: MILP)とは、変数の一部分に対して整数条件が課された問題である。

0-1整数計画問題(Zero–one linear programming、binary integer programming)とは、変数の取り得る値が 0 または 1 に限定された問題である。整数変数が有界の場合はバイナリ変数英語版を用いて表現することができる[2][3]。具体例として、整数変数が の範囲であるとき、変数は 個のバイナリ変数を用いて:

もしくは、 個のバイナリ変数を用いて:

もしくは、 個のバイナリ変数を用いて:

と書き換えられる。

整数計画問題として解かれる問題の例

編集

脚注

編集
  1. ^ Papadimitriou, C. H.; Steiglitz, K. (1998). Combinatorial optimization: algorithms and complexity. Mineola, NY: Dover. ISBN 0486402584 
  2. ^ Williams, H.P. (2009). Logic and integer programming. International Series in Operations Research & Management Science. 130. ISBN 978-0-387-92280-5 
  3. ^ 藤江哲也「整数計画法による定式化入門」『オペレーションズ・リサーチ : 経営の科学』第57巻第4号、日本オペレーションズ・リサーチ学会、2012年、190-197頁、CRID 1520290883136073600ISSN 0030-3674NAID 110009426124NCID AN00364999オリジナルの2025年3月18日時点におけるアーカイブ、2025年4月1日閲覧 

関連文献

編集
  • 今野浩:「整数計画法」,産業図書,1981.
  • 今野浩・鈴木久敏編:「整数計画と組合せ最適化」,日科技連,1982.
  • 久保幹雄,田村明久,松井知己(編):「応用数理計画ハンドブック」,朝倉書店,2002.

📚 Artikel Terkait di Wikipedia

Fortran

x(1:n)=r(1:n)*cos(a(1:n)) 選択的配列のアサインのためのwhere文。 integer :: a(10) real(8) :: b(10) a = f(x) where (a > 0) b = -1.0 elsewhere b = 1.0 end where

制御構造

with Ada.Integer Text IO; procedure Print_Squares is X : Integer; begin Read_Data : loop Ada.Integer Text IO.Get(X); exit Read_Data when X = 0; Ada.Text

Swift (プログラミング言語)

explicitDouble: Double = 70 // 70.0 /// 型が省略された場合は、型推論により初期値の型が適用される var implicitInteger = 70 // Int var implicitDouble = 70.0 // Double // let name:Type =

可変長配列

function read_and_process(n) result(o) integer,intent(in)::n real::o real,dimension(n)::vals integer::i do i = 1,n vals(i) = read_val() end do o = process(vals)

ボックス化

// Java 1.4 以前ではコンパイルエラー。 list.add(Integer.valueOf(5)); // Integer 型にボックス化してリストに追加する。 Integer iw = (Integer)list.get(0); // Object 型から Integer 型にダウンキャスト。

Haskell

以下の単純な例は関数型言語としての構文の実例にしばしば用いられるもので、Haskell で示された階乗関数である。 fac :: Integer -> Integer fac 0 = 1 fac n | n > 0 = n * fac (n-1) 階乗を単一の条件による終端を伴う再帰的関数として表現している。これは数学の教科書でみられる階乗の表現に似ている。Haskell

BASIC

Integer BASIC(英語版)が供給され(当初はデータレコーダのカセットテープの形で供給され、後にApple IIが発売されてからROM版も供給された)、翌1977年6月にはキットタイプではない完成品タイプのApple IIが発売となり、それにもやはりINTEGER

線形計画法

Polynomial Algorithms in Convex Programming, SIAM, Philadelphia, 1994. A. Schrijver: Theory of Linear and Integer Programming, John Wiley and Sons, New York