使用 Python 的匈牙利算法约束
Hungarian Algorithm Constraint using Python
我有工作和员工的数据框,以及每个员工完成每项工作的持续时间。
我想用匈牙利算法将每个工作分配给1个员工,每个员工只能分配1个工作。
这是数据:
J1 J2 J3
E1 3 5 2
E2 7 3 9
E3 4 2 7
E4 2 7 5
E5 6 8 8
预期结果是:
J1 J2 J3
E1 0 0 1
E2 0 0 0
E3 0 1 0
E4 1 0 0
E5 0 0 0
然后打印出来:
Job Employee
1 4
2 3
3 1
谁能帮我解决这个问题?提前致谢!
假设输入数据帧df
,你可以使用scipy.optimize.linear_sum_assignment
:
from scipy.optimize import linear_sum_assignment
x,y = linear_sum_assignment(df)
out = pd.DataFrame({'Job': df.columns[y], 'Employee': df.index[x]})
输出:
Job Employee
0 J3 E1
1 J2 E3
2 J1 E4
我有工作和员工的数据框,以及每个员工完成每项工作的持续时间。 我想用匈牙利算法将每个工作分配给1个员工,每个员工只能分配1个工作。
这是数据:
J1 J2 J3
E1 3 5 2
E2 7 3 9
E3 4 2 7
E4 2 7 5
E5 6 8 8
预期结果是:
J1 J2 J3
E1 0 0 1
E2 0 0 0
E3 0 1 0
E4 1 0 0
E5 0 0 0
然后打印出来:
Job Employee
1 4
2 3
3 1
谁能帮我解决这个问题?提前致谢!
假设输入数据帧df
,你可以使用scipy.optimize.linear_sum_assignment
:
from scipy.optimize import linear_sum_assignment
x,y = linear_sum_assignment(df)
out = pd.DataFrame({'Job': df.columns[y], 'Employee': df.index[x]})
输出:
Job Employee
0 J3 E1
1 J2 E3
2 J1 E4