【问题标题】:How can I get optimal matching between K groups?如何获得 K 组之间的最佳匹配?
【发布时间】:2019-02-21 21:18:35
【问题描述】:

我有 K 组数据点,我想创建大小为 K 的组,以最小化组内距离的总和。我熟悉使用二分图的匹配算法,但我想要这两个以上的集合。

有什么想法吗?

编辑:

每组由每一组的一个元素组成,不允许重复。

一个例子:你有 {a1, a2, a3}, {b1, b2, b3}, {c1, c2, c3} 您想创建组,例如{a1, b3, c3}, {a2, b1, c2}, {a3, b2, c1} 最小化组内距离的总和。

【问题讨论】:

  • 听起来像 k-means 聚类?如果是这样的话,那就是NP难了。好问题!
  • 组是否需要从 K 个集合中的每个集合中包含一个元素?所有的集合都有相同的点数吗?这里的距离是如何定义的?这个物理距离是 2 维还是 3 维还是其他?
  • 标准化你的向量,在 n 球体中以某种分辨率对它们进行分组,然后扩展,将之前组的中心视为单独的向量。不是最优的,但一个有用的近似值。
  • 是的,我正在考虑一些启发式方法,我们将迭代地应用二分匹配与当前正在构建的组的质心和选定的集合。

标签: algorithm matching bipartite


【解决方案1】:

这个问题可以简化为另一个类似的问题,我之前已经解决了另一个 stackoverflow 问题。这个想法是计算n / k 大小的组的所有组合,并根据它们的组内距离对它们进行加权。遍历搜索空间以寻找有效的组合组合。记录最小金额,并用它来修剪死胡同。您可以通过生成解决方案的最佳子集并从中构建最终解决方案(如我的另一篇文章中所述)来使用动态编程加速搜索,或者您可以使用贪婪方法和一些手动技巧来找到几乎最佳(或最佳)解决方案(也在所述帖子中描述)。 Here 是指向子问题的链接,您可以将其简化为。

【讨论】:

    【解决方案2】:

    即使对于 k=3,它也具有 NP-hard 问题 3 维匹配的味道。 (明显的减少不起作用,因为可能会创建幻三元组,其中三对无效三元组中的每一对都分别出现在有效三元组中。)

    根据实例的大小,我会尝试使用列生成进行局部搜索或整数编程(但如果没有低维度量空间的结构,内部问题似乎很困难,即使这样也很重要)。

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多