分层任务网络(HTN)规划是一种通过将复杂任务分解为更小、更易管理子任务来寻找解决方案的方法。本资料详细介绍了HTN的表示、全序(TOHTN)和偏序(POHTN)规划的原理、相关算法及其在Pyhop等工具中的实现。此外,它还探讨了HTN模型在非确定性、动态环境中的应用,以及如何通过不同的策略处理意外事件和实现错误恢复。
分层任务网络(HTN)规划基础
- 核心理念: HTN规划通过将复杂活动分解为一系列子任务或“食谱”,模仿人类解决问题的方式,以应对大量组合的可能性。
- 关键组成部分: 包括状态变量规划域、任务(原始任务、复合任务、目标任务)和定义如何执行任务的HTN方法。
- 全序HTN (TOHTN): 任务严格按照顺序执行,其方法定义包含头部、非原始任务、前置条件和子任务列表。
- 偏序HTN (POHTN): 任务可以部分有序,通过任务网络(包含任务节点集合和偏序关系)表示,TOHTN是POHTN的一种特殊情况。
HTN规划算法与实现
- 规划过程: 递归地应用HTN方法将非原始任务分解为子任务,直到所有任务都成为可直接执行的原始任务(对应具体动作)。
- 复杂性与表达能力: HTN规划是图灵完备的,TOHTN规划可判定但比经典规划更具表达力,某些子集可转换为经典规划或命题逻辑。
- 主要实现工具:Pyhop: 一个简单的Python HTN规划器,实现了深度优先的全序HTN向前搜索,不包含目标任务。
GTPyhop: Pyhop的扩展,支持复合任务和目标任务(如单目标和多目标),并提供了更灵活的状态和目标表示方式。
HTN在实际行动中的应用
- 动态环境挑战: 执行者的环境可能非确定性或动态,存在外部事件和意外的动作结果,导致无法回溯到之前的状态。
- HTN模型的价值: 为执行者提供操作模型,用于执行标准操作程序、处理复杂任务、避免不良结果以及从意外事件中恢复。
- 响应式HTN执行器: 类似于TO-HTN-Forward算法,但直接执行每个动作,并在方法失败时尝试其他可选方法。
- 重规划策略:Run-HLookahead: 在执行每个动作之前即时调用HTN规划器进行重规划,适用于频繁发生意外的情况。
Run-Lazy-HLookahead: 仅当当前计划用尽或动作执行失败时才进行重规划,减少规划频率。
HTN规划中的错误恢复机制
- 恢复目标: 在意外事件发生后,确保恢复过程仍能满足规划中隐含的轨迹要求(如安全规定、对其他代理的承诺或公司标准操作程序)。
- 三种恢复方法:修改TO-HTN-Act以调用HTN规划器: 在执行出错时,让规划器选择不同的方法来继续任务。
遍历解决方案树: HTN规划器返回一个完整的解决方案树,执行者遍历该树,并在执行错误时引导规划器选择不同的方法分支。
修改规划域并重新调用规划器: 在执行路径偏离预期时,通过修改初始状态和/或规划域(以反映已执行的动作和新的状态),重新调用HTN规划器来生成新的计划。

