A star 寻路
Last updated
Was this helpful?
Last updated
Was this helpful?
1968年,的一篇论文,“P. E. Hart, N. J. Nilsson, and B. Raphael. A formal basis for the heuristic determination of minimum cost paths in graphs. IEEE Trans. Syst. Sci. and Cybernetics, SSC-4(2):100-107, 1968”。从此,一种精巧、高效的算法------A*算法横空出世了,并在相关领域得到了广泛的应用。
启发式搜索算法就是当前搜索节点在选择下一步节点时,可以用过一个启发函数进行计算代价,选择代价最小的节点作为下一步搜索节点
f(n):从初始状态经由状态n到目标状态的代价估计
g(n):是在状态空间中从初始状态到状态n的实际代价
h(n):是从状态n到目标状态的最佳路径的估计代价
路径搜索问题中,状态就是节点,代价就是距离
使用两个状态表Open和Clodes。Open表由待考察的节点组成,Closed表由已经考察过的节点组成
当一个节点已经被检查过所有与它相邻的节点,计算出了这些节点的f(n),并把其放入Open表,那么这个节点就放入Closed表
开始时,Closed表为空,Open表仅包含起始节点,每次迭代中,将Open表中最小代价的节点进行检查,如果不是目标节点,则进行以下处理:
如果相邻节点不在两个表中,则将其插入Open表中
如果相邻节点在Open表中,则对比新旧路径的代价值并取最低的存入Open表
如果相邻节点在Close表中,则对比新旧路径的代价值,如果新路径更低,则移出Closed表,加入Open表
重复以上步骤,如果到达目标节点前,Open表为空,则意味着没有可达的路径
基于单元格的导航图
基于可视点的导航图
导航网络
不考虑斜向移动的情况,直线运动的代价为 P/单位
对于对角线和直线运动的代价都为 P/单位 的时候(类似西洋棋中的王)
对角线(diagonal)运动在实际生活中运动的代价跟直线(straight)运动的代价(P/单位)并不同,对角线运动的代价一般类似于
欧氏距离就是两点之间直线距离
注意:计算平方根将会消耗资源比较多,所以此方法基本不被使用