麻省理工公开课人工智能笔记四

考虑一个地图中的两个点间的最短路径,这里只考虑地图中,即两点之间有距离且为正数。

考虑以下简单地图

麻省理工公开课人工智能笔记四_第1张图片

如果我们已知最短距离为SADG=11,需要验证此路径是否为最终得最短路径,可以的到下图

麻省理工公开课人工智能笔记四_第2张图片

由S出发,扩展出SA与SB,因为SA=3,而SB=5,所以扩展SA得SAB=7,此时队列中SB=5最短,扩展SBA=9与SBC=9,此时SAB=7最短,扩展得SABC=11与已知最短距离相当且未到指定目标G,不再扩展,再次扩展SBA得到SBAD=12>11,不再扩展,扩展SBCE=15>11不再扩展,验证最短距离为SADG=11.

当不知道最短距离为多少时

麻省理工公开课人工智能笔记四_第3张图片

由S出发,扩展出SA与SB,因为SA=3,而SB=5,所以扩展SA得SAB=7,SAD=6,此时队列中SB=5最短,扩展SBA=9与SBC=9,此时SAD=6最短,扩展得SADG=11。这是到达目标,再使用上面得已知最短路径验证此路径为最短路径。

如何优化这个算法,最简单得可以用一个扩展列表,将队列中已经扩展到的到达中途结点的最短路径不再扩展

麻省理工公开课人工智能笔记四_第4张图片麻省理工公开课人工智能笔记四_第5张图片

如上图,A和B都扩展了两次,我们就可以在扩展到SAB和SBA时不再考虑向下扩展。

第二种方法,当我们知道某些中途点到目标的直线距离时,我们可以用启发式的思想做一些优化,例如当我们知道像下图中CG,BG,AG的距离时。

麻省理工公开课人工智能笔记四_第6张图片

麻省理工公开课人工智能笔记四_第7张图片

这里我们先不考虑用扩展列表,由S出发扩展SA=3 + 7+ = 10+,SB = 5 + 6 =11,SA短所以扩展SA得SAB=7+6=13,SAD=6 +5=11,这里出现两个11,从字母小的B开始得SBA=9 + 7+ =16+,SBC = 9 + 7+ = 16+,此时SAD最短,扩展得SADG=11到达目标,使用这个方法我们仍旧少扩展了几个结点。

这种使用中途结点到目标得方法为可容许启发式。

将这两种方法一起使用,得到得算法为A* = 分支界限+扩展列表+可容许启发式,会更快。

麻省理工公开课人工智能笔记四_第8张图片

以上就是A*算法的流程。无需排序,只需找到最小值。

如果不是基于地图的,如下图,红色为可容许启发式的值

麻省理工公开课人工智能笔记四_第9张图片

当我们使用可容许启发式计算时,可以得到下图

麻省理工公开课人工智能笔记四_第10张图片

扩展SAC是检验,且扩展到SAC不再向下检验是因为已经在SBC中到达过C节点了,这里就得不到最短路径。

最终我们得到以下结论

麻省理工公开课人工智能笔记四_第11张图片

上面是map中可容许启发式需要满足的条件,下面是所有情况都需满足的条件。

你可能感兴趣的:(课堂笔记,人工智能)