问题描述
我正在尝试学习匈牙利算法的各种实现。具体来说,我想最大化并获得最高分数。
我从各种软件包中找到了两种解决方案:(1)munkres软件包,以及(2)Scipy中的线性和分配
(1)http://software.clapper.org/munkres/ (2)https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linear_sum_assignment.html
我能够与#1结合在一起,但是在实现中发现问题(https://github.com/bmc/munkres/issues/39)。因此,我现在尝试使用选项#2。
这是我到目前为止的内容:
import numpy as np
from scipy.optimize import linear_sum_assignment
matrix = np.array([
[10.01,10.02,8.03,11.04],[9.05,8.06,500.07,1.08],[9.09,7.11,4.11,1000.12]
])
row_ind,col_ind = linear_sum_assignment(matrix,maximize=True)
print('\nSolution:',matrix[row_ind,col_ind].sum())
它返回1510.21的正确解。
我将不胜感激:
我一直在努力展示作品。理想情况下,我要查看的是匹配的行和列对以及得分。在此示例中,将为:
(0,1) (10.02)
(1,2) (500.07)
(2,3) (1000.12)
这与munkres程序包(上面详细介绍的#1)非常直接,但是我一直在努力使如何使用scipy实现这一工作。
感谢您的帮助
解决方法
使用类似这样的东西后,我可以得到自己的样子:-
for i in range(len(row_ind)):
print("row: ",row_ind[i]," col: ",col_ind[i]," value: ",matrix[i,col_ind[i]] )
这将返回值在矩阵中的位置。