Algorithm 链接图中的最短路径

Algorithm 链接图中的最短路径,algorithm,graph,shortest-path,Algorithm,Graph,Shortest Path,我正在研究将绘图算法应用到一个可能的非标准应用程序中。我有一些连接在一起的图,我试图通过它们找到前K个最短节点不相交的路径。希望我能解释这一点:作为一个例子,假设我有两个非常简单的带有开始和结束的图。在我的例子中,这些图经历了几个阶段(从左到右),并且都有相同数量的阶段。我可以使用Dijkstra或其他方法来查找每个图中的最短路径,但它们链接在一起,使得第一个图中的一些节点链接到第二个图中的匹配节点。选择一个需要选择另一个。我的第一个想法是将两个图合并为一个,所有可能的组合都得到一个节点。因此,

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

图片示例:通过这两个图找到K条最小成本路径(两条路径的总和),前提是如果在一个图中拾取彩色节点,则必须在另一个图中拾取相同的彩色节点。即使未显示边缘,也会对其进行加权

针对以下答案的另一个示例(示例2):

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

  • 在图1(第一个图)中找到最佳路径 单独,如“图片示例”所示。计算成本 该路径的函数,如CF1
  • 在图1的最佳路径中查找彩色节点的数量
  • 对于图1中的所有彩色节点,删除所有备用连接 从图2中,即确保图2中的路径必须经过 图1中使用的彩色节点
  • 在图2中找到最优路径并计算其代价函数,例如 CF2
  • 计算CF1+CF2
  • 重复步骤1到5,但这次从图2开始,然后匹配 图1的彩色节点与图2的初始最优路径
  • CF1+CF2的最小值将为您提供一组可行路径

    基本上,为一个图规划路径,并使另一个图符合其链接节点集,并检查组合成本函数。然后对另一个图形重复此操作。找到最有效的组合

    通常,对于n个图,必须执行n^2个最短路径计算,这显然是非常糟糕的。但作为一个幼稚的想法,这应该是可行的

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

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

    假设:我们使用的是“n”图,所有这些图都是加权的,并且所有图都包含相等且固定数量的“阶段”

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

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

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

  • 弹出权重最低的路径(假设它属于图号“k”)并展开它的子级。设有“p”子节点。[如果没有更多要扩展的阶段,请从优先级队列中删除该路径。这样,如果队列的总大小变为零,则S和e之间没有可行的路径]

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

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

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

    4c。如果可行的路径之一以ek结束:则将该路径标记为“病理最佳”,然后转到5。 其他:转到3

  • 对于所有i不等于k的i=1到n:根据“pathoOptimal”在每个图中找到相应的路径,并将它们作为输出报告

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

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

    [请让我知道,如果你发现了算法中的任何明显缺陷,因为我刚刚编造了它。此外,由于这是从Dijkstra的大量借用,请让我知道你是否能找到一种加速的方法。]


    附言:-然而,我必须提到,考虑到您的问题的范围,我宁愿使用遗传算法来解决这个问题,而不是使用确定性方法。

    图表将大大有助于解释您的情况……感谢您的回复。我的典型案例将有3-4个图形,因此我不担心计算成本。我上传了另一张两张图的图片,这似乎打破了你的方法。顶部的图选择代价为2的路径,但如果我强制图2通过这些节点,它必须选择代价非常高的对角路径。这些图是对称的,因此在反向处理时也会出现同样的问题。这个