方法:匈⽛利算法与KM算法
用来解决多⽬标跟踪中的数据关联问题,匈⽛利算法与KM算法都是为了求解⼆分图的最⼤匹配问题。
匈⽛利算法
匈牙利算法解决无权图的最大匹配问题
将每个匹配对象的地位视为相同,在这个前提下求解最⼤匹配,提高精度
只将置信度较⾼的边才送⼊匈⽛利算法进⾏匹配。
KM算法
KM算法解决带权图的完美匹配优化问题
解决的是带权⼆分图的最优匹配问题。
举例:
初始化顶标
- 员工顶标 = 该员工最高效率
- 任务顶标 = 0
员工顶标: 张三: max(3,5,2)=5 李四: max(4,6,3)=6 王五: max(2,1,4)=4
任务顶标: 设计:0 编程:0 测试:0
构建相等子图
只保留 lx+ly=效率 的边:
张三-编程:5+0=5 ✓ 李四-编程:6+0=6 ✓ 王五-测试:4+0=4 ✓
在相等子图中找匹配(匈牙利算法)
尝试匹配:
- 张三匹配编程 → 成功
- 李四匹配编程 → 失败(编程已被占用)
- 尝试为李四找增广路径:无路可走 → 匹配失败
当前匹配:张三-编程(效率5),王五-测试(效率4),李四未匹配
调整顶标(关键步骤)
找到交错树上的点:
- S(员工):张三、李四
- T(任务):编程
计算调整量 delta = min{lx[i] + ly[j] - 效率[i][j]}
调整顶标:
- S中的员工:lx -= delta
- T中的任务:ly += delta
更新相等子图
检查所有边是否满足 lx[i] + ly[j] = 效率[i][j]
不符合要,符合不要
再次尝试匹配
在更新后的相等子图中找匹配:
- 张三匹配设计 → 成功
- 李四匹配编程 → 成功(6)
- 王五匹配测试 → 成功(4)
完美匹配!总效率 = 3 + 6 + 4 = 13