A-Star 算法

A-Star算法是一种启发式算法,广泛用于寻找最短路径问题上,如智力游戏问题、路径规划问题、行动规划问题等。

设h(n) =节点n和目标节点(遍及所有可能的目标节点以及从n到它们的所有可能路径)之间的最小代价路径的实际代价。
设g(n) = 从开始节点n0到节点n的一个最小代价路径的代价。
那么f(n) = g(n) + h(n)就是从n0到目标节点并且经过节点n的最小代价路径的代价。注意f(n0)= h(n0)是从n0到目标节点的一个(不受限的)最小代价路径的代价。

对每个节点n,设h'(n)(启发因子)是h(n)的某个估计, g'(n)(深度因子)是由A*发现的到节点n的最小代价路径的代价。在算法A*中,我们用f'(n) = g'(n)+h'(n)。注意,如果算法A*中的h'(n)恒等于0,就成为相同代价搜索。

A-Star算法流程:

1) 生成一个只包含开始节点n0的搜索图G,把n0放在一个叫OPEN的列表上。
2) 生成一个列表CLOSED,它的初始值为空。
3) 如果OPEN为空,则失败退出。
4) 选择OPEN上的第一个节点,把它从OPEN中移入CLOSED,称该节点为n。
5) 如果n是目标节点,顺着G中,从n到n0的指针找到一条路径,获得解决方案,成功退出(该指针定义了一个搜索树,在第7步建立)。
6) 扩展节点n,生成其后继节点集M,在G中,n的祖先不能在M中。在G中安置M的成员,使它们成为n的后继。
7) 从M的每一个不在G中的成员建立一个指向n的指针(例如,既不在OPEN中,也不在CLOSED中)。把M的这些成员加到OPEN中。对的每一个已在OPEN 中或CLOSED中的成员m,如果到目前为止找到的到达m的最好路径通过n,就把它的指针指向n。对已在CLOSED中的M的每一个成员,重定向它在G中的每一个后继,以使它们顺着到目前为止发现的最好路径指向它们的祖先。
8) 按递增f'值,重排OPEN(相同最小f'值可根据搜索树中的最深节点来解决)。
9) 返回第3步。
在第7步中,如果搜索过程发现一条路径到达一个节点的代价比现存的路径代价低,我们就要重定向指向该节点的指针。已经在CLOSED中的节点子孙的重定向保存了后面的搜索结果,但是可能需要指数级的计算代价。因此,第7步常常不会实现。随着搜索
的向前推进,其中有些指针最终将会被重定向。

下面从网上引用了一个示例,帮助理解A-Star算法的流程。


其中,蓝色的方格表示目标结点。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值