我正在努力将图形算法应用于可能非标准的应用程序。我有图表链接在一起,我试图找到通过它们的顶部K最短节点 - 不相交的路径。希望我能解释一下:例如,假设我有两个相当简单的图表,包含开头和结尾。在我的例子中,图表经历了阶段(从左到右),两者都有相同的阶段数。我可以使用Dijkstra或其他东西来找到每个中的最短路径,但是它们被链接在一起,使得第一个图中的一些节点链接到第二个图中的匹配节点。选择一个需要选择另一个。我的第一个想法是将两个图合并为一个具有获得节点的所有可能组合。因此,如果在图1中的某个阶段,节点是A,B,C,并且图2具有D,E,F,并且如果C和F被链接,则选项是AD,AE,BD,BE,CF。这适用于找到单个最佳路径。当我应用Suurballe算法找到K个最佳节点不相交路径时会出现问题,因为两个节点不相交路径可以选择AD和AE。这些是组合图中的节点不相交,但不是原始问题(它们共享A)。在这类问题中是否有任何现有技术,或者任何人都可以想到一个直接的解决方案?
图片示例:通过这两个图表找到K个最小成本路径(两个路径的总和),条件是如果在一个图形中选择彩色节点,则必须在另一个图形中选择相同的颜色节点。即使未显示,边缘也会加权。
另一个例子(例子2)回答以下答案:
答案 0 :(得分:0)
我不确定这个领域的“现有技术”,但我想我可以想到一个“直截了当的解决方案”。
CF1 + CF2的最低值会为您提供一组可行路径。
基本上,您计划其中一个图的路径,并使另一个图符合其链接节点集并检查组合成本函数。然后重复另一个图表。找到有效的最佳组合。
通常,对于n个图,您必须执行n ^ 2个最短路径计算,这显然非常糟糕。但它应该起作用,作为一个天真的想法。
++++++++++++++++++++
这是我之前加权图算法的修改版本:
假设:我们正在使用'n'图,所有这些都是加权的,所有这些都包含相等和固定数量的'阶段'。
所有起始节点都被描述为S1,S2,S3 ....锡。 所有终端节点都被描述为e1,e2,e3 ...... .. en。
启动一个空的优先级队列(PQ)[最好使用二进制/斐波纳契最小堆],它将包含路径(节点集合),它们的相应优先级将由它们的路径权重的累积和表示强>
插入所有起始节点 - S1,S2,S3 .... Sn进入PQ,每个节点的优先级设置为零。
弹出权重最低的路径(说它属于图形编号'k')并展开它的子项。让'p'子节点。 [如果没有更多阶段可以扩展,请从优先级队列中删除该路径。这样,如果队列的总大小变为零,则S和e之间没有可行的路径。
对于所有不等于k的i = 1到n,重复:
4A。检查剩余(n-1)图中的哪个p路径可行。
4b中。将所有可行路径插入PQ(计算优先级后)。
4c中。如果其中一个可行路径以ek结尾:则将该路径标记为“PathOptimal”并转到5。 否则:转到3。
对于i = 1到n,所有i不等于k:找到每个图中对应'PathOptimal'的相应路径并将它们报告为输出。
此处,必须正确实施 路径权重 的概念。 路径权重将等于:该路径中包含的边的权重之和+剩余(n-1)图中所有同级路径中包含的边的权重之和。
可行性 的概念将是您的业务规则,即如果子项是彩色节点,则是所有其他子项中前一路径的相应子项(n-1) )图形必须是相同的颜色。如果它不是彩色节点,则它的兄弟姐妹必须是无色的。
[如果你弄清楚算法中有任何明显的缺陷,请告诉我。此外,由于这是从Dijkstra大量借来的,请告诉我你是否可以找到加速这种方法的方法。]
P.S: - 但是,我必须提到,鉴于你的问题的范围,我宁愿使用遗传算法来解决这个问题,而不是采用确定性方法。