A*简谈

A*搜索是启发式搜索的代表,其使用f(n) = g(n) +w h(n) 作为估价函数。其中g(n)为从初始状态到当前状态的成本,h(n)为从当前结点到目标结点的估计成本,即启发式函数。在搜索时,通过计算估价函数值,选择较优的路径,从而达到剪枝的目的(因为A*搜索是基于BFS实现的)。在实现时,我们一般使用OPEN表和CLOSED表,其中OPEN表用来存储待扩展的状态,CLOSED 表用来存储已经扩展的状态。在扩展状态时,通过遍历OPEN表和CLOSED 表,从而避免生成重复状态。在实现时,我们通过调整w值,对搜索的倾向进行调整。从相关研究上看,当w值随着搜索深度的增加而减小时,搜索的效果会比较好。也就是说,我们在搜索较浅的时候,应尽量使用启发值,在搜索较深的时候更倾向与BFS,以保证得到一个到达目标状态的路径。


以下是A*搜索的算法:

初始化OPEN表(优先队列)

初始化CLOSED表

将初始状态存入OPEN表

WHILE OPEN不为空

从OPEN表中取出最佳结点(即f值最小的结点)(PARENT)

如果PARENT是目标结点,程序结束

将PARENT存入CLOSED表中

对PARENT进行扩展(ADJ_NODE)

如果ADJ_NODE在CLOSED 表中

舍弃ADJ_NODE,并进行下一哥扩展

如果ADJ_NODE在OPEN 表中

比较两者g值,如果比OPEN表中优

抛弃OPEN表中结点

计算ADJ_NODE的f,g,h值

修改状态的父亲结点,为PARENT

将ADJ_NODEF放入OPEN表中

进入下次循环

        否则,计算ADJ_NODE的f,h值

设置ADJ_NODE的父亲结点为PARENT

将ADJ_NODE放入OPEN表中






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值