R 具有节点访问限制的最短路径

R 具有节点访问限制的最短路径,r,graph-algorithm,igraph,shortest-path,digraphs,R,Graph Algorithm,Igraph,Shortest Path,Digraphs,我有一个关于经典的“最短路径”问题的变体,我不知道如何解决它。我的图形拓扑如下所示: 有一个源和一个汇 其他节点由字母和下标整数指定(例如,A1、B1、C1、A2、B2、C2、…A30、B30、C30)。每个可能的字母/整数组合有一个节点 从源到A1、B1、C1中的每一个都有一条零成本定向边。从具有最大整数的每个节点到接收器有一条零成本定向边(例如,当整数增加到30时,从A30到“最终目的地节点”有一条零成本定向边,从B30到C30有一条相同的边) 每个节点都有一个指向其他节点的加权边,每个节点

我有一个关于经典的“最短路径”问题的变体,我不知道如何解决它。我的图形拓扑如下所示:

有一个源和一个汇

其他节点由字母和下标整数指定(例如,A1、B1、C1、A2、B2、C2、…A30、B30、C30)。每个可能的字母/整数组合有一个节点

从源到A1、B1、C1中的每一个都有一条零成本定向边。从具有最大整数的每个节点到接收器有一条零成本定向边(例如,当整数增加到30时,从A30到“最终目的地节点”有一条零成本定向边,从B30到C30有一条相同的边)

每个节点都有一个指向其他节点的加权边,每个节点的其他字母都有一个较大的整数

例如,可能存在从A1到B3和从A1到C10的定向加权边;但是,您不会看到从A1到B3和B5的边,因为目标都是“B”边。 不存在从一个带有字母的节点移动到另一个带有字母的节点(例如,无B3到B10)的边,也不存在从具有较高整数的节点移动到具有较低整数的节点(例如,无B30到C10)的边

我知道我可以使用Djikstra的算法来寻找从起点到终点的奇异最短路径,但我的目标有些不同。我想:

1) 找到一条从信源到信宿的最短路径,每封“信”只访问一次。只要我访问所有字母,任何一组整数都可以工作。例如,可以访问源和接收器之间的节点集A1、B22和C27;访问A10、A15、B22并不合适。2) 找到两条路径,组合起来,访问每个字母一次,并且只访问一次。如果“字母集”是ABCDEF,则一条路线可以访问ABD和另一条CEF;但是我们不能有一个路线访问ABCD和另一个访问DEF,因为D会重叠。我们的目标是找出两条路径,找到最短最长的路径——我不关心总时间,而关心这个极小极大值。3) 与#2相同的问题,但有3条路径、4条路径等

我想我可以做一个非常复杂的整数程序,但不知道是否有最短路径算法可以解决这个问题。如果是R包装中的现成产品,则可获得额外积分


拉尔夫

你对更多的编码或算法答案感兴趣吗?如果您正在寻找一种算法,这可能更适合交叉验证。如果你想要一个编码答案,你能给出一些示例代码来构造一个符合规则的图吗?要实现第一个目标,您可以删除所有以同一字母开始和结束的边,并使用最短路径函数。您可以使用get.edgelist()和grep()来查找这些边。我对一种已建立的算法方法更感兴趣。我不能只消除所有在同一个字母上开始和结束的边-我还需要确保每个路由1)每个字母只访问一个节点,2)每个整数最多访问一个节点。因此,它不同于标准的最短路径算法,因为最短路径可能违反这些规则之一。还有,我如何交叉发布到CV?节点之间是否可以有不同字母但相同整数的边?例如B2到C2?从你的问题陈述来看,似乎不是。具有相同字母的节点或具有相同整数的节点之间不禁止边。还禁止源节点的整数高于目标节点的有向边。例如,可以包含从B2到C5的有向边(但不是必需的,这取决于具体问题),但是您永远不会看到从C5到B2或从C5到B5的有向边。您是否对更多的编码或算法答案感兴趣?如果您正在寻找一种算法,这可能更适合交叉验证。如果你想要一个编码答案,你能给出一些示例代码来构造一个符合规则的图吗?要实现第一个目标,您可以删除所有以同一字母开始和结束的边,并使用最短路径函数。您可以使用get.edgelist()和grep()来查找这些边。我对一种已建立的算法方法更感兴趣。我不能只消除所有在同一个字母上开始和结束的边-我还需要确保每个路由1)每个字母只访问一个节点,2)每个整数最多访问一个节点。因此,它不同于标准的最短路径算法,因为最短路径可能违反这些规则之一。还有,我如何交叉发布到CV?节点之间是否可以有不同字母但相同整数的边?例如B2到C2?从你的问题陈述来看,似乎不是。具有相同字母的节点或具有相同整数的节点之间不禁止边。还禁止源节点的整数高于目标节点的有向边。因此,例如,可以包括从B2到C5的定向边(但不是必需的,这取决于具体问题),但是您永远不会看到从C5到B2或从C5到B5的定向边。