Netlogo 列出链接海龟之间的所有潜在路径

Netlogo 列出链接海龟之间的所有潜在路径,netlogo,Netlogo,有没有一种简单的方法可以使用NW扩展在一对链接的海龟之间生成所有可能的无循环路径(而不仅仅是使用到的最短路径)?现在这个问题又开始了,我只是重新发布我的评论作为回答: 对于无向网络,如果网络中的任何地方都有回路,则两个海龟之间的路径数是无限的。因此,我假设您的意思是“海龟之间不包含循环的所有路径” 西北延伸恐怕不支持这一点。它将为您提供所有最短路径(每次调用path时,它都会随机选择一条)。非最短路径在计算上很难找到(或者更确切地说,找到所有非最短路径很难,因为它们太多了),而且通常不是很有用。

有没有一种简单的方法可以使用NW扩展在一对链接的海龟之间生成所有可能的无循环路径(而不仅仅是使用到的最短路径)?

现在这个问题又开始了,我只是重新发布我的评论作为回答:

对于无向网络,如果网络中的任何地方都有回路,则两个海龟之间的路径数是无限的。因此,我假设您的意思是“海龟之间不包含循环的所有路径”

西北延伸恐怕不支持这一点。它将为您提供所有最短路径(每次调用path时,它都会随机选择一条)。非最短路径在计算上很难找到(或者更确切地说,找到所有非最短路径很难,因为它们太多了),而且通常不是很有用。尽管如此,请随时请求该功能:

请注意,找到一条随机的非最短路径非常容易,特别是如果你不介意循环的话:只需在网络中行走,每次都选择随机链接,直到你到达目的地。要消除循环,只需确保尚未访问该节点。即:

to-report random-path-to [ target ]
  let path (list self)
  while [ last path != target ] [
    set path lput [one-of link-neighbors] of (last path) path
  ]
  report path
end
无回路:

to-report random-path-to [ target ]
  let path (list self)
  while [ last path != target ] [
    set path lput [one-of link-neighbors with [ not member? self path ] ] of (last path) path
  ]
  report path
end

我没有测试其中任何一个,但它们至少应该为您指明正确的方向。此外,它们应该被修改,以考虑到海龟没有连接的情况。

我还没有完全考虑到这一点,但这部分是正确的,我希望这可能会激发一个解决方案。假设您正试图找到nodeA和nodeB之间的所有路径。您可以做的是遍历所有可能的nodeC(即,所有不是A或B的节点),并找到nodeA和nodeC之间以及nodeC和nodeB之间的最短路径。那么A和B之间的路径就是这两条路径的组合。然后,您将不得不抛出回溯路径,但我认为,如果两个部分中都出现任何节点(C除外),则可以通过拒绝建议的路径来实现。还有一些重复项需要丢弃,还有一些额外的路径,例如,A和C之间的最短路径,然后是C和D,然后是D和B。

您已经尝试过什么?你将如何处理路径中的循环?我不明白所有关于这一点的投票结果-对meThis来说似乎是一个非常清楚的问题,这是一个非常明智的问题。正如hardmath所暗示的,如果存在任何循环,海龟之间的路径数量是无限的。我认为这个问题是“海龟之间所有包含已知循环的路径”。不管怎样,西北延伸恐怕不支持这一点。它将为您提供所有最短路径(每次您调用
path to
,它都会随机选择一条)。非最短路径在计算上很难找到(它们需要一个完整的网络遍历),通常不是很有用。尽管如此,请随时请求该功能:。