一個線上裝箱計算機會把每個物品指派到數個等容量箱子中的恰好一個、顯示箱子數量,並回報每個箱子的已用空間——這一切都只需要一個容量欄位和一串物品尺寸清單。裝箱計算機直接在您的瀏覽器中執行 First Fit Decreasing (FFD) 啟發式演算法,因此沒有任何檔案會離開您的機器,而且您可以重新貼上同一份清單,每次都得到相同的答案。尺寸是抽象的純量——它們描述任何一維的資源,您可以將其加總並與一個固定上限比較,例如以公斤為單位的重量、以 gigabyte 為單位的記憶體、以分鐘為單位的工作量,或是以公尺為單位的線性長度。由於這個啟發式演算法是確定性的,以相同容量和相同物品清單執行的兩次執行會產生相同的指派結果——這正是讓這個工具適用於工作表、講座和可稽核草稿,而不僅僅是作為一次性答案的原因。每次執行結束時,結果面板會列出每個已開啟的箱子、其中的物品、已用與剩餘容量、整體利用率,以及一個以尺寸為基礎的下界,讓您能一眼判斷這個計畫。

bin packing online calculator
線上裝箱計算機:在您的瀏覽器中規劃 FFD 計畫

First Fit Decreasing 啟發式演算法如何決定每個物品要放到哪個箱子

FFD 是一道單遍的貪婪程序,數十年來一直被用於排程與作業研究。Google OR-Tools 對於裝箱問題的文件描述了其底層限制:每個物品必須整體指派到恰好一個箱子、任何箱子不得超出容量、目標是使用盡可能少的箱子。裝箱計算機並未精確求出那個最小值——裝箱問題在計算上很困難——但它會以三個穩定且易於在螢幕上稽核的步驟套用 FFD。

  1. 將物品依尺寸由大到小排序。當兩個物品相等時,保留它們原本的輸入順序。
  2. 走訪排序後的清單。對於每個物品,從最早到最晚依序查看每個已開啟的箱子,並將物品放入第一個剩餘容量足夠的箱子。
  3. 如果沒有任何已開啟的箱子能容納該物品,就開啟一個新箱子、將物品放入,然後繼續。

「第一個裝得下的已開啟箱子」這條規則正是讓計畫具有可重現性的原因:即使您對調兩個相等物品的輸入順序,仍會得到相同的計畫;而如果同事重新輸入相同的數字,他們也會看到完全相同的指派結果。FFD 不會回溯、不會合併箱子、不會分割物品,也不會為了追求更少的箱子數而嘗試其他排序。這種取捨——以速度和可預測性換取最佳化的保證——正是每個結果面板也都顯示下界的原因。

在您的瀏覽器中執行一個裝箱計畫

介面刻意做得精簡:一個容量值、一份物品清單、一個輸出。若要為課堂練習、批次草稿或作業研究示範取得完整的計畫,請依下列步驟操作:

  1. 輸入每個箱子共用的容量。可使用任意正的純量;單位由您自行決定,只要下方所有物品都使用相同的單位即可。
  2. 每行列出一個物品。一個單純的數字(例如 7)會成為自動標記的物品;若使用自訂標記加上尺寸,則以一個逗號分隔,例如 Server-A, 4。
  3. 按下執行控制項。工具會驗證每個尺寸都大於零且不超過箱子容量,接著進行排序、配置並回報結果。
  4. 在結果面板中檢視每個已開啟的箱子:被指派給它的物品、它們的尺寸總和、剩餘容量,以及跨所有箱子的整體利用率。
  5. 將箱子數量與所顯示的下界進行比較,若數字看來合理,即可將計畫複製到工作表、裝載草稿或作業講義中。

清單上限為 1,000 個物品,負數或超出容量的物品會在開始配置前就回傳清楚的錯誤訊息,因此失敗的執行絕不會產生半正確的計畫。自訂標記必須恰好使用一個逗號作為分隔符,這能讓匯入格式毫不含糊,並避免將小數點誤判為標記。

如何解讀箱子數量、利用率與下界

輸出面板會回報四個量,它們合起來描述了這個計畫的效率,以及它在理論上離最佳解還有多近。箱子數量就是 FFD 必須開啟的箱子數目。每個箱子的已用容量是指派給該箱子之物品的尺寸總和,而每個箱子的剩餘容量則是其內部未使用的空間。整體利用率是以所有物品的總尺寸除以所有已開啟箱子的總容量,因此利用率 92% 的計畫明顯比 60% 的更為精實。

下界是任何裝箱方式在相同輸入下所能達到的最小箱子數,計算方式是物品總尺寸除以容量後再取天花板值(無條件進位)。若您的物品總和為 47、容量為 10,則下界為 ceil(47 / 10) = 5,因此無論是 FFD 或其他任何方法,都無法以少於五個箱子達成。當 FFD 等於下界時,該計畫與理論最小值一致,但單純等於下界本身並不能證明最佳性,因為個別物品的組合也會影響可行性;當 FFD 超過下界時,您只能確定這個啟發式演算法留下了改進空間,卻無法在沒有真正最佳化工具的情況下知道具體差多少。

若要親手追蹤一個小型實例,可設定容量為 10,物品為 8, 6, 5, 5, 4, 3。FFD 排序後為 8, 6, 5, 5, 4, 3。箱子 1 放入 8,接著 6 放不進去(因為 8 + 6 = 14,超過 10),所以開啟箱子 2 放入 6。下一個 5 既放不進箱子 1(只剩 2 的空間),也放不進箱子 2(只剩 4 的空間),所以開啟箱子 3 放入 5,而再下一個 5 正好填滿箱子 3(5 + 5 = 10)。4 放不進箱子 1(只剩 2 的空間),但放得進箱子 2(6 + 4 = 10)。3 會讓箱子 1 溢出(8 + 3 = 11),箱子 2 已滿、箱子 3 也已滿,因此開啟箱子 4 放入 3。如此得到四個箱子,總尺寸為 31,下界為 ceil(31 / 10) = 4,因此 FFD 在這份清單上恰好等於下界。

線上計算機何時是合適的工具——何時又不然

這個啟發式演算法回答的是一道刻意精簡的問題:給定每個物品的一維尺寸與一個固定容量,在 FFD 之下哪個箱子應該裝哪個物品?這道問題涵蓋了相當廣泛的實際規劃工作,下表整理了這個工具適用與不適用的情境。

情境裝箱計算機是否合適原因
將工作量拆成多個等時間預算的批次是每個任務是一個純量(以分鐘計),與一個固定的批次預算進行比較。
為固定容器草擬記憶體配置組合是每個配置是一個純量尺寸,對應一個固定上限,且無方向性考量。
作業研究作業要求 FFD 輸出是本演算法即為作業所指定的確定性 FFD 啟發式演算法。
將實際箱子裝入實際卡車否此模型忽略尺寸、方向、平衡、堆疊強度、軸重限制與安全法規。
將棧板堆疊於一個 3D 容器內否體積、底面積、旋轉與堆疊規則都不屬於單一純量模型。
求解 0/1 背包問題(選擇子集,而非裝入所有物品)否本工具會把每個物品指派到恰好一個箱子;它不會為了最大化價值而省略物品。

裝箱計算機也不會在箱子之間分割物品、跨箱子合併容量、為後續物品預留空間,或為任何物品附加價值或優先順序。這些是不同的問題——裁料、背包、多重背包、排程——各自有不同的目標與不同的演算法,因此當需求改變時,請改用對應的求解器。

用於規劃與練習的可重現執行

確定性是這個啟發式演算法對於需要在紙面上為計畫辯護的人來說最實用的特性。兩位工程師在不同時間、不同機器上,使用相同容量與相同物品清單執行時,將會看到逐箱相同的指派、相同的剩餘容量欄位,以及相同的利用率。這讓該計畫可以安心地貼入變更單、講座投影片或稽核紀錄中。開發過程中已人工核對了八個案例,涵蓋完全配對、重複值、分數,以及物品排序會影響答案的安排;而此工具會對每個回傳的箱子同時斷言物品守恆與容量合規。

對於物流、製造、雲端容量、危險品裝載或任何安全關鍵性的配置,請將 FFD 計畫視為草稿,並以該領域專用的求解器重新驗證最終指派結果。Lehigh University 對裁料問題的分析是一個有用的提醒:一維模型位於一族更受限變體的最底層,每一個變體都有各自的軟體與各自的安全規則。線上計算機能給您一份快速、透明的 FFD 計畫;其餘的驗證則是您的責任。

若您正在權衡選項,PC 用裁切清單最佳化工具:在您的瀏覽器中規劃裁切對此有詳細說明。

若您正在權衡選項,如何為裝箱測量包裝箱對此有詳細說明。