搜索算法:FF启发式与Fast Downward中的多种搜索策略
在搜索算法领域,高效地找到目标状态是核心目标。下面将详细介绍FF启发式以及Fast Downward中运用的多种搜索算法,包括贪婪最佳优先搜索、多启发式最佳优先搜索和聚焦迭代扩展搜索。
FF启发式
FF启发式得名于Hoffmann的同名规划算法,它基于忽略负交互的松弛规划任务概念。在多参数任务(MPTs)中,忽略负交互意味着假设每个状态变量可以同时持有多个值。
-
松弛规划任务
:
- 原始任务中设置变量
v
为值
d
的操作效果或公理,在松弛任务中对应于将值
d
添加到
v
假定值范围的效果或公理。
- 原始任务中的条件
v = d
对应于要求
d
是松弛任务中
v
当前假定值集合的一个元素的条件。
- 应用可解松弛规划任务中的操作不会使其不可解,反而可能使更多操作适用,更多目标为真。因此,松弛规划任务可以高效求解,尽管计算最优解仍然是NP难问题。
-
启发式估计
:FF启发式通过为从世界状态到达目标的任务生成松弛规划来估计世界状态的目标距离,生成规划中的操作数量用作启发式估计。
-
扩展到派生谓词
:可以简单假设每个派生谓词初始设置为默认值
⊥
,并将公理视为成本为0的松弛操作;也可以将派生变量初始化为给定世界状态中的实际值,让松弛规划器通过应用派生变量的扩展域转换图的转换来实现值
⊥
或其他值。这里采用了后一种方法。
-
有用动作
:FF启发式还可用于限制或偏向在给定世界状态
s
中应用的操作选择。
s
的有用动作集包括为
s
计算的松弛规划中在该状态适用的所有操作。Fast Downward可以配置为将有用动作视为首选操作。
贪婪最佳优先搜索
Fast Downward使用带有封闭列表的贪婪最佳优先搜索作为默认搜索算法,它与教科书算法有两点不同:
-
首选操作
:
- 为利用因果图启发式计算的有用转换或FF启发式计算的有用动作,该算法支持使用首选操作。给定状态的首选操作集是该状态适用操作集的子集。
- 首选操作背后的直觉是,由首选操作生成的随机后继状态更有可能接近目标,称为首选后继。
- 搜索算法通过维护两个单独的开放列表来实现这种偏好:一个包含扩展状态的所有后继,另一个仅包含首选后继。算法在扩展常规后继和首选后继之间交替进行。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始]):::startend --> B(扩展状态):::process
B --> C{后继类型}:::process
C -->|常规后继| D(放入第一个开放列表):::process
C -->|首选后继| E(放入第一个和第二个开放列表):::process
D --> F(交替扩展):::process
E --> F
F --> G{是否到达目标}:::process
G -->|是| H([结束]):::startend
G -->|否| B
-
延迟启发式评估
:
-
教科书版本的贪婪最佳优先搜索在扩展状态
s时,会计算s所有后继状态的启发式评估并相应排序到开放列表中。当s有许多后继且启发式评估成本高时,这种方法会很浪费。 -
延迟启发式评估通过不立即计算扩展状态
s的后继的启发式估计来解决这个问题。后继与状态s的启发式估计一起放入开放列表,仅在它们被扩展时计算其自身的启发式估计。 - 每个状态根据其父状态的启发式评估排序到开放列表中,初始状态除外。实际上,只需在开放列表中存储对父状态的引用和将父状态转换为后继状态的操作,以节省内存。
-
教科书版本的贪婪最佳优先搜索在扩展状态
多启发式最佳优先搜索
作为贪婪最佳优先搜索的替代方案,Fast Downward支持多启发式最佳优先搜索。该算法使用多个启发式估计器,因为不同的启发式估计器有不同的弱点。
-
启发式组合
:文献中提出了多种组合启发式的方法,通常是将各个启发式估计相加或取最大值。这里认为不将不同的启发式估计组合成单个数值通常更有益。
-
操作方式
:为每个启发式估计器维护一个单独的开放列表,根据相应的启发式进行排序。搜索算法在从每个开放列表扩展状态之间交替进行。每次扩展状态时,根据每个启发式计算估计,并将后继放入每个开放列表。
| 搜索算法 | 启发式使用 | 开放列表数量 |
| ---- | ---- | ---- |
| 贪婪最佳优先搜索 | 单个启发式 | 2(常规和首选) |
| 多启发式最佳优先搜索 | 多个启发式 | 每个启发式2个(常规和首选) |
聚焦迭代扩展搜索
聚焦迭代扩展搜索算法是Fast Downward搜索工具中最具实验性的部分。它旨在开发强调局部使用启发式标准来限制应用操作集的搜索技术。
-
修改距离
:
- 定义操作
o
相对于变量
v
的修改距离为操作
o
效果列表中受影响变量
v′
到
v
在因果图
CG(Π)
中的最小距离。
- 假设修改距离低的操作对于改变变量值最有用。
-
到达单目标过程
:
- 该过程尝试以最低可能的阈值(初始为0)找到解决方案,每次搜索失败时将阈值增加1。
- 操作根据其修改距离分配成本,修改距离超过一定阈值的操作被完全禁止。
def reach_one_goal(Π, v, d, cond):
max_threshold = ... # 最大修改距离
for ϑ in range(max_threshold + 1):
O_ϑ = [o for o in Π.operators if modification_distance(o, v) <= ϑ and not affects_cond(o, cond)]
for o in O_ϑ:
cost = modification_distance(o, v)
o.cost = cost
plan = uniform_cost_search(Π, O_ϑ, {v: d} | cond)
if plan:
return plan
return None
-
整体算法
:
- 该算法基于到达单目标方法,一次专注于一个目标,为每个目标并行启动一个到达单目标求解器。
- 为避免在目标之间振荡,要求到达单目标求解器在实现第二个目标时同时考虑第一个目标。
- 为防止不必要地偏离已满足的目标,禁止应用撤销之前已实现目标的操作,即目标保护。如果第一次求解尝试失败,算法将在不进行目标保护的情况下重新启动。
通过这些搜索算法和启发式方法,Fast Downward在搜索效率和准确性方面取得了一定的平衡,为解决复杂的规划问题提供了有力的工具。不同的算法适用于不同的场景,在实际应用中可以根据具体问题的特点选择合适的方法。
搜索算法:FF启发式与Fast Downward中的多种搜索策略(续)
聚焦迭代扩展搜索的进一步分析
聚焦迭代扩展搜索虽然具有创新性,但也存在一定的局限性。在许多规划领域,尤其是目标种类较少的领域,该算法目前并不适用。不过,它为领域无关规划提供了一个全新的思路,与当前大多数方法有很大的不同。
- 与迭代扩展算法的关联 :聚焦迭代扩展搜索的核心思想并非全新。Ginsberg和Harvey提出的迭代扩展算法,也是基于不断使用越来越多的操作集进行无信息搜索的思想。但原始的迭代扩展算法在没有问题领域知识的情况下,随机选择每个搜索节点可应用的操作集,而聚焦迭代扩展搜索则利用了因果图的启发式信息。
-
与束搜索算法的比较
:
- 相似性 :聚焦迭代扩展搜索在某些方面与束搜索算法类似。束搜索算法通过进行固定数量的并发搜索,避免过早地确定搜索路径。聚焦迭代扩展搜索同样通过并行启动多个单目标求解器,在一定程度上避免了过早陷入局部最优。
- 差异性 :束搜索使用启发式函数来评估哪些搜索分支应该放弃,哪些应该继续扩展。而聚焦迭代扩展搜索虽然乍一看没有使用启发式评估,但实际上将状态满足的目标数量作为评估标准。此外,聚焦迭代扩展搜索使用相对于特定目标的修改距离,使得不同的“束”以不同的方式探索状态空间。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始]):::startend --> B(为每个目标启动reach_one_goal):::process
B --> C{是否有目标达成}:::process
C -->|是| D(停止所有子搜索):::process
D --> E(将达成的目标加入cond):::process
E --> F{是否所有目标达成}:::process
F -->|否| B
F -->|是| G([结束]):::startend
C -->|否| H(增加阈值继续搜索):::process
H --> B
不同搜索算法的适用场景
不同的搜索算法在不同的规划场景中表现各异,以下是对各种算法适用场景的总结:
| 搜索算法 | 适用场景 | 原因 |
|---|---|---|
| FF启发式 | 适用于大多数规划问题,尤其是可以通过忽略负交互进行有效松弛规划的场景 | 基于松弛规划任务,能高效估计目标距离,且可扩展到包含派生谓词的任务 |
| 贪婪最佳优先搜索 | 当有明确的启发式信息,且希望优先探索可能接近目标的状态时 | 通过首选操作和延迟启发式评估,能在一定程度上减少搜索空间,提高搜索效率 |
| 多启发式最佳优先搜索 | 当单个启发式在某些部分搜索空间失效,需要多个启发式互补时 | 利用多个启发式估计器,避免单个启发式的弱点,更全面地引导搜索 |
| 聚焦迭代扩展搜索 | 适用于需要强调局部启发式标准,且目标之间有一定独立性的场景 | 通过局部限制操作集,一次专注一个目标,可能在某些特定领域找到高效的解决方案 |
搜索算法的优化与改进
为了进一步提高搜索算法的性能,可以考虑以下优化策略:
- 启发式信息的融合 :在多启发式最佳优先搜索中,可以尝试更复杂的启发式组合方式,不仅仅局限于相加或取最大值。例如,可以根据不同启发式在不同搜索阶段的表现,动态调整它们的权重。
- 操作集的动态调整 :在聚焦迭代扩展搜索中,可以根据搜索过程中的反馈,动态调整操作集的选择和修改距离的阈值。例如,当搜索陷入停滞时,适当放宽操作集的限制。
- 并行计算的应用 :对于多启发式最佳优先搜索和聚焦迭代扩展搜索等涉及多个并行子搜索的算法,可以充分利用并行计算的优势,提高搜索速度。
总结
搜索算法在规划问题中起着至关重要的作用。FF启发式、贪婪最佳优先搜索、多启发式最佳优先搜索和聚焦迭代扩展搜索等算法各有特点,适用于不同的场景。通过合理选择和优化这些算法,可以在复杂的规划问题中找到更高效、更准确的解决方案。未来,随着对启发式信息的深入研究和计算资源的不断提升,搜索算法有望在更多领域得到应用和发展。
在实际应用中,需要根据具体问题的特点和需求,灵活运用这些算法,并不断探索新的优化策略,以提高搜索效率和规划质量。同时,聚焦迭代扩展搜索等具有创新性的算法虽然目前还存在局限性,但为领域无关规划提供了新的思路和方向,值得进一步研究和改进。
FF启发式与Fast Downward搜索策略解析
超级会员免费看
21

被折叠的 条评论
为什么被折叠?



