ビンパッキング問題

ビンパッキング問題（ビンパッキングもんだい）とは、離散数学の組合せ論の中のNP困難問題で、与えられた「荷物（重さや個数がついている）」をつめる「箱（ビンやコンテナなど）」の最小数を見つけるものである。問題を解くためにビン型（筒状型）の模型を使うのでこのように呼ばれる。

様々な解決方法（アルゴリズム）が考案されているが、あらゆる場合の箱の最小数を効率的に見つけることができるような万能なアルゴリズムはない（NP困難問題）。

 標準的な定義 
ゲイリー、ジョンソンによる著書『』で記述されているビンパッキング問題の定義を以下で説明する。

入力：有限個のアイテム集合 、およびアイテム  ごとのサイズ 、および容量  をもつビンおよび正の値をとる  が与えられる。

問い：集合  を素集合  に分割して、それぞれの部分集合  に含まれるアイテムのサイズの総和が  以下となるようなアイテム集合の分割は可能であるか?

ただし、文献によってビンパッキング問題は（同値ではない）別の表記によって定義される場合がある。例として、容量を  とし、各  に対してそのサイズを  と仮定することが挙げられる。また、研究分野ではビンパッキング問題の条件を満たす最小の  を求める最適化問題として扱うことが非常に多い。集合  に対する最適な  の値は 、自明な場合は  と表記されることが多い。

また、ビンパッキング問題は整数計画問題による定式化を与えることができる:

ただし、 はビン  を使用するならば、 となる変数であり、 はアイテム  をビン  に詰めるならば、 となる変数である。

 単純な例  
8台の新車をトラックで移動する。新車の重量はそれぞれ100キログラム単位で 33, 61, 58, 41, 50, 21, 60, 64 である。各トラックが、12,000 kg の重量まで運べるとき、全ての新車を一度に移動させるのに必要とされるトラックの最小数は、いくつであるか考える。まず、トラックを容量120のビンとし、新車は、そのビンに詰める荷物とする。具体的に調べることによって必要な箱の最小数を見つけることができるが、ここでは決められた手順（アルゴリズム）を使って解いていく。2つのアルゴリズムを紹介する。

アルゴリズムA
 荷物を空いている容量が最大のビンに詰める。
 どのビンにも荷物が入らないとき、新しいビンに詰める。
 ビン1  ビン2  ビン3  ビン4  ビン5
 |00|   |00|  |00|   |00|  |00|
 |61|   |41|  |21|   |00|  |00|
 |33|   |58|  |50|   |60|  |64|
この方法だと、ビンは5個（つまりトラック5台）必要となる。

アルゴリズムB
 荷物を空いている容量が最小のビンに詰める。
 どのビンにも荷物が入らないとき、新しいビンに詰める。
 ビン1  ビン2  ビン3  ビン4
 |00|   |21|  |00|   |00|
 |61|   |41|  |60|   |00|
 |33|   |58|  |50|   |64|
この方法だと、必要なビンは4個（トラック4台）である。

2つを比べるとAよりもBの方が良いアルゴリズムである。実際にはもっと優良なアルゴリズムがあるかもしれない。

 脚注 

 参考文献 


 関連項目 
 ナップサック問題
 部分和問題
 パッキング問題

 外部リンク 
 パッキング問題 - opt100
 ビンパッキング問題 — 数理最適化用語集

Category:最適化アルゴリズムとメソッド
Category:離散数学
Category:数学の問題
Category:数学に関する記事