【路径算法】IDA*与D*和Lite D* 的比较及IDA*算法详解
返回主目录:https://blog.csdn.net/eguid/article/details/154521483
返回总览:《寻路算法分类与适用场景详解,寻路算法与路径规划算法纵览:从BFS、A*到D与RRT》
IDA算法详解及与D/D* Lite的比较
IDA*算法介绍
IDA*(Iterative Deepening A*,迭代加深A*)算法是一种结合了迭代加深搜索(IDS)和A*算法优点的启发式搜索算法。
核心思想
IDA* 通过重复执行深度受限的深度优先搜索,每次迭代增加代价限制(f值限制),直到找到目标节点。
算法步骤
- 初始化:设置初始f值限制为起点的启发式值
- 深度优先搜索:在f值限制内进行DFS
- 更新限制:如果未找到目标,将限制更新为本次迭代中发现的最小超限f值
- 重复:重复步骤2-3直到找到目标
伪代码
function IDA_STAR(root)threshold = h(root)while truemin_limit = ∞result, new_threshold = DFS_CONTOUR(root, 0, threshold)if result = FOUNDreturn PATHif new_threshold = ∞return NO_PATHthreshold = new_thresholdfunction DFS_CONTOUR(node, g, threshold)f = g + h(node)if f > thresholdreturn NOT_FOUND, fif node = goalreturn FOUND, thresholdmin_limit = ∞for each child in SUCCESSORS(node)result, new_f = DFS_CONTOUR(child, g + cost(node, child), threshold)if result = FOUNDreturn FOUND, thresholdmin_limit = min(min_limit, new_f)return NOT_FOUND, min_limit
与D和Lite D 的对比
| 特性 | IDA* | D* | Lite D* |
|---|---|---|---|
| 搜索方向 | 前向搜索 | 反向搜索 | 反向搜索 |
| 适用环境 | 静态环境 | 动态环境 | 动态环境 |
| 内存使用 | 很低(只存储当前路径) | 较高(存储整个图) | 中等(增量更新) |
| 重规划能力 | 无 | 优秀 | 优秀 |
| 时间复杂度 | O(b^d) | 增量式 | 增量式 |
| 空间复杂度 | O(d) | O(n) | O(n) |
| 实现复杂度 | 简单 | 复杂 | 中等 |
关键区别总结
-
搜索策略:
- IDA*:前向搜索,迭代加深
- D*/D* Lite:反向搜索,增量更新
-
环境适应性:
- IDA*:仅适用于静态环境
- D*/D* Lite:专为动态环境设计
-
内存效率:
- IDA*:极低的内存需求(仅存储当前路径)
- D*:需要存储整个图的信息
- D* Lite:优化了内存使用,但仍需存储图结构
-
实现复杂度:
- IDA*:实现简单直观
- D*:实现复杂
- D* Lite:相对简化,但仍比IDA*复杂
-
适用场景:
- IDA*:内存受限的静态环境
- D*:需要强大重规划能力的复杂动态环境
- D* Lite:平衡了效率和复杂度的动态环境
通过上面的比较我们可以直观理解三种算法的差异和适用场景,在实际应用中可以根据具体需求选择合适的算法。
