ファーストフィット減少 (FFD)は、ビンパッキングのアルゴリズムです。入力は、異なるサイズのアイテムのリストです。出力はパッキングです。パッキングとは、各ビンのアイテムのサイズの合計が最大で容量以下になるように、アイテムを固定容量のビンに分割することです。理想的には、ビンの数はできるだけ少なくしたいのですが、ビンの数を最小化することは NP 困難な問題であるため、近似的に最適なヒューリスティックを使用します。
説明
FFD アルゴリズムは次のように動作します。
- アイテムを最大から最小の順に並べます。
- 新しい空のビン(ビン #1)を開きます。
- 最大から最小までの各アイテムについて、アイテムが収まる
最初のビン(存在する場合)を見つけます。
- そのようなビンが見つかった場合は、そこに新しいアイテムを入れます。
- それ以外の場合は、新しい空のビンを開いて、そこに新しいアイテムを入れます。
簡単に言うと、FFD はアイテムをサイズの降順で並べ、次にファーストフィット ビン パッキングを呼び出します。
FFD アルゴリズムの同等の説明は次のとおりです。
- アイテムを最大から最小の順に並べます。
- 残りアイテムは:
- 新しい空のビンを開きます。
- 各項目について、最大から最小まで:
- 現在のビンに収まる場合は、挿入します。
標準的な説明では、アイテムを 1 回ループしますが、多くのビンを開いたままにします。同等の説明では、アイテムを何度もループしますが、そのたびに 1 つのビンのみを開いたままにします。
パフォーマンス分析
FFD のパフォーマンスはいくつかのステップで分析されました。以下は、入力セットSに対して FFD が使用するビンの数とビン容量 C を 示しています。
- 1973年、DSジョンソンは博士論文[1]の中で、任意のインスタンスSと容量Cについて証明しました。
- 1985年にBSバッカー[2]はやや単純な証明を与え、加法定数が3以下であることを示した。
- Yue Minyi [3]は1991年にそれを証明し、1997年にLi Rongheng [4]と共同でこの分析を改良しました。
- 2007年にGyörgy Dósa [5]は厳密な境界を証明し、その例を示した。
最悪の例
Dósa によって示された下限の例は次のとおりです。2 つのビン構成を検討します。
- ;
- 。
最適解に の コピーが 4 つ、 のコピーが 2 つある場合、FFD は次のビンを計算します。
- 4つのビン構成、
- 構成付きビン1個、
- 構成付きビン1個、
- 構成付きビン1個、
- 1 構成付きの最終ビン1つ、
つまり、合計 8 つのビンがありますが、最適値には 6 つのビンしかありません。したがって、上限は厳密です。
この例は、のすべてのサイズに拡張できます。[5]最適な構成では、9 k +6 個のビンがあります。6 k +4 はタイプ B 1で、3 k +2 はタイプ B 2です。しかし、FFD では少なくとも 11 k +8 個のビンが必要であり、これは です。
分割可能なアイテムサイズのパフォーマンス
ビンパッキングの重要な特殊なケースは、アイテムのサイズが割り切れるシーケンス(因数分解とも呼ばれる)を形成する場合です。割り切れるアイテムサイズの特殊なケースは、アイテムのサイズがすべて2の累乗であるコンピュータシステムのメモリ割り当てで発生します。この場合、FFDは常に最適なパッキングを見つけます。[6] : Thm.2
単調性特性
直感に反して、はCの単調関数ではありません。[7] :図4 同様に、はS内のアイテムのサイズの単調関数ではありません。アイテムのサイズが縮小しても、ビンの数が増加する可能性があります。
しかし、FFDアルゴリズムには「漸近単調性」という特性があり、次のように定義される。[7] : Lem.2.1
- あらゆるインスタンスSと整数mに対して、MinCap( S,m )を最小の容量Cとし、
- すべての整数mについて、 MinRatio( m ) を、すべての入力セットSについて、となる数r ≥1 の最小値とします。これは、FFD が最適なビン数を達成できるようにビンを「膨張」させる必要がある量です。
- すると、すべての入力Sとすべてのr ≥ MinRatio( m )に対して、となります。これは特に、上記の定義の最小値を最小値に置き換えることができることを示しています。
例
たとえば、入力が次のとおりであるとします。
44、24、24、22、21、17、8、8、6、6。
容量 60 の FFD には 3 つのビンがパックされています。
- 44、8、8;
- 24、24、6、6;
- 22、21、17。
しかし、容量が 61 の FFD には 4 つのビンがパックされています。
- 44、17;
- 24、24、8;
- 22、21、8、6;
- 6.
これは、容量が 61 であるため、17 が最初のビンに収まり、次の 8、8 への道を塞ぐためです。
別の例として、[8] : 例5.1 入力が51、28、28、28、27、25、12、12、10、10、10、10、10、10、10、10、10であるとします。容量75の場合、FFDは4つのビンをパックします。
- 51、12、12
- 28、28、10
- 28、27、10、10
- 25、10、10、10、10、10、10
しかし、容量が 76 の場合、5 つのビンが必要です。
- 51、25
- 28、28、12
- 28、27、12
- 10、10、10、10、10、10、10、10
- 10
容量が 60 である上記の例を考えてみましょう。17 が 16 になると、結果のパッキングは次のようになります。
- 44、16;
- 24、24、8;
- 22、21、8、6;
- 6.
修正されたファーストフィット減少
修正ファーストフィット減少法(MFFD)[9]は、 FFDを改良して、アイテムをサイズ別に大、中、小、極小の4つのサイズクラスに分類します。これは、それぞれ、ビンの半分より大きいアイテム、ビンの1/2より大きいアイテム、ビンの1/3より大きいアイテム、ビンの1/6より大きいアイテム、ビンの1/2より小さいアイテムに対応します。その後、5つのフェーズに進みます。
- 大きなアイテムごとに、最大から最小の順にビンを割り当てます。
- ビンを順に進み、各ビンで、残っている中サイズのアイテムのうち最小のものが収まらない場合は、このビンをスキップします。収まる場合は、収まる最大の中サイズのアイテムを配置します。
- 中サイズのアイテムが入っていないビンを逆方向に進めます。各ビンについて、残っている最小の 2 つの小さなアイテムが収まらない場合は、このビンをスキップします。それ以外の場合は、収まる最小の残りの小さなアイテムと最大の残りの小さなアイテムを配置します。
- すべてのビンを順に進み、どのサイズ クラスでも残っている最小のアイテムが収まらない場合は、このビンをスキップします。それ以外の場合は、収まる最大のアイテムをこのビンに置きます。
- FFD を使用して、残りのアイテムを新しいビンにパックします。
このアルゴリズムは1985年にジョンソンとガリー[9]によって初めて研究され、 であることが証明されました。この境界は1995年にユエとチャン[10]によって であることが証明され、改善されました。
その他のバリエーション
ベストフィット減少 (BFD)は FFD と非常に似ていますが、リストがソートされた後にベストフィットビンパッキングによって処理される点が異なります。その漸近近似比は FFD と同じで、11/9 です。
実装
- Python: prtpy パッケージには、first-fit declines の実装が含まれています。
参照
- マルチフィット アルゴリズム- FFD をサブルーチンとして使用する同一マシン スケジューリングのアルゴリズム。
参考文献
- ^ Johnson, David S (1973). 「近似最適ビンパッキングアルゴリズム」(PDF) .マサチューセッツ工科大学.
- ^ Baker, Brenda S. (1985). 「First-Fit Decreasing Bin-Packing Algorithm の新しい証明」J. Algorithms . 6 (1): 49–70. doi :10.1016/0196-6774(85)90018-5.
- ^ ユエ、ミンイ (1991 年 10 月)。 「FFD ビンパッキング アルゴリズムの不等式 FFD (L) ≤ 11/9 OPT (L) + 1、∀L の簡単な証明」。Acta Mathematicae Sinica。7 (4): 321–331。土井:10.1007/BF02009683。S2CID 189915733。
- ^ Li, Rongheng; Yue, Minyi (1997年8月). 「FFD(L) < -OPT(L) + 7/9の証明」.中国科学速報. 42 (15): 1262–1265. Bibcode :1997ChSBu..42.1262L. doi :10.1007/BF02882754. S2CID 93280100.
- ^ ab Dósa, György (2007)。「First Fit Decreasing Bin-Packing Algorithm の厳密な境界は FFD(I) ≤ 11/9OPT(I) + 6/9」。Chen Bo、Mike Paterson、Zhang Guochuan (編)。組合せ論、アルゴリズム、確率論および実験的方法論。第 1 回国際シンポジウム、ESCAPE 2007、中国杭州、2007 年 4 月 7 ~ 9 日。コンピュータ サイエンスの講義ノート。第 4614 巻。pp . 1 ~ 11。doi :10.1007/978-3-540-74450-4_1。ISBN 978-3-540-74449-8。
- ^ Coffman, E. G; Garey, M. R; Johnson, D. S (1987-12-01). 「分割可能なアイテムサイズによるビンパッキング」Journal of Complexity . 3 (4): 406–428. doi :10.1016/0885-064X(87)90009-4. ISSN 0885-064X.
- ^ ab Coffman, EG Jr.; Garey, MR; Johnson, DS (1978-02-01). 「マルチプロセッサ スケジューリングへの Bin-Packing の応用」. SIAM Journal on Computing . 7 (1): 1–17. doi :10.1137/0207001. ISSN 0097-5397.
- ^ Huang, Xin; Lu, Pinyan (2021-07-18). 「家事の最大シェア割り当てを近似するためのアルゴリズムフレームワーク」。第22回ACM経済・計算会議議事録。EC '21。ニューヨーク、ニューヨーク州、米国:Association for Computing Machinery。pp. 630–631。arXiv :1907.04505。doi :10.1145 /3465456.3467555。ISBN 978-1-4503-8554-1. S2CID 195874333。
- ^ ab Johnson, David S; Garey, Michael R (1985年10月). 「ビンパッキングのための7160定理」. Journal of Complexity . 1 (1): 65–106. doi : 10.1016/0885-064X(85)90022-6 .
- ^ Yue, Minyi; Zhang, Lei (1995 年 7 月). 「MFFD ビンパッキングアルゴリズムにおける不等式 MFFD(L) ≤ 71/60 OPT(L) + 1,L の簡単な証明」. Acta Mathematicae Applicatae Sinica . 11 (3): 318–330. doi :10.1007/BF02011198. S2CID 118263129.
