指派問題會將 n 位工作者與 n 項任務配對,以最小化所選成本的總和,而匈牙利演算法能在 O(n³) 時間內精確求解任何有限值的方陣。在 Excel 中,通常使用 Solver 增益集來處理,為每個儲存格設定一個二元決策變數,並以乘積和為目標函式,而行列限制條件則強制執行一對一規則。一個名為 Assignment Problem Solver 的專用網頁工具會在你的瀏覽器中執行相同的匈牙利法,因此你只需貼上帶有標籤的方陣、取得最小成本配對,然後複製結果——無需啟用增益集、無需串接公式、無需反覆試錯。當矩陣為 10 乘 10 時,可能的配對超過 360 萬個,逐一暴力檢查是唯一明顯能確保找到最小值的方法——這也是為什麼能在不到一秒內完成同樣工作的演算法會成為此任務的標準工具。其結果是精確的,非近似值,並會針對你輸入的任何成本回傳已證明的最小值。

how to solve assignment problem in excel
如何用 Excel 解決指派問題

指派問題究竟是什麼

指派問題是最低成本雙邊匹配問題最簡潔的特殊情況。你有兩組數量相等的集合——可稱為工作者與任務、機器與工作,或代理人與地點——以及每種可能配對的已知數值成本。目標是從每個欄中恰好選一個儲存格、從每個列中也恰好選一個儲存格,使所選儲存格的總和盡可能小。

因為每個儲存格只有選中或不選兩種狀態,n 乘 n 矩陣的所有有效指派的搜尋空間為 n!,其成長速度極快。10 乘 10 的問題有超過 360 萬種排列;20 乘 20 的問題則約有 2.4 × 10¹⁸ 種。匈牙利演算法(又稱 Kuhn–Munkres 法)由 Harold Kuhn 於 1955 年設計,可在多項式時間內精確求解,而生產環境求解器所使用的原始對偶版本則可在 O(n³) 時間內回傳最佳解。根據 Google 的 OR-Tools 指派問題文件,相同的數學模型構成現代大多數指派問題與最低成本流程式碼的基礎,且最佳值對於你所輸入的數字是可證明地最小。

此模型完全由一個方型成本矩陣描述:列代表工作者,欄代表任務,每個儲存格有一個成本。標準形式中沒有「禁止」或「缺失」的配對——假設每位工作者皆有能力執行每項任務,成本是配對之間唯一的差異。這正是 Excel Solver 與瀏覽器工具所實作的模型。

如何用 Excel 解決指派問題

標準的 Excel 工作流程使用 Solver 增益集,其透過「檔案 → 選項 → 增益集 → 管理:Excel 增益集 → Solver 增益集」來啟用。載入 Solver 後,你在工作表上設定一個小型線性規劃,讓 Solver 為你找出二元決策。任何指派規模的步驟都相同;只有儲存格數量會隨之縮放。

先排好成本矩陣。在某個範圍的最上方一列放上唯一的工作任務名稱,最左邊一欄放上唯一的工作者名稱,並在每個儲存格中填入一個有限的數值成本。矩陣必須為方陣:三個工作者對三項任務,或四對四,絕不能三對四。在相鄰的範圍中,建立一個相同形狀的決策矩陣,並將每個儲存格填入 0。這些儲存格就是你的變數,Solver 會在工作者被指派到該任務的位置將其翻為 1。

新增一個總成本儲存格,對成本矩陣與決策矩陣使用 SUMPRODUCT。這就是 Solver 要最小化的儲存格。接著加入兩組限制條件。對每個工作者列,該列決策儲存格的總和必須剛好等於 1——每位工作者執行一項任務。對每個任務欄,該欄決策儲存格的總和必須剛好等於 1——每項任務由一位工作者執行。決策儲存格本身必須為二元,只能是 0 或 1。選擇 Simplex LP 作為求解方法,然後按「求解」。

若成本矩陣格式正確,Solver 會回傳一個 0/1 模式,其中每個列與欄剛好有一個 1,總成本儲存格會顯示最小值。工作者 i 的配對是第 i 列中為 1 的那一欄。以一個 3 乘 3 的範例,成本矩陣為:

,T1,T2,T3W1,9,2,7W2,6,4,3W3,5,8,1

Solver 選擇 W1→T2(成本 2)、W2→T1(成本 6)、W3→T3(成本 1),最小總和為 2 + 6 + 1 = 9。這個單一計算 2 + 6 + 1 = 9 即為模型的完整輸出,也是你複製到報告中的答案。

更快的瀏覽器替代方案

為一次性的指派設定 Solver 需要小心處理公式、二元限制以及行列的等式條件。對於單一作業問題或快速的草稿排程,在 Solver 上串接設定的時間往往比匈牙利法本身執行所需的時間還長。Assignment Problem Solver 跳過了所有這些步驟:你將帶有標籤的方陣貼入單一文字框中,確定性的匈牙利求解器會在你的瀏覽器中本地執行,並以可複製的文字形式回傳配對、個別成本與最小總和。

網頁工具在底層使用相同的 Kuhn–Munkres 法,因此其回傳的最佳解對你所輸入的矩陣而言是精確的最小值,非近似值。八個獨立的測試矩陣已透過列舉所有排列進行驗證,包括 1 乘 1 與 2 乘 2 的邊界、一個總成本為 5 的標準 3 乘 3 案例、完全平局,以及一個循環式的 4 乘 4 零成本組態。若結果不符合暴力法所得的最小值,測試即視為失敗。

逐步使用 Assignment Problem Solver

  1. 撰寫一個以逗號開頭的標題列。第一個欄位為空,接著列出每個唯一的工作任務名稱。以三項任務的範例來說,第一行為 ,Task A,Task B,Task C
  2. 每個工作者新增一行。每個後續行以唯一的工作者名稱開頭,後接每項任務剛好一個有限的數值成本。工作者數量與任務數量必須一致,且每個儲存格都必須填寫。
  3. 執行匈牙利求解器。提交矩陣。求解器會驗證其是否為方陣、所有名稱是否唯一,以及每個成本是否為有限數;格式錯誤的輸入會以可見的方式被拒絕。
  4. 檢查每個配對及其成本慣例。結果會列出每位工作者的一項任務、每個配對的個別成本,以及最小總和。成本可為正、零或負,但求解器一律最小化數值總和——若你的資料代表利潤或分數,請刻意進行轉換,不要假設「最佳」代表最大。
  5. 複製精確的最小成本指派。完整結果以純文字形式提供,因此你可以將其貼入 Excel、報告或排程表中,無需手動重新輸入配對。

以白話解釋匈牙利演算法

此演算法為每個列與每個欄維護兩個稱為位能的數值,並透過選擇最便宜的可用擴充路徑反覆擴大匹配。每一步,演算法檢查縮減成本(每個儲存格成本減去列位能再減去欄位能),並調整位能,使一條新的零縮減成本邊得以使用。當每個列皆被匹配時,演算法停止,此時的列與欄位能可證明結果為最佳——沒有其他配對能產生更小的總和。

精確的機制並非使用此工具所必需,但其保證正是此方法的價值所在:立方時間的邊界意味著即使是 20 乘 20 的問題也能在不到一秒的時間內解決,而自然的列與欄順序可確定性地解決平局,因此相同的矩陣總會產生相同的配對。如需更詳盡的方法逐步說明,請參閱指南 以匈牙利法解決指派問題,其中以逐行縮減的方式介紹相同的模型。

成本矩陣模型的限制

矩陣模型涵蓋一個完整的加權雙邊圖,這僅僅是現實排程中的一個片段。Assignment Problem Solver 無法處理禁止配對(空白儲存格)、超過一項任務的工作者容量、技能門檻、團隊相依性、公平性、行進時間變動、先後順序、部分可用性或不確定性,除非這些影響已正確地以數字表示。負成本是被允許的,但應真正代表在最小化慣例下的好處——貼上原始分數並假設「最佳」代表最大,將會得到錯誤的答案。

若你的問題包含上述任何現實的複雜性,正確的做法是使用經過驗證的混合整數、限制規劃或最低成本流求解器,以明確表示所有規則,並在做出任何人事決策前對最終指派進行獨立的人工審查。請將矩陣結果視為透明的數學基準,而非自動產生的人事決策——真實的人力配置還涉及法律、倫理與人文層面的考量,這些是任何成本矩陣都無法涵蓋的。

Excel Solver 與專用網頁工具的比較

面向Excel Solver 工作流程Assignment Problem Solver(網頁)
設定時間手動:建立成本矩陣、決策矩陣、SUMPRODUCT、兩組限制條件、二元限制貼上帶有標籤的方陣;無需串接公式
是否需要增益集是——必須在 Excel 選項中啟用 Solver否——在瀏覽器中本地執行
演算法以 Simplex LP 求解二元 0/1 模型確定性匈牙利法(Kuhn–Munkres)
最大規模受你所使用版本中 Solver 的變數與限制數量限制目前瀏覽器版本支援 20 乘 20
輸出留在工作表上的 0/1 決策矩陣配對列表、每組配對成本、最小總和,可複製為文字
驗證由使用者自行檢查輸入形狀與限制條件以可見方式拒絕格式錯誤或非方陣、重複名稱、空白、NaN、無限成本

對於作業、想驗證的手動匈牙利計算,或小型的機器對工作配置,網頁工具是最短的路徑。對於更大或更受限的排程,正確的做法是使用經過驗證的混合整數或限制規劃求解器,以明確表示你的所有規則,而不是單一的成本矩陣。