一个小例子了解A*算法

A*算法介绍:

A*(A-Star)算法是一种启发式搜索方法,目前在网络路由算法、机器人探路、人工智能、游戏设计等方面有着普遍的应用。
A*算法一般是以估价函数 的大小来排列待扩展状态的次序,每次选择 f(n) 值最小者进行扩展。

f(n)=g(n)+h(n)
其中g(n) 是初始结点到n结点的实际代价,而h(n)是从n结点点到目的结点的最佳路径的估计代价,且h(n)<=h*(n), h*(n)为n结点到目的结点的最优路径的代价。

保证找到全局最优解的条件,关键在于估价函数h(n)的选取:

估价值h(n)小于等于n结点到目标结点最优路径的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低,但能得到全局最优解。

如果估价值h(n)大于实际值, 搜索的点数少,搜索范围小,效率高,但不能保证得到全局最优解。
估价值与实际值越接近,估价函数取得就越好。

自动寻路问题:

在这里插入图片描述
结果:
在这里插入图片描述
本实验采用的评估函数 f(n)
本实验采用的评估函数由两部分构成,第一个是实际代价,也就是至今搜索的步数,实际代价越小,说明走到终点的步数越小;第二个是估计代价,这里的估计代价采用哈密尔顿距离,估计代价越小,说明离得越近。

前五步A*算法的计算过程

在这里插入图片描述
第一步:此时的Open Table和Closed Table都为空,起点的g为0,计算出h为14,f=g+h=14,将起点S01写入Open Table。读取Open Table的第一个点,将S01写入Closed Table,模拟接下来发生的情况,由于向右边走是墙壁,向下边走出界,所以模拟向左边S00走,此时步数加一,g为1,计算S00的h为15,f=g+h=16,将S00加入Open Table;模拟向上边S16走,g为1,计算S16的h为13,f=g+h=14,将S16加入Open Table

在这里插入图片描述
第二步:Open Table有一个节点为S00、S16,Closed Table为S01。Open Table按照f从小到大排序,取出第一个节点S16,写入Closed Table,模拟接下来发生的情况,由于向右边走是墙壁,下边S01已经存在于Close Table说明已经走过了,模拟向左边S15走,此时步数加一,g为2,计算S15的h为14,f=g+h=16,将S15加入Open Table;模拟向上边S31走,g为2,计算S31的h为14,f=g+h=16,将S31加入Open Table

在这里插入图片描述
第三步:Open Table有三个节点:S00、S15、S31,Closed Table为S01、S16。Open Table按照f从小到大排序,此时三个节点的f一致,按h小的来取,取出第一个节点S15,写入Closed Table,模拟接下来发生的情况,由于向左边走出界,右边S16存在于Closed Table中,模拟向下边S00走,此时步数加一,g为3,比处在Open Table中的S00的g大,所以不更新S00;模拟向上边S30走,g为3,计算出h为15,f=g+h=18,将S30加入Open Table

在这里插入图片描述
第四步:Open Table有三个节点:S00、S30、S31,Closed Table为S01、S16、S15。Open Table按照f从小到大排序,此时S00和S31的f相同,取h小的节点S31(g:2,h:14:f:16)出来,写入Closed Table,模拟接下来发生的情况,由于下边的S16存在于Closed Table,向左边S30走步数加一,g为3与已存在于Open Table的S30的g一致,所以不更新;向上边S46走,步数加一,得S46(g:3,h:15,f:18)加入Open Table,向右边S32走,得S32(g:3,h:13,f:16)加入Open Table

在这里插入图片描述
第五步:Open Table有三个节点:S00、S30、S46、S32,Closed Table为S01、S16、S15、S31。Open Table按照f从小到大排序,此时S32和S00的f相同,取h小的节点S32(g:3,h:13,f:16)出来,写入Closed Table,模拟接下来发生的情况,由于下边是墙壁,左边S31已存在于Closed Table中,所以模拟向右边S33走,步数加一,得S33(g:4,h:12:f16)加入Open Table,模拟向上边S47走,得S47(g:4,h:14,f:18)加入Open Table

  • 46
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值