分配问题求解器

使用匈牙利算法求解分配问题. 实现匈牙利算法(Kuhn-Munkres)来寻找工人和工作之间的最优一对一分配,在O(n3)时间复杂度内最小化或最大化总成本。. 分配问题是一个基本的组合优化问题:给定n个代理、n个任务和成本矩阵C,找到最小化总成本的一对一分配。出现在人力调度、车间分配和车辆路径中。

实现匈牙利算法(Kuhn-Munkres)来寻找工人和工作之间的最优一对一分配,在O(n3)时间复杂度内最小化或最大化总成本。

什么是分配问题?

分配问题是一个基本的组合优化问题:给定n个代理、n个任务和成本矩阵C,找到最小化总成本的一对一分配。出现在人力调度、车间分配和车辆路径中。

匈牙利算法(Kuhn-Munkres方法,1955)在O(n³)时间内求解。通过行列减法迭代缩减成本矩阵,然后在二分图中通过增广路径找到最优分配。

对于矩形矩阵,添加零成本的虚拟行或列使其成为方阵。未分配的代理或任务单独报告。

Formula: 最小化 Σ C[i][σ(i)] 对所有 i 约束条件: σ 为一个置换(一对一映射) 匈牙利算法步骤: 1. 减去各行最小值 2. 减去各列最小值 3. 用最少直线覆盖所有零 4. 调整矩阵,重复直至最优

计算示例

成本矩阵:[[9,2,7],[6,4,3],[5,8,1]]。行归约 → [[7,0,5],[3,1,0],[4,7,0]]。列归约 → [[4,0,5],[0,1,0],[1,7,0]]。用零元素为每个代理分配一项任务:代理 1→任务 2(成本 2),代理 2→任务 1(成本 6),代理 3→任务 3(成本 1)。总成本 = 9——低于看似诱人的代理 2→任务 3、代理 3→任务 1 组合(10)。

何时使用此计算器

常见错误

如何解读结果

相关标准与参考文献

常见问题

分配问题能处理最大化吗?

可以。将所有成本取负或从矩阵最大值中减去,然后求解最小化问题。最优分配相同,仅目标函数符号改变。

工人和任务数量不等怎么办?

算法用零成本虚拟行或列填充较小维度。求解后,虚拟条目的分配表示未分配的工人或任务。

指派问题能处理工人技能或可用性等现实约束吗?

基本模型无法直接处理。但可以将不可行的指派的成本设为一个极大的数(例如 999999),从而有效阻止算法选择它们。对于复杂约束,可考虑使用整数线性规划求解器。