深度学习——匈⽛利算法与KM算法

65 阅读2分钟

方法:匈⽛利算法与KM算法

用来解决多⽬标跟踪中的数据关联问题,匈⽛利算法与KM算法都是为了求解⼆分图的最⼤匹配问题。

匈⽛利算法

匈牙利算法解决无权图的最大匹配问题

将每个匹配对象的地位视为相同,在这个前提下求解最⼤匹配,提高精度

只将置信度较⾼的边才送⼊匈⽛利算法进⾏匹配。

KM算法

KM算法解决带权图的完美匹配优化问题

解决的是带权⼆分图的最优匹配问题。

举例: image.png

初始化顶标

  • 员工顶标 = 该员工最高效率
  • 任务顶标 = 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 ✓

在相等子图中找匹配(匈牙利算法)

尝试匹配:

  1. 张三匹配编程 → 成功
  2. 李四匹配编程 → 失败(编程已被占用)
  3. 尝试为李四找增广路径:无路可走 → 匹配失败

当前匹配:张三-编程(效率5),王五-测试(效率4),李四未匹配

调整顶标(关键步骤)

找到交错树上的点:

  • S(员工):张三、李四
  • T(任务):编程

计算调整量 delta = min{lx[i] + ly[j] - 效率[i][j]}

调整顶标:

  • S中的员工:lx -= delta
  • T中的任务:ly += delta

更新相等子图

检查所有边是否满足 lx[i] + ly[j] = 效率[i][j]

不符合要,符合不要

再次尝试匹配

在更新后的相等子图中找匹配:

  1. 张三匹配设计 → 成功
  2. 李四匹配编程 → 成功(6)
  3. 王五匹配测试 → 成功(4)

完美匹配!总效率 = 3 + 6 + 4 = 13