【问题标题】:Shortest path(s) in linked graphs链接图中的最短路径
【发布时间】:2013-09-04 18:04:04
【问题描述】:

我正在努力将图形算法应用于可能非标准的应用程序。我有链接在一起的图,并试图找到通过它们的前 K 个最短节点不相交路径。希望我能解释一下:举个例子,假设我有两个相当简单的图表,带有开始和结束。在我的例子中,这些图表经历了阶段(从左到右)并且都具有相同数量的阶段。我可以使用 Dijkstra 或其他东西在每个图中找到最短路径,但它们链接在一起,使得第一个图中的一些节点链接到第二个图中的匹配节点。选择一个需要选择另一个。我的第一个想法是将两个图合并为一个,所有可能的组合都得到一个节点。因此,如果在图一的某个阶段,节点是 A、B、C,图二有 D、E、F,如果 C 和 F 链接,则选项是 AD、AE、BD、BE、CF。这可以很好地找到单一的最佳路径。当我应用 Suurballe 算法来查找 K 个最佳节点不相交路径时,问题就出现了,因为两个节点不相交路径可以选择 AD 和 AE。这些是组合图中的节点不相交,但在原始问题中不是(它们共享 A)。这类问题是否有任何现有技术,或者任何人都可以想到一个简单的解决方案?

图片示例:在以下约束条件下通过这两个图找到 K 个最小成本路径(两条路径的总和):如果您在一个图中选择彩色节点,则必须在另一个图中选择相同的颜色节点。即使未显示,边缘也会被加权。

响应以下答案的另一个示例(示例 2):

【问题讨论】:

  • 一张图表可以帮助您解释您的场景...

标签: algorithm graph shortest-path


【解决方案1】:

我不确定这个领域的“现有技术”,但我想我可以想到一个“简单的解决方案”。

  1. 在图 1(第一个图)中找到最佳路径 分别,如“图片示例”所示。计算成本 此路径的函数,例如 CF1。
  2. 找出图 1 的最佳路径中的彩色节点数。
  3. 对于图表 1 中的所有彩色节点,删除所有备用连接 来自图 2,即确保图 2 中的路径必须经过 图 1 中使用的彩色节点。
  4. 在图 2 中找到最优路径并计算其成本函数,例如 CF2。
  5. 计算 CF1 + CF2
  6. 重复步骤 1 到 5,但这次从图 2 开始,然后匹配 图 1 的彩色节点与图 2 的初始最优路径。

CF1+CF2 的最小值会给你一组可行的路径。

基本上,您为其中一个图规划路径并让另一个图符合其链接节点集并检查组合成本函数。然后重复另一个图表。找到最有效的组合。

一般来说,对于 n 个图,您必须执行 n^2 次最短路径计算,这显然非常糟糕。但它应该可以工作,作为一个幼稚的想法。

++++++++++++++++++++++++

这是我之前的加权图算法的修改版本:

假设:我们正在使用“n”个图,它们都被加权,并且它们都包含相等且固定数量的“阶段”。

所有的起始节点都被描述为S1、S2、S3……。锡。 所有的终端节点都被描述为 e1, e2, e3….. en.

  1. 启动一个空优先级队列 (PQ) [最好使用二进制/斐波那契最小堆],其中将包含路径(节点集合),并且它们的相应优先级将由它们的 路径权重的累积和表示]

  2. 插入所有起始节点 - S1、S2、S3…。 Sn进入PQ,每个单独节点的优先级设置为零。

  3. 弹出权重最小的路径(比如它属于图形编号“k”)并展开它的子节点。让有'p'个子节点。 [如果没有更多阶段可以扩展,请从优先级队列中删除该路径。这样,如果队列的总大小变为零,那么S和e之间就没有可行路径]

  4. 对于所有 i 不等于 k ​​的 i = 1 到 n,重复:

    4a。检查剩余 (n-1) 个图中哪些 p 路径可行

    4b。将所有可行路径插入到 PQ(计算它们的优先级之后)。

    4c。如果 feasible 路径之一以 ek 结尾:则将该路径标记为“PathOptimal”并转到 5。 else : 转到 3。

  5. 对于所有 i 不等于 k ​​的 i = 1 到 n:在每个图中针对 'PathOptimal' 找到相应的路径并将它们报告为输出。

这里,路径权重的概念必须正确实现。 路径权重将等于:该路径中包含的边的权重之和 + 剩余 (n-1) 图中所有兄弟路径中包含的边的权重之和。

可行性的概念将成为您的业务规则,即如果一个子节点是彩色节点,则所有其他(n-1 ) 图形必须具有相同的颜色。如果它不是彩色节点,则它的兄弟节点必须是非彩色的。

[如果您发现算法中有任何明显的缺陷,请告诉我,因为我只是编造了它。另外,由于这是从 Dijkstra 大量借用的,如果您能想出一个加快速度的方法,请告诉我。]

P.S:- 但是,我必须提到,鉴于您的问题的范围,我宁愿使用遗传算法来解决这个问题,而不是通过确定性方法。

【讨论】:

  • 感谢您的回复。我的典型案例会有 3-4 个图,所以我不担心计算成本。我上传了两张图表的另一张图片,但这似乎打破了你的方法。上图选择了成本为 2 的路径,但如果我强制图 2 通过这些节点,它必须选择成本非常高的对角线路径。这些图是对称的,因此反向处理时会出现同样的问题。共同的最佳答案是在两者的中间走并避免彩色节点。我误解了你的方法吗?
  • 很抱歉,我没有注意到图表是加权的。此外,我意识到,我提出的算法找到了一条可行的路径,但不是最优路径。我将为加权图编辑我的回复。检查一下并告诉我。
  • 谢谢。这看起来很合理。我一直在整理我认为基本相同的 Dijkstra 的矢量化版本。有很多节点,运行时间很快就会失控。我将仔细查看您的版本,看看是否比我拥有的版本具有计算优势。
  • 谢谢。我提出的建议很可能存在一些漏洞。如果您碰巧注意到,请提请我注意。如果我能更快地发现一些东西,我会告诉你,所有这些 Dijkstra 的变体确实非常昂贵。
猜你喜欢
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 2016-09-28
  • 2022-01-14
相关资源
最近更新 更多