有效避免有向图中的循环

时间:2017-02-07 01:09:33

标签: algorithm graph robotics graph-traversal

我正在尝试实现一种称为“快速探索随机信念树”的算法。该算法的目的是为机器人提供一条路径,该机器人不是以最小距离度量或类似的方式连接起点和目标,而是将机器人驱动到可以获得高精度测量的区域,然后才移动到目标。

在算法的实现中,我首先通过给定空间的随机采样来构建图形。每次采样新点时,都会向图表添加新边。最初,机器人位置的误差会很高,因为它不会得到很好的测量值,但是一旦我正在探索的树到达“好”区域,机器人的错误就会突然下降,并且有了这个知识。在“好”区域的位置,我向后遍历图形,修剪先前连接的边缘并将这些顶点连接到良好区域。给定足够的样本,在最佳情况下,图形将从良好区域向外传播,因此连接任何两个顶点将保证您将通过这些点。

这是我遇到问题的地方。一旦我开始遍历修剪并更新我的边缘,算法就不应该修剪将好区域连接到起始点的边缘,这将导致无限循环。这张图中显示了一个例子:

enter image description here

  1. 该算法找到顶点1,2,3和4.连接是1 - > 2,2 - > 3,2-> 4.

  2. 现在我们找到#5,这是机器人的“好”区域。访问此顶点将在未来神奇地提高其准确性。我从5找到相邻的顶点:我找到了#3。我将#3的父级更新为#5而不是#2。现在如果#3周围有更多的顶点,我也会遍历它们,并将它们的父母更新为#3等,从而创建从#5到所有这些的路径。 (有关更多信息,遍历基本上计算机器人的协方差,如果它从#5移动到#3,是否比从#2移动到#3更合适)。

  3. 但在任何情况下我都不应该将#2的父级更新为#3:因为机器人首先进入#5的唯一方法是通过#2。
  4. 为了避免这种情况,我做的一个简单(但非常低效?)的事情是计算从我开始遍历的顶点的最短路径,如果我在遍历期间遇到的任何顶点是这条路径的一部分,我不要更新其父级。这样做效果相当好,代价是计算成本很高,因为每次我必须通过更新向后遍历时我都需要这样做,所以我想知道是否有更好,更有效的方法。

0 个答案:

没有答案