我不确定这个领域的“现有技术”,但我想我可以想到一个“直截了当的解决方案”。
- 分别在图 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….. en。
启动一个空的优先级队列(PQ)[最好使用二进制/斐波那契最小堆],它将包含路径(节点集合),并且它们的相应优先级将由它们的路径权重的累积和表示]
插入所有起始节点 - S1、S2、S3……。Sn变成PQ,每个单独节点的优先级设置为零。
弹出权重最小的路径(比如它属于图形编号“k”)并展开它的子节点。让有'p'个子节点。[如果没有更多阶段可以扩展,请从优先级队列中删除该路径。这样,如果队列的总大小变为零,那么 S 和 e 之间就没有可行路径]
对于所有 i 不等于 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's 大量借来的,如果你能想出一个加快速度的方法,请告诉我。]
PS:-但是,我必须提到,鉴于您的问题范围,我宁愿使用遗传算法来解决这个问题,而不是采用确定性方法。