如何解决获取图中两个节点之间的随机简单路径
鉴于图中的起始节点和目标节点,我想在这两个节点之间找到一个简单路径。我不需要最短的路径,但是需要任何随机的简单路径。
我尝试从networkx使用all_simple_paths
,但是此模块似乎在返回任何内容之前先计算所有简单路径。这需要很长时间才能运行。
有办法只找到一条简单的路吗?
此外,我理想情况下还要确保此路径不会跨越任何“障碍”。这些障碍是同一张图中预定义的一组节点。有没有办法添加此约束?
PS:我不一定需要使用networkx。我正在编写的代码是使用Python。
解决方法
您可以将其视为最小成本网络流量问题,其中您的起始节点希望向您的目标节点(需求= 1)发送一个流量单位(需求= -1)。您可以将边缘容量设置为1,并且可以将所有边缘权重设置为0(“障碍”节点周围的边缘权重除外)。对于这些障碍节点,您可以将进入或离开它们的所有边缘的权重设置为1。该算法将尝试仅使用权重为0的边缘来查找任意路径,但是如果没有路径,则将使用权重为1的边缘存在,只有权重0个边。
请参见nx.min_cost_flow
函数。此功能需要您将图形设为有向图nx.DiGraph
(如果尚未创建)。
我设法通过使用RRT算法解决了这个问题。它提供了源节点和目标节点之间的随机路径,并避免了障碍。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。