scipy.optimize.linear_sum_assignment(cost_matrix)
标记
https://blog.csdn.net/weixin_39548859/article/details/120276651
https://blog.csdn.net/qq_51570094/article/details/124020861
请转到上面原文链接,我这里只是要用 标记一下
**场景:指派问题是那些派完成任务效率最高的人去完成任务的问题。在生活中经常遇到这样的问题,某单位需完成n项任务,恰好有n个人可承担这些任务。由于每人的专长不同,各人完成任务不同(或所费时间),效率也不同。于是产生应指派哪个人去完成哪项任务,使完成n项任务的总效率最高(或所需总时间最小 **)。这类问题称为指派问题或分派问题。
下图:如3表示第1个人完成任务a的时间或者效率,8表示第1个人完成b任务的时间或者效率
c = [[3,8,6,9,5], [7,5,12,9,19], [7,10,9,10,6], [4,6,2,12,8], [9,9,6,15,11]]
c = np.array(c)
''''
array([[ 3, 8, 6, 9, 5],
[ 7, 5, 12, 9, 19],
[ 7, 10, 9, 10, 6],
[ 4, 6, 2, 12, 8],
[ 9, 9, 6, 15, 11]])
'''
# 这个函数求的是最小值问题 所以有时需要取倒数或者1-值 转化为求最小值问题
name_id,work_id=optimize.linear_sum_assignment(c)
print(c[name_id,work_id ].sum())
print(name_id,work_id)
'''
29
name_id [0 1 2 3 4]
一一对应的
work_id [0 3 4 2 1]
即第一个人分配做a工作
'''