【问题标题】:Algorithm for finding optimal node pairs in hexagonal graph在六边形图中寻找最优节点对的算法
【发布时间】:2023-03-29 10:35:01
【问题描述】:

我正在寻找一种算法来在六边形(蜂窝)图上找到成对的相邻节点,以最小化成本函数。

  • 每个节点都连接到三个相邻节点
  • 每个节点“i”应与恰好一个相邻节点“j”配对。
  • 每对节点定义一个代价函数

    c = pairCost(i, j)

  • 总成本然后计算为

    totalCost = 1/2 sum_{i=1:N} (pairCost(i, pair(i)))

其中 pair(i) 返回与“i”配对的节点的索引。 (总和除以二,因为总和计算每个节点两次)。我的问题是,如何找到使总成本最小化的节点对?

链接的图像应该更清楚地显示解决方案的外观(粗红线表示配对):

一些进一步的说明:

  • 我并不真正关心最外面的节点
  • 我的成本函数类似于 || v(i) - v(j) || (与节点关联的向量之间的距离)
  • 我猜这个问题可能是 NP 难题,但我并不真正需要真正的最优解决方案,一个好的解决方案就足够了。
  • 朴素算法往往会获得“锁定”的节点,即它们的所有邻居都被占用。

注意:我不熟悉该领域的常用术语(是图论吗?)。如果您能对此提供帮助,那么也许这可以让我在文献中寻找解决方案。

【问题讨论】:

    标签: algorithm graph complexity-theory mathematical-optimization graph-algorithm


    【解决方案1】:

    这是通用图中maximum weight matching problem 的一个实例 - 当然,您必须否定权重才能使其成为最小权重匹配问题。 Edmonds 的paths, trees and flowers algorithm (Wikipedia link) 为您解决了这个问题(还有一个公开的Python implementation)。对于 n 个顶点,简单的实现是 O(n4),但对于n 个顶点和 m 个边,使用 Micali 和 Vazirani 的算法(抱歉,找不到 PDF)。

    【讨论】:

    • 谢谢,Edmonds 的 Blossom 算法解决了这个问题。不幸的是,它的复杂性超过了节点数量的平方(就我而言)。由于我正在考虑相当大的图表,我需要找到一个更快的算法。有可能利用我的图的统一结构——如果没有,似乎有很多启发式方法可以快速、近似地解决。
    • 尝试找到 Micali 和 Vazirani 算法的实现;由于您的图是六边形的,m 渐近等于 3n,这使其复杂度为 O(n3/2)。
    【解决方案2】:

    这似乎与minimum edge cover problem 有关,附加限制是每个节点只能有一条边,并且您试图最小化成本而不是边数。也许您可以通过搜索该短语找到一些答案。

    如果做不到这一点,您的问题可以表述为integer linear programming problem,这是 NP 完全的,这意味着即使是中等规模的问题,您也可能获得糟糕的性能。 (但这并不一定意味着问题本身是 NP 完全的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      相关资源
      最近更新 更多