1

我正在尝试学习匈牙利算法的各种实现。具体来说,我想最大化并获得最高分。

我从各种包中找到了两种解决方案:(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 实现来实现这一点。

谢谢你的帮助

4

1 回答 1

1

使用这样的东西后,我能够得到我的东西:-

for i in range(len(row_ind)):
    print("row: ", row_ind[i], "  col: " ,col_ind[i], "  value: ", matrix[i, col_ind[i]] )

这将返回矩阵中的位置以及值。

于 2020-09-29T19:20:47.097 回答