我正在尝试实现D * -Lite寻路算法,如Koenig和Likhachev在2002 article中所描述的Boost :: Graph。我认为我对它背后的基本思想和理论有了很好的把握,但是我在理解Pred
和Succ
集更新时遇到了问题。
我猜它发生在Move to sstart
的{{1}}步骤中,但是第一次调用Main
会毫无意义吗?并且ComputeShortestPath
集应该与Succ
同时插入吗?那么Pred
和Pred
可以实现为双链表吗?
我已经在下面插入了算法的伪代码。 Succ
和Pred
集分别是前辈和后继者。 Succ
,g
,h
和rhs
的费用和权重不同。 c
是要访问的顶点的优先级队列。
U
答案 0 :(得分:8)
事实证明我没有对基本思想和理论有正确的把握......我误解了“继任者”和“前任”的含义,因为我认为它的意思是“在路径顺序中“以便在路径v0->v1->v2
中,v0
将是v1
的前身,v2
是后继者。
答案 1 :(得分:0)
阅读LPA *论文,你会知道它们是什么。 基本上,在LPA *中,搜索从开始位置开始。因此,后继者将是u.Pop节点周围的节点。这意味着,它们是您将从当前节点转到的节点。而Pred,它只是一个母节点。这意味着接班人的Pred是u.Pop。
在D Lite中,一切都相反。搜索从目标位置开始。 所以,对你来说有点困惑。 D Lite的后继者是LPA *中的Pred。所以,继承者= U.pop。 D Lite的Pred是LPA的继承者。因此,Pred是您将从后继者那里获得的节点。
希望你能理解我的英语不好。