IDA*对A*的改进

来源:互联网 发布:unity3d游戏开始 编辑:程序博客网 时间:2024/04/27 19:25

预先:

  • 首先你需要了解什么是A*算法(一种利用启发信息的有信息式搜索),它本身就是是对一致代价搜索的一种改进,这里不做过多的阐述。

过渡:

迭代加深(限制深度优先搜索的层数)为什么存在?

  1. 减小原先BFS存储空间的指数增长问题。O(b^d)->O(b*l),b为分支因子,d为解的深度,l为深度界限(不断加深的)。
  2. 减小DFS搜索的盲目性(应对树很深,但是目标解在较浅位置)。O(b^m)->O(b^l),m为最大深度。l为深度界限(不断加深的)。

改进:

IDA*(ID与A*结合)方法:

  • 设置阈值评估值Fmax,只对评估结果小于阈值Fmax的节点进行探索。
  • 如果没找到增加阈值继续进行A*探索。

!此处注意:很多人对于IDA*理解不同实现也不同,对于算法的实现也千奇百怪(不仅是启发函数,连增加阈值的方法也千奇百怪,最多的将新阈值为超过旧阈值的最小代价),不过总的还是要根据不同问题设计更好的算法。


IDA*特点:

对空间的消耗较少,由于剔除超阈值节点,所以从open列表选择节点拓展也是更快的。但是注意有出现重复搜索的老毛病。



1 0