获取图中两个节点之间的随机简单路径

时间:2020-11-03 19:57:34

标签: python-3.x networkx

鉴于图中的起始节点和目标节点,我想在这两个节点之间找到一个简单路径。我不需要最短的路径,但是需要任何随机的简单路径。 我尝试从networkx使用all_simple_paths,但是此模块似乎在返回任何内容之前先计算所有简单路径。这需要很长时间才能运行。 有办法只找到一条简单的路吗?

此外,我理想情况下还要确保此路径不会跨越任何“障碍”。这些障碍是同一张图中预定义的一组节点。有没有办法添加此约束?

PS:我不一定需要使用networkx。我正在编写的代码是使用Python。

2 个答案:

答案 0 :(得分:0)

您可以将其视为最小成本网络流量问题,其中您的起始节点希望向您的目标节点(需求= 1)发送一个流量单位(需求= -1)。您可以将边缘容量设置为1,并且可以将所有边缘权重设置为0(“障碍”节点周围的边缘权重除外)。对于这些障碍节点,您可以将进入或离开它们的所有边缘的权重设置为1。该算法将尝试仅使用权重为0的边缘来查找任意路径,但是如果没有路径,则将使用权重为1的边缘存在,只有权重0个边。

请参见nx.min_cost_flow函数。此功能需要您将图形设为有向图nx.DiGraph(如果尚未创建)。

答案 1 :(得分:0)

我设法通过使用RRT算法解决了这个问题。它提供了源节点和目标节点之间的随机路径,并避免了障碍。

相关问题