前言
之前在极客打板的冠军方案中看见了这个名词,用于解决车牌和车辆的分配问题。
1. 匈牙利算法
1.1条件
(1)目标函数最小值
(2)人数和任务数相等
(3)效率非负
1.2 算法本质
变换系数矩阵,找到n个不同行不同列的0元素
代码实现
【参考文档】目标跟踪初探(DeepSORT)
sklearn里的linear_assignment()
函数以及scipy里的linear_sum_assignment(
)函数都实现了匈牙利算法,两者的返回值的形式不同:
import numpy as np
from sklearn.utils.linear_assignment_ import linear_assignment
from scipy.optimize import linear_sum_assignment
cost_matrix = np.array([
[15,40,45],
[20,60,35],
[20,40,25]
])
matches = linear_assignment(cost_matrix)
print('sklearn API result:\n', matches)
matches = linear_sum_assignment(cost_matrix)
print('scipy API result:\n', matches)
"""Outputs
sklearn API result:
[[0 1]
[1 0]
[2 2]]
scipy API result:
(array([0, 1, 2], dtype=int64), array([1, 0, 2], dtype=int64))
"""
在DeepSORT中,匈牙利算法用来将前一