Algorithm 匈牙利算法对多个赋值没有给出正确的结果
问题场景:Algorithm 匈牙利算法对多个赋值没有给出正确的结果,algorithm,optimization,scipy,hungarian-algorithm,Algorithm,Optimization,Scipy,Hungarian Algorithm,问题场景: 任务数(n)大于工作人员数(m) 我需要将多个任务分配给一个工人 这是成本矩阵 我有6项任务和3名工作人员 C(i,j)=1,对于表示可以将工人分配到任务的单元格 C(i,j)=1000,对于表示无法将工人分配到任务的单元格 成本矩阵 TASK/WORKER WORKER1 WORKER2 WORKER3 TASK 1 1 1000 1000 TASK 2 1000
- 任务数(n)大于工作人员数(m)
- 我需要将多个任务分配给一个工人
这是成本矩阵
- 我有6项任务和3名工作人员
- C(i,j)=1,对于表示可以将工人分配到任务的单元格
- C(i,j)=1000,对于表示无法将工人分配到任务的单元格
TASK/WORKER WORKER1 WORKER2 WORKER3
TASK 1 1 1000 1000
TASK 2 1000 1 1000
TASK 3 1000 1000 1000
TASK 4 1 1000 1000
TASK 5 1000 1 1000
TASK 6 1000 1000 1
在这里,worker1可以执行任务(任务1、任务4)
worker2可以执行任务(任务2、任务5)
worker3可以执行任务(任务6)
为了创建方阵,我添加了虚拟工人:DWORKER1、DWORKER2和DWORKER3),如下所示,并为单元格值指定了非常大的值(1000000)
TASK/WORKER WORKER1 WORKER2 WORKER3 DWORKER1 DWORKER2 DWORKER3
TASK 1 1 1000 1000 1000000 100000 1000000
TASK 2 1000 1 1000 1000000 100000 1000000
TASK 3 1000 1000 1000 1000000 100000 1000000
TASK 4 1 1000 1000 1000000 100000 1000000
TASK 5 1000 1 1000 1000000 100000 1000000
TASK 6 1000 1000 1 1000000 100000 1000000
我使用了scipy
包scipy.optimize.linear\u sum\u赋值
。详情如下:
from scipy.optimize import linear_sum_assignment
cost = np.array([[1,1000,1000,1000000,100000,1000000],[1000,1,1000,1000000,1000000,1000000],[1000,1000,
1000,1000000,100000,1000000],[1,1000,1000,1000000,1000000,1000000],[1000,1,1000,1000000,100000, 1000000],[1000,1000,1,1000000,1000000,1000000]])
row_ind, col_ind = linear_sum_assignment(cost)
col_ind的输出是数组([5,3,4,0,1,2])
输出指示(如果我没有错):
我期望的是,将任务(1、2和3)分配给真正的工人,而不是虚拟工人。
通过这个实现,这是可能的吗?还是我遗漏了什么?匈牙利算法是用来解决分配问题的,每个工人只分配一个任务。通过执行您提议的技巧,您将确实有1个任务分配给每个虚拟工作者 如果您只想将任务分配给真正的工作人员,并分配多个任务,则更容易:对于每个任务,选择成本最低的工作人员。在您的示例中,这意味着工作人员1将执行任务1和4,工作人员2将执行任务2和5,工作人员3将执行任务6,而任务3将由三个工作人员中的一个完成(取决于您如何处理平等案例)
- Assign 6th task to worker 1
- Assign 4th task to worker 2
- Assign 5th task to worker 3
- Assign 1st task to Dummy worker 1
- Assign 2nd task to Dummy worker 2
- Assign 3rd task to Dummy worker 3