下面萝莉巴嗦一大堆,无非是:观测——算法——动作,也就是传感(认知)决策(控制)执行。
STRIPS语义学框架,与琳琅满目的规划方法
这和强化学习的“观测”与“动作”如出一辙。
规划
人工智能自动规划 04:规划导论 - YEY 的博客 | YEY Blog
恭喜!你跨出了编程的屏障,踏入了规划的大门!接下来,我们要把我们的现状,和我们的目标,抽象成数据,并且使用基于学习的方法来进行规划!(奇了怪了,决策树也能学习?)
寻路可以被认为是规划的一种特定应用,但是规划这个概念还有更多的应用。就我们的”感知/思考/行动“循环而言,规划就处在”思考“阶段规划未来多个行动的时候。
(其实感觉,规划算法,或许只是在指导我们写行为树的方式?)
呃……分类算法是不是规划算法?
为问题指定模型:行动 (actions)、初始状态 (initial situation)、目标 (goals)、传感器 (sensors)。
→ 让一个求解器自动计算得到控制器。

我们得到了一些领域信息:行动、传感器、目标。我们希望利用这些信息来构建一个求解器,以便我们可以自动计算得到一个控制器,该控制器描述了 angent 在任何给定状态下应当如何采取行动。
优点:
- 强大:在某些应用中,泛化性能是非常必要的。
- 快速:可以快速搭建原型。10 行 PDDL 语言描述问题 vs. 1000 行 C++ 代码(语言生成任务)
- 灵活和清晰:修改 / 保留描述。
- 智能和领域独立性:可以自动决定如何有效对一个复杂问题进行求解。
缺点:需要一个模型;计算困难
- 效率损失:如果没有任何关于国际象棋的特定领域知识,我们不可能击败卡斯帕罗夫。
→ 二者之间的权衡:“自动且通用” vs. “手动但高效”
基于模型的方法实现的智能行为称为 AI 中的 规划(Planning)。
STRIPS
游戏AI行为决策方法——HTN 教程(附代码与项目) - 技术专栏 - Unity官方开发者社区
后向链接和前向链接的区别|极客教程
(47 封私信) AI-HTN层次任务网络规划算法文摘 - 知乎
游戏AI行为决策方法——GOAP 教程(附代码与项目) - 技术专栏 - Unity官方开发者社区
(47 封私信) 目标导向的AI系统(Goal Oriented Action Planning)技术分享 - 知乎
STRIPS 表达式 | 机器之心
人工智能自动规划 04:规划导论 - YEY 的博客 | YEY Blog
人工智能中的偏序规划-基于STRIPS语言-CSDN博客
像HTN、GOAP,以及其他的规划器Planner,通常都构建在STRIPS语义学框架下的。
世界状态分散成几种属性,它的HP、精力,敌人的HP、相距距离,计划根据这些来制定。
开始拥有一个初始状态和一个跟任务代表我们需要解决的问题。
原理是最高级的任务分解成更小的任务再继续分解直到我们解决问题。
每个高级任务都有很多方式被完成,当前世界状态决定高级任务要分解成哪组小任务。
任务
很像强化学习中的”动作空间“
废话少说,上图

接下来是长篇大论:
首先,和其它行为决策方法一样,角色内部有存储一系列要做的事。在有限状态机中是「状态」,行为树中是「动作节点」,而HTN中是 「任务(Task)」。但要注意,HTN的「任务」十分特殊,它不只是单一的动作,可能包含多个动作,总的可以分为三种:「复合任务」、「方法」以及「原子任务」。
-
原子任务,是最简单的任务,只是单一的动作,像「奔跑」、「跳跃」等就算是原子任务。通常也不建议把一个原子任务设计得太复杂。
-
复合任务,是……“哦,我知道,一定是多个原子任务组合成的,对不对?”( ⓛ ω ⓛ *),很可惜,并不完全正确。复合任务是由多个「方法」组合而成的(不是吧,我觉得是多种方法的策略抽象),而每次执行复合任务,只会选择组成它的众多「方法」之一来执行,就像行为树的选择节点一样。
-
方法,方法是HTN让角色行动丰富的关键,一个方法可以由多个「原子任务」或「复合任务」组合而成。在「方法」的帮助下,我们可以自然且清晰地构建丰富的行为。以「砍树」为例,可以构造成这个样子:
一个复合任务就像一个接口策略,实现它有很多种具体方法。
策略模式(Strategy Pattern) 是一种**行为型设计模式(Behavioral Pattern)**,其核心思想是:
定义一组可互换的算法(策略),将它们封装成独立的类,并在运行时动态选择其中一种。
世界状态
很像强化学习中的”观测空间“
从传感器解析出来,
”哪里有树、哪里有电锯、电锯有多少油……“这些 做事的前提 都可以归为「世界状态」的一员,反过来说,世界状态就是这类「前提条件」的合集,它们共同构成了HTN任务规划的基础。
在规划阶段,角色会复制一份「世界状态」的副本用于个人判断并选出可执行的任务。
其实就是传感器与模数转换的”采样、保持“阶段
规划与执行
根据世界状态,推出原子任务。
中间规划过程是怎么来的呢?
#深度优先搜索 :一直往下走,走不通(有一个不满足)回头,换条路再走,直到无路可走
#广度优先搜索 :同理。横着走。
这俩和决策树/行为树有没有联系?感觉这两种搜索就是决策树的两种具体实现顺序!
更多的方法,GOAP等等,其实都是换汤不换药……
也就是说,基本的前后端(观测空间、状态空间)没什么变换,主要就是中间过程的规划算法发生了改变。算法,浩如烟海……
方法的执行,会逐一判断组成的「复合任务」和「原子任务」是否满足条件,只要有一个不满足,这个方法便会被放弃,
它有点像行为树中的顺序节点。
这里要多说一嘴,「复合任务」和「方法」只会在HTN的规划阶段被执行。所谓「规划阶段」,就是根据「世界状态」来决定该做什么事,规划时会把要做的「复合任务」和「方法」统统分解成一个个「原子任务」。也就是说,最终角色实际执行的都是「原子任务」。
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,也就是说工厂模式让实例化推迟到子类。
PDDL规划领域定义语言
人工智能自动规划 04:规划导论 - YEY 的博客 | YEY Blog
PDDL(规划域定义语言)是基于 Strips 语言的一种扩展,如今在规划领域被广泛采用
【翻译】PDDL 入门指南本文译自 LearnPDDL ,如有错误,欢迎指出。 Let's get started wi - 掘金
一个“世界”由一组状态描述,每个状态包含一个事实和/或对象列表。 一个“世界”从一个初始状态开始,并受一组规则和约束的约束,这些规则和约束限制了在每个状态下可以采取的行动,每个行动通常代表到不同状态的转换。
在这个“世界”中,我们需要跟踪以下事物:
- 对象(Objects):“世界”中我们所感兴趣的事物。
- 谓词(Predicates):我们感兴趣的事实(例如对象的属性),可以是真或假。
- 初始状态(An Initial State):我们开始所处的“世界”状态,即开始时为真的事物。
- 目标规范(Goal Specification):我们期望的结束时的世界状态,即我们希望最终成为真实的事物。
- 行为/操作(Actions/Operators):改变世界状态的方式,即发生后能改变事实(真与假)的事情。