我正在尝试学习匈牙利算法的各种实现。具体来说,我想最大化并获得最高分。
我从各种包中找到了两种解决方案:(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 实现来实现这一点。
谢谢你的帮助