ビンパッキング問題 (Bin Packing Problem)
ビンパッキング問題 (Bin Packing Problem) は、異なるサイズのアイテムをできるだけ少ないビン(容器)に詰める問題です。
ここでは、具体的な例を示し、Pythonで解く方法を紹介します。
具体例
問題設定:
- ビンの容量は$ 10 $とします。
- 詰めるアイテムのサイズは$ [2, 5, 4, 7, 1, 3, 8] $です。
目的:
- すべてのアイテムを収めるために必要なビンの数を最小化します。
Pythonでの解法
ビンパッキング問題を解くためのアルゴリズムの一つに、First-Fit Decreasing (FFD) 法があります。
この方法では、アイテムを大きい順に並べ替え、各アイテムを順番に最初に収まるビンに詰めていきます。
以下に、FFD法を用いてこの問題を解くPythonコードを示します。
1 | def first_fit_decreasing(bin_capacity, items): |
解説
アイテムのソート:
items = sorted(items, reverse=True)
でアイテムを大きい順にソートします。
ビンのリスト:
- 空のビンのリスト
bins
を作成します。
- 空のビンのリスト
アイテムの配置:
- 各アイテムについて、既存のビンに収められるかをチェックします。
- 既存のビンに収められる場合、そのビンにアイテムを追加します。
- 既存のビンに収められない場合、新しいビンを追加し、そのビンにアイテムを入れます。
結果の表示:
- 最終的に使用されたビンの数と各ビンの内容を表示します。
Pythonでの解法
このコードを実行すると、以下のような結果が得られます。
1 | Total bins used: 3 |
この結果は、3つのビンが使用され、それぞれのビンに収められたアイテムの合計サイズが表示されます。
具体的には、以下のようにアイテムが配置されています。
- ビン1: 8 + 2 = 10
- ビン2: 7 + 3 = 10
- ビン3: 5 + 4 + 1 = 10