三角剖分A *(TA *)寻路算法


11

我需要帮助来了解Demyen在他的论文《基于有效三角剖分的寻路》(第76-81页)中描述的Triangle A *(TA *)算法。

他描述了如何使常规A *算法适用于三角剖分,甚至在到达/扩展最终节点之后也可以搜索其他可能更理想的路径。当最终节点展开时,常规A *停止,但是在三角图中使用时,这并不总是最佳路径。这正是我遇到的问题。

第78页的图5.4中说明了此问题: 在此处输入图片说明

我了解如何计算论文中介绍的g和h值(第80页)。

而且我认为搜索停止条件是:

if (currentNode.fCost > shortestDistanceFound)
{
    // stop
    break;
}

其中,currentNode是从打开列表(优先级队列)中弹出的搜索节点,其f得分最低。shortestDistanceFound是到目前为止找到的最短路径的实际距离。

但是,如何从以后的搜索中排除以前找到的路径?因为如果再次进行搜索,显然会找到相同的路径。我是否要重置已关闭的列表?我需要修改某些内容,但是我不知道需要更改什么。该论文缺少伪代码,因此会有所帮助。

Answers:


3

我尚未实现此功能,但在阅读时,我认为您会执行以下操作:

shortestDistance = infinity
do A* with modified g cost
    if node.fCost > shortestDistance (section 5.5)
        don't open node
    if node.isGoal()
        run funnel algorithm (string pulling)
        update shortestDistance

区别在于,即使您找到通往目标路径,也不一定是最短的路径。但是,您将继续改进最短路径的上限,这意味着您不必打开所有节点。最终,您的开放集应该为空,而到目前为止找到的最佳路径应该是最短的。

他描述的修改后的g成本似乎被低估了,所以我对它在实践中的效果表示怀疑。


嗯,我可能是错的,但是我将其解释为停止条件,而不是添加到打开列表的条件。听起来像是添加到打开列表的条件:“作为一个副注,如果与某个特定三角形相邻的状态已经是该状态的祖先,则不会为该三角形生成搜索状态的子级。之所以可以排除,是因为它永远不会消除一条最优路径,只有一条通过去除部分路径而变得更短的路径,如定理4.3.4所述。”
Morrowless,2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.