人工智能
Planning Problems
本文介绍了规划问题的基础知识和经典方法。首先介绍了规划的定义,规划问题的概念和经典规划的特点。接着介绍了PDDL语言的基础知识和在 VS Code 中的安装方法,以及定义规划任务的三个要素。然后通过航空货物运输和积木世界的例子介绍了PDDL的求解过程,包括谬误动作和矛盾作用的处理。接下来介绍了经典规划的搜索方法,包括前向空间状态搜索和后向空间状态搜索,以及启发式算法的应用。在介绍规划图和 Graph-Plan 算法之后,本文还介绍了其他经典规划方法,包括布尔可满足性规划、一阶逻辑中的情景演算、约束满足规划和全序规划与偏序规划。接着介绍了规划与调度的概念、限制和应用,以及分层规划和多智能体规划的特点和应用。最后介绍了决策论规划中的马尔科夫决策过程和动态规划方法。
文章目录
- Planning Problems 规划问题
- Classic Planning
- Classic Planning as State-Space Search规划为状态空间搜索
- 1.2 Heuristics for planning 规划的启发法
- What is a planning graph
- 3.1 Other Approaches of Classic Planning
- 其他经典规划方法
- 3.1.1 planning as Boolean satisfiability
- 3.1.2 planning as first-order logical deduction
- 3.1.3 planning as constraint satisfaction
- 3.1.4 planning as plan refinement
- Planning and Scheduling
- 1. Planning and Scheduling 规划与调度
- 2. Solving Scheduling Problems 求解调度问题
- Real-World Planning
- Decision-theoretic Planning
Planning Problems 规划问题
What is Planning 什么是规划
物理意义:规划就是实际行动的指导,规划的目标必须具备确定性、专一性、合理性、有效性及可行性。
人工智能领域:人工智能被定义为理性动作的研究,而动作是智能体的一个关键部分,那么规划意味着制定一套行动计划来达到既定的目标。
What is Planning Problems 什么是规划问题
规划问题指对一确定的目标的未来活动在有限定资源下做出安排的这一类问题,也可以理解为制定一个达到既定目标的行动计划。
规划问题的目的为在有限的资源(时间,金钱等)的情况下,能达到更多更好的效果。
在以上的基础下,规划就是找到一个计划:它产生从任何初始状态到达一个目标状态的一系列动作。
What is Classical Planning 什么是经典规划
对规划问题的抽象描述予以一定限制和规范化,就是经典规划问题。
经典规划具有如下特征:完全可观测,唯一已知初始状态,静态环境,确定性的动作,每次仅一个动作,单一智能体
对于规划的求解我们选择要素化:用一组变量表示世界的一个状态的表示方法。可使用PDDL
语言。
将规划定义为一个搜索问题:有一个初始状态,一个action函数,一个result函数以及一个目标测试
- 状态:流(fluent)(状态变量的同义词)的合取,这些流是基元的(无变量),无函数的 原子。
- 动作模式:动作可用动作模式来描述,动作模式隐式描述了ACTIONS(s)和RESULT(s, a)
Planning Difficulties 规划的难度
相关特性 | 相关问题 |
---|---|
动作 | 是否具有确定性、是否持续一段时间、可并发执行还是串行 |
状态变量 | 离散还是连续 |
初始状态 | 有限还是任意多 |
目标 | 要达到的目标状态、要最大化回报函数 |
智能体 | 智能体个数、智能体间的合作关系 |
Problem-solving Agent vs. Planning Agent 问题求解智能体与规划智能体
问题求解智能体 | 规划智能体 | |
---|---|---|
状态(初始/目标) | 原子表示 | 因子表示:变量的集合 |
动作 | 实例化动作 | 动作模式:使用规划领域定义语言PDDL |
启发法 | 领域特定启发法 | 领域无关启发法 |
About PDDL
关于PDDL
一、PDDL
简介
PDDL
:Planning Domain Definition Language
规划领域定义语言,是一种解决人工智能规划问题的比较前沿的方法。PDDL
常用于解决智能规划问题,例如机器人将一个屋子的球搬运到另一间屋子里,通过合理的组织流程建造一间房子等。PDDL
的规划任务(planning task)由五部分组成。
- 对象:两个房间、四个球和两个机械臂。
- 谓词:x是一个房间? x是球? 球x在房间y内?机械臂x是空的吗?
- 初始状态:所有球和机器人都在第一个房间, 所有机器人手臂都是空的。
- 目标规范:所有球必须在第二个房间。
- 操作/运算符:机器人可以在房间之间移动、捡球或丢球
PDDL
指定的规划任务分为两个文件,domain
文件和 problem
文件。
1. 谓词和操作的`domain file`(域文件)。
1. 对象、初始状态和目标规范的` problem file`(问题文件)。
域文件定义如下:
(define (domain <domain name>)
<PDDL code for predicates>
<PDDL code for first action>
[...]
<PDDL code for last action>
)
问题文件定义如下:
(define (problem <problem name>)
(:domain <domain name>)
<PDDL code for objects>
<PDDL code for initial state>
<PDDL code for goal specification>
)
二、在VScode
安装PDDL
可在如下链接的引导中进行安装:http://t.csdn.cn/BvfRb
VSCode PDDL
VSCode
是建模规划域的良好工具,其扩展将PDDL
引入了一流的编程语言家族中,让其与C#、Python、JavaScript等处于同等级别。PDDL
旨在通过以下功能帮助新手并为专家赋能。
-
规划领域建模
-
通过回归或可扩展性测试用例的数量规划域验证
-
通过从模板生成问题文件来规划工业化解决方案
-
计划验证
当扩展在 .pddl
文件(通常包含域或问题定义)或选定的PDDL
命令被激活时,即可配置解释器(parser)或规划器(planner)。
Three Components to Define a Planning Task 定义规划任务的三个要素
- 状态:表示为变数的合取(fluents:从一个到另一个变化的关系)。
- 动作:用一组动作模式描述,隐式定义函数。
- 目标:表示为文字的合取(literals:一个基本的命题)。
Example 1: Air cargo transport 航空货物运输
1. PDLL
求解
定义三种action:
LoadCargo:装载
UnLoadCargo:卸载
Fly:飞行
定义三种predicates:
At(c,a)=(cargoAt ?c - cargo ?a - airport): 货物c在机场a
In(c,p)=(cargoOn ?c - cargo ?p - plane): 货物c装载在飞机p上
At(c,p)=(planeAt ?p - plane ?a - airport): 飞机p在机场a
2. 问题描述
这里引用了其他博主的图片
3. 解答
[Load(C1, P1, SFO), Fly(P1, SFO, JFK), Unload(C1, P1, JFK),Load(C2, P2, JFK), Fly(P2, JFK , SFO), Unload(C2, P2, SFO)]
4. 谬误动作
Fly(P1, JFK, JFK)
5.矛盾作用
At(P1, JFK) ∧ ¬ At(P1, JFK)
Example 2: The blocks world 积木世界
1. 问题描述
2. 问题描述
动作:Move(.), MoveToTable(.)
谓词:On(b, x)---积木b在x上(其它积木或桌子)
Clear(x)---当x上空无一物时为真。
3. 解答
Init(On(A, Table) ∧ On(B, Table) ∧ On(C, A)∧ Block(A) ∧ Block(B) ∧ Block(C) ∧ Clear(B) ∧ Clear(C))
Goal(On(A, B) ∧ On(B, C))
Action(Move(b, x, y),
PRECOND: On(b, x) ∧ Clear(b) ∧ Clear(y) ∧Block(b) ∧ Block(y) ∧(b ≠ x) ∧ (b ≠ y) ∧ (x ≠ y),
EFFECT: On(b, y) ∧ Clear(x) ∧ ¬ On(b, x) ∧ ¬ Clear(y))
Action(MoveToTable(b, x),
PRECOND: On(b, x) ∧ Clear(b) ∧ Block(b) ∧ (b ≠ x),
EFFECT: On(b, Table) ∧ Clear(x) ∧ ¬ On(b, x))
Classic Planning
Classic Planning as State-Space Search规划为状态空间搜索
1.1搜索计划的两种方式
- 前向空间状态搜索
- 后向状态空间搜索
1.1.1前向空间状态搜索
前向搜索:从初始状态出发,使用问题的动作,向前搜索目标状态
1)前向搜索容易探索到无关动作
2)规划问题常有大的状态空间
对前向搜索来说,显然,没有精确的启发式,即使相对小的问题实例也是无望的。但是规划的许多现实应用还是能自动导出非常强的独立于领域的启发知识,这使得前向搜搜具有可行性。
1.1.2后向空间状态搜索
从目标开始,向后应用动作,直到找到达到初始状态的步骤序列。在每一步考虑一组相关状态,而不是单个状态。
后向搜索的主要优点是允许我们只考虑相关的行动。如果一个行动获得目标的合取子句中的一个,我们就说这个行动同目标合取式是相关的
1.2 Heuristics for planning 规划的启发法
将搜索问题想成一个图,节点为状态,边为动作。问题是要找一条连接初始状态到目标状态的路径。
有2个方法来松弛这个问题:
1)加入更多的边,使得路径更容易被找到
2)多个节点组合到一起,将状态空间抽象为具有更少状态的形式
1.2.1 忽略前提启发法(图中添加边的方法)
(1) 丢弃动作中的所有前提,在 每个状态每个动作都适用,而且任何单个目标流能够一步获得(如果存在一个适用动作——否则,问题是不可能解的)
(2) 选择性地忽略动作的前提
1.2.2 忽略删除表启发法(图中添加边的方法)
从所有动作中移除删除表,即,从作用中删除所有的否定文字。这样就使其可以朝向目标单调进展:任何动作都不会取消另一个动作的进展。
假设所有目标和前提只含有正文字.从所有动作中去掉删除列表(效果中的负文字)得到松弛版本。这使得没有动作会抵消另一个动作的效果。
What is a planning graph
一个规划图组织成有层次的有向图:首先是初始状态层 S0,由在S0成立的每个流结点组成;然后是层A0, 由在S0适用的每个基元动作结点组成;然后是交叠的层次Si, Ai…直到达到终止条件(直到连续两层S是一模一样的为止,这时规划图达到了稳定level off).规划图只能用于命题规划问题(没有变量的规划问题)
2.1 规划图中的互斥
规划图中的互斥:如果下列三个条件之一成立,则在给定层次的两个动作间的互斥关系成立:
不一致效果:一个动作的效果否定另一个动作的效果。
冲突:一个动作的效果否定另一个动作的前提。
竞争需要:一个动作的前提之一与另一个动作的一个前提互斥。
如果一个文字是另一个文字的负,或者如果得到这两个文字的每对可能的动作是互斥的,(条件称为非一致性支持)则这同一层的两个文字之间的互斥关系成立。
从规划图获得单个目标文字的估计代价:从状态s获得任何目标文字gi的代价为gi在从初始状态s开始构建出的规划图中首次出现的层(称为gi的层次代价)。
从规划图获得合取目标的估计代价:
法1:最大层max-level启发式简单取任何目标的最大层次代价.可采纳的
法2:层次和level sum启发式遵守子目标独立性假设,返回目标的层次代价之和.可能不是可采纳的
法3:集合层次set-level启发式找到合取目标中的所有文字出现在规划图中的层次,这一层
没有任何一对目标文字是互斥的。
2.2 有蛋糕和吃蛋糕
Init(Have(Cake))
Goal(Have(Cake)∧Eaten(Cake))
Action(Eat(Cake))
PRECOND: Have(Cake)
EFFECT: ¬ Have(Cake) ∧ Eaten(Cake))
Action(Bake(Cake)
PRECOND: ¬ Have(Cake)
EFFECT: Have(Cake)
2.3 备用轮胎问题
Init(Tire(Flat) ∧ Tire(Spare) ∧ At(Flat, Axle) ∧ At(Spare, Trunk))
Goal(At(Spare, Axle))
Action(Remove(obj, loc),
PRECOND: At(obj, loc)
EFFECT: ¬ At(obj, loc) ∧ At(obj , Ground))
Action(PutOn(t, Axle),
PRECOND: Tire(t) ∧ At(t, Ground) ∧ ¬ At(Flat, Axle)
EFFECT: ¬ At(t, Ground) ∧ At(t, Axle))
Action(LeaveOvernight,
PRECOND:
EFFECT: ¬ At(Spare, Ground) ∧ ¬ At(Spare, Axle) ∧ ¬ At(Spare, Trunk) ∧
¬ At(Flat, Ground) ∧ ¬ At(Flat, Axle) ∧ ¬ At(Flat, Trunk))
初始状态是车轴上有一个瘪的轮胎并且后备箱里有一个好的备胎,而目标是将这个备胎正确地装在车轴上。
2.4 Graph-Plan算法
function GRAPH-PLAN(problem) returns solution or failure
graph ← INITIAL-PLAN-GRAPH (problem)
goals ← CONJUNCTS(problem.GOAL)
nogoods ←an empty hash table
for tl = 0 to ∞ do
if goals all non-mutex in St of graph then
solution ← EXTRACT-SOLUTION(graph, goals, NUMLEVELS(graph), nogoods)
if solution ≠ failure then return solution
if graph and nogoods have both leveled off then return failure
graph ← EXPAND-GRAPH(graph, problem)
调用EXPAND-GRAPH来增加一层,直到通过调用EXTRACT-SOLUTION找到一个解,或者没有可能存在的解。
3.1 Other Approaches of Classic Planning
其他经典规划方法
- planning as Boolean satisfiability 化作布尔可满足性的规划
- planning as first-order logical deduction 化作一阶逻辑推理的规划
- planning as constraint satisfaction 化作约束满足的规划
- planning as plan refinement 化作规划精进的规划
3.1.1 planning as Boolean satisfiability
SAT问题是命题逻辑公式(propositional logical formula)的可满足性判定问题。基于命题逻辑,SAT问题可以进一步被描述为:给定一个命题逻辑公式f,公式f由子句集S组成,其中S由一组布尔变量V组成,判定是否存在一组对于f的赋值使得f中所有子句取值为真,如果存在,则称公式f可满足;否则,f不可满足。判定f是否可满足是SAT问题的核心。
任何命题逻辑公式可以表达为合取范式。即:SAT问题可以求解任何命题逻辑公式。
- 可满足表达式
如果给定布尔表达式的变量可一直被TRUE和FALSE值替换,使得表达式的结果为TRUE。
- 不可满足表达式
如果没有这样的赋值存在,即对所有可能的变量赋值,该布尔表达式的结果始终FALSE。
- 可满足表达式
表达式 “ a AND NOT b” 是可满足的,因为人们可以找到值
a = TRUE, and b = FALSE
使得表达式 “ a AND NOT b”为TRUE。
- 不可满足表达式
表达式 “a AND NOT b” 是不可满足的。
3.1.2 planning as first-order logical deduction
PDDL难以表达某些规划问题:
例如无法表示如下目标,“把所有的货物从A移到B,不管有多少件货物”。
命题逻辑对某些规划问题也有局限性:
例如无法表达:“智能体若在时间1执行了一个右转则将在时间2时朝南;否则将朝东。
一阶逻辑则让我们摆脱这些局限性。
一阶逻辑中的情景演算
1)初始状态称为一个情景。一个解是满足目标的动作序列。
2)可将一个情景转变到下一个的函数或关系是变数。
3)每个动作的前提用一个可能性公理来描述。
4)每个变数用一个后记状态公理来描述。
5)需要唯一动作公理以便智能体能够对其进行推理。
3.1.3 planning as constraint satisfaction
我们已经知道
约束满足与布尔可满足性有许多共性,
CSP (约束满足问题) 技术对调度问题很有效。
因此我们可以
将有界规划问题进行编码为CSP,例如,寻找一个长度为k的规划的问题;
还可以将规划图编码为CSP。
3.1.4 planning as plan refinement
1)全序规划
全序规划是由迄今为止我们学到的所有方法所构建的,由严格的线性动作序列组成。
这种表示忽视了许多子问题是独立的这个事实。
2)偏序规划
替代方式是将规划表示为偏序结构。
这种表示是一组动作和一组形式为Before(ai , aj )的约束,表示一个动作在另一个之前发生。
Planning and Scheduling
1. Planning and Scheduling 规划与调度
1.1 The planning and scheduling in the real world 现实中的规划与调度
现实中的规划与调度算法往往更加复杂,例如:
- 航天器任务规划与调度:航天器任务规划与调度需要考虑多个因素,如天文学目标、地球天气、卫星轨道和燃料等因素。例如,NASA的航天器任务规划员需要制定任务计划、轨道调整和数据传输计划,以确保航天器能够顺利地完成各项任务。
- 工厂生产调度:工厂生产调度需要考虑多个因素,如原材料储备、生产线效率和人员配备等因素。例如,汽车制造公司的生产调度员需要制定生产计划、生产线调整和人员安排,以确保工厂能够按时生产出高质量的汽车。
- 军事行动规划与调度:军事行动规划与调度需要考虑多个因素,如敌方军力、地形地貌和气候条件等因素。例如,军队指挥官需要制定作战计划、部队调度和武器装备安排,以确保军队能够在战场上有效执行任务。
在这些规划与调度的例子中,关键因素往往是不确定和动态的,需要考虑到语言,规划者与外部环境交互的方式等,所以就要不断地进行调整和优化。因此,使用高效的算法和技术来辅助规划与调度是非常重要的。
1.2 Classical Planning and Its Limitation 经典规划及其局限性
经典规划的作用
- 可以表示做什么,例如:
- 运输问题:运输问题是指在给定的供应地和需求地之间,如何安排运输路线和运输量,以满足需求并最小化总运输成本的问题。经典规划可以用来表示运输问题,并通过搜索算法求解最优解。
- 机器人控制问题:机器人控制问题是指如何安排机器人的动作序列和路径规划,以实现某个特定的任务或目标。经典规划可以用来表示机器人控制问题,并通过搜索算法求解最优解。
- 可以表示按照什么顺序,例如:
- 任务调度问题:任务调度问题是指在给定的资源和任务之间,如何安排任务执行顺序和资源分配,以最小化总执行时间或最大化资源利用率的问题。经典规划可以用来表示任务调度问题,并通过搜索算法求解最优解。
- 生产调度问题:生产调度问题是指在给定的生产线和生产任务之间,如何安排生产顺序和资源分配,以最小化总生产成本或最大化生产效率的问题。经典规划可以用来表示生产调度问题,并通过搜索算法求解最优解。
经典规划的局限性
- 不能表示动作持续多长时间,例如:
- 连续状态和行动问题:经典规划只适用于离散状态和离散行动的问题,对于连续状态和行动的问题,经典规划无法有效地表示和求解。
- 大规模问题:随着问题规模的增加,状态空间中的状态数量会呈指数级增长,导致经典规划算法的计算复杂度急剧增加。对于大规模问题,经典规划算法的求解时间可能会非常长,甚至无法计算。
- 不能表示什么时候发生,例如:
- 不确定性问题:经典规划通常是在完全已知的状态空间和行动集合上进行求解的,对于存在不确定性和随机性的问题,经典规划算法可能无法有效地求解。
- 动态环境问题:对于动态环境下的问题,经典规划算法可能无法及时响应环境变化,并产生无效的解决方案。
1.3 Plan First and Schedule Later 先规划后调度
规划阶段(Planning phase):选择具有某种有序约束的动作,去满足问题的目标。
- 确定目标和战略。首先需要确定组织的发展目标和战略方向,作为规划的基点和方向。这通常通过环境分析、竞争对手分析以及内部评估来决定。
- 概念分析。对目标和战略进行深入分析,产出相关要素及其关系构成的概念框架,明确各要素的作用和地位,为后续规划奠定基础。
- 工作分解。将上一步得到的概念和要素进一步细化和拆分为实际工作任务,形成具体项目组成。工作分解需要考虑责任主体、交付物、时限限制等。
- 时序安排。对各工作任务进行依赖关系分析,并在时间维度上进行安排,合理确定每个任务的开始、完成时间及时限,形成项目时间表和进度计划。
- 资源分配。根据工作量和时限要求,为各任务分配合理且充分的人力、物力、财力资源,确保各工作任务可以按计划实施。
调度阶段(Scheduling phase):在规划中增加时间信息,去满足资源和期限的约束。
- 对实际进度和资源使用情况进行跟踪监控,分析存在的偏差原因并作出调整。
- 根据动态环境变化对规划进行评估和调整,适应不同条件下的规划实施,保证目标的达成。这包括适当前后推迟、增加/减少工作、变更责任主体等。
- 组织协调,确保各部门和责任主体在实施过程中保持有效沟通合作,避免工作重复或遗漏。
- 肩负检查和验收职责,对工作完成产出进行检查评估,验收其是否符合设定要求,达到预期效果。只有通过验收,工作才被视为完成。
1.4 Representing Temporal and Resource Constraints 表征时间和资源约束
- 调度问题包含一系列作业,每个作业包含一组具有顺序约束的动作。每个动作有一段持续时间和一组资源约束。每个资源约束指定:类型、数量、可消费或可重用。动作可以产生资源,包括制造、增产、以及供给动作。解决方案需要对每个动作指定起始时间,并且要满足所有的时间顺序约束和资源约束。
时间约束(Temporal Constraints)
- 时间约束:指项目各工作任务的最迟开始时间和最早完成时间的限制条件。它主要由任务间的前后依赖关系以及项目的总工期等因素决定。合理设置时间约束,能有效规范工作进度,确保项目按时完成。
资源约束(Resource Constraints)
- 资源约束:指项目各工作任务对人力、物力等资源的需求量限制条件。它主要由资源供给能力和各任务需求量确定。合理设置资源约束,能确保资源使用的高效性和节约性。保证关键资源不会出现短缺,影响工作进度。
1.5 Example: A job-shop scheduling 车间作业调度
A job-shop scheduling for assembling two cars 组装两辆汽车的车间作业调度
2. Solving Scheduling Problems 求解调度问题
有向图(Directed Graph)
- 有向图(Directed Graph):是arcs(有向边)带有方向的图。在有向图中,每条边都有一个 direction(方向)。这表示从一个顶点指向另一个顶点。
关键路径法(Critical Path Method)
- 定义:关键路径法(Critical Path Method,简称CPM)是指在项目网络计划中确定项目完成时间的最长一条线路称为关键路径所使用的技术。它通过分析工序时间限制条件和工序间的前后关系来确定关键路径。
- 主要作用:
- 确定项目的完成时间。关键路径的结束时间就是项目的完成时间。
- 优化项目计划及资源分配。通过压缩关键路径的持续时间来提早或推迟项目结束时间。
- 对项目进度进行监控和控制。只要随着关键路径完成度的提高,项目进度 naturally 朝着完成方向发展。
- 主要特征:
- 关键路径上的工序持续时期之和等于项目总时间。其他非关键路径上的工序时间可以通过压缩来延长或缩短关键路径时间,但不影响项目总时间。
- 关键路径上的任何工序出现延误都会导致项目完成时间延迟。非关键路径上的工序延误影响较小。
- 关键路径上的资源分配和调度尤为重要。其他资源可以根据实际情况灵活分配,但不能影响关键路径的完成。
求解调度问题(Solving Scheduling Problems)
- 要使规划持续时间最短,必须找到与排序约束一致的所有动作的最早开始时间。将这些排序约束视为一个有向图。
- 可以将关键路径法 (CPM) 用于该图,来确定每个动作可能的开始与结束时间。一个表示偏序计划的图的路径是一个线性排序的动作序列。
- 如果我们引入资源约束,所导致的开始和结束时间的约束变得更加复杂。左边列出了三个可重用资源,并且,动作与它们所使用的资源水平对齐显示。
Real-World Planning
1.Hierarchical Planning 分层规划
1.1 什么是分层规划?
Classical planning vs Hierarchical planning 经典规划和分层规划
分层规划(Hierarchical Planning)是一种规划方法,它将任务分解为一系列较小的子任务,并将它们组合成一个完整的计划。分层规划通常涉及到两个层次:高层次规划和低层次规划。高层次规划考虑整个问题,并将问题分解成较小的子问题。低层次规划考虑子问题,并生成解决方案以完成任务。高层次规划将低层次规划中的解决方案组合成一个整体解决方案,从而完成任务。每个层次都解决一个特定的子问题。这些层次按照一定的顺序组织,并且每个层次都与其前后的层次紧密关联。分层规划是一种高效的规划方法,可以处理大型和复杂的问题。
经典规划(Classical planning)是另一种规划方法,它通常被用来解决单一问题,其目的是找到最优的解决方案。经典规划的算法通常由三个部分组成:状态空间、动作和目标函数。状态空间表示问题的所有可能状态,动作是从一个状态到另一个状态的转换,而目标函数则是用于评估每个解决方案的优劣。
分层规划相关概念
- 分层策略(Hierarchical Strategy):指高层次规划决定如何将问题分解为较小的子问题的策略。
- 层次结构:层次结构是分层规划的核心,它是由多个层次组成的,每个层次都与其前后的层次紧密关联。层次结构通常从上到下排列,每个层次都解决一个特定的子问题。
- 分层规划器(Hierarchical Planner):指实现分层规划算法的程序。
- 抽象(Abstraction):指高层次规划器通过忽略低层次规划器中的细节,将问题转化为更高层次的问题的方法。
- 任务分解(Task Decomposition):指将整个任务分解为多个子任务的过程。
经典规划相关概念
- 状态空间:状态空间是经典规划中的一个重要概念,它表示所有可能的状态。状态空间通常由状态集合和状态之间的转换函数组成。
- 动作:动作是经典规划中的另一个重要概念,它表示从一个状态到另一个状态的转换。每个动作都与一个成本或价值相关联,以便评估每个解决方案的优劣。
1.2 分层规划的特点
分层规划的主要优点是可以减少计算复杂性,提高规划的效率。它还可以使规划更容易实现,并且更容易理解。分层规划的主要缺点是可能会丢失一些重要的细节信息,从而导致规划结果不准确。另外,分层规划可能需要一定的人工干预和领域知识,以便正确地选择分解策略和抽象方法。分层规划的缺点在于:需要事先确定问题的分解方法,如果分解方法不正确,可能会导致问题无法求解;不同子问题之间的相互影响可能会导致解的不一致性。
1.3 分层规划的应用
分层规划已经被广泛应用于各种领域,例如自动化、机器人技术、物流管理、制造业等。以下是一些具体的应用场景:
- 机器人路径规划:分层规划可以将整个路径规划问题分解为多个子问题,例如避障、动作选择等。
- 物流管理:分层规划可以将整个物流管理问题分解为多个子问题,例如订单管理、仓库管理等。
- 制造业生产计划:分层规划可以将整个生产计划问题分解为多个子问题,例如生产线安排、生产任务分配等。
2.Multi-agent Planning 多智能体规划
2.1 什么是多智能体规划?
多智能体规划(Multi-Agent Planning)是一种规划方法,它涉及到多个智能体的合作,以实现某些任务。每个智能体都有自己的目标和能力,并能够相互通信和协作以实现共同的目标。多智能体规划的目标是实现高效的合作,以便在满足所有智能体的目标的同时,最大化整体效益。
多智能体规划问题是指对于多个智能体参与的问题,对其行动序列进行计划、协调和优化的过程。相较于单个智能体的规划,多智能体规划面临更复杂的情况和挑战。
与单智能体规划不同的是,多智能体规划需要考虑智能体之间的相互作用,以及不同智能体的目标之间的关联。因此,多智能体规划涉及到许多重要的概念和术语,如智能体的约束、合作、博弈等。
多智能体规划相关概念
- 合作(Cooperation):指智能体之间相互作用和协作的过程。
- 协议(Protocol):指智能体之间交流和协商的标准方法。
- 对抗(Competition):指智能体之间竞争和冲突的过程。
- 博弈论(Game Theory):指分析智能体之间相互作用和协作的数学理论。
2.2 多智能体规划的特点
- 需要考虑多智能体之间的相互作用。
- 智能体之间的关系常常是动态的和不确定的。
- 需要考虑智能体的合作与竞争关系。
- 需要在有限的时间和资源下完成规划。
多智能体规划的优点在于:能够考虑到多个智能体之间的相互影响,从而使得整个系统达到最优状态;能够适应动态环境,对环境的变化做出快速反应。多智能体规划的缺点在于:需要考虑多个智能体之间的协作或竞争关系,从而增加了问题的复杂度;需要设计相应的协商和执行机制,使得各个智能体能够协调一致地行动。
2.3 多智能体规划的应用
在实际应用中,多智能体规划被广泛应用于机器人控制、自主驾驶、团队合作等领域。例如,多个机器人在一个工厂中协同完成任务时,需要进行多智能体规划以确保工作的高效性和安全性。
一些常用的多智能体规划算法和技术
-
集体智能算法(Swarm Intelligence Algorithm):集体智能算法是一种仿生计算方法,借鉴了大量生物的行为和进化策略。例如,蚁群算法和粒子群算法等,可以应用于多智能体协同规划中。
蚁群算法
蚁群算法是一种基于蚂蚁觅食行为的启发式算法,最初是由Dorigo等人提出的。它的基本思想是模拟蚂蚁在觅食过程中的信息素沉积和信息素挥发,通过信息素的作用,使蚂蚁在搜索过程中逐渐聚集到最优解。蚁群算法的应用场景比较广泛,比如在图像处理、组合优化、机器学习等领域都有应用。其主要优点包括:
-
蚁群算法具有较好的全局搜索能力,能够找到全局最优解;
-
蚁群算法能够自适应地调整搜索策略,具有较强的鲁棒性和适应性;
-
蚁群算法具有分布式处理的能力,能够处理大规模问题。
粒子群算法
粒子群算法是一种基于鸟类群体行为的优化算法,最初是由Kennedy和Eberhart提出的。它的基本思想是通过模拟鸟类群体觅食的行为,不断调整每个粒子的位置和速度,使其逐渐靠近最优解。粒子群算法的应用场景主要是在函数优化和机器学习等领域。其主要优点包括:
- 粒子群算法具有较好的全局搜索能力,能够找到全局最优解;
- 粒子群算法具有较快的收敛速度,能够在较短的时间内找到较优解;
- 粒子群算法能够自适应地调整搜索策略,具有较强的鲁棒性和适应性。
-
-
协调搜索算法(Coordinated Search Algorithm):协调搜索算法是指智能体根据自身任务目标,与其他智能体进行交互和协调,以实现多智能体任务的协同执行。
-
博弈论(Game Theory):博弈论是研究智能体之间的决策和策略的一种数学工具,可以用于多智能体规划中,以找到智能体之间的合作和博弈策略。
-
一致性协议(Consensus Protocol):一致性协议是指多智能体系统中智能体之间达成一致的一种协议,可以应用于多智能体任务分配和路线规划等问题。
Decision-theoretic Planning
1.Markov Decision Process 马柯夫决策过程
1.1 马尔科夫过程(MP)和马尔科夫奖励过程(MRP)是什么
马尔科夫过程(Markov Process)
在一个时序过程中,如果t+1时刻的状态仅取决于t时刻的状态 S t S_{t} St与之前的任何状态都无关时,则认为t时刻的状态 S t S_{t} St具有马尔科夫性(Markov Property)。若过程中的每一个状态都具有马尔科夫性,则认为整个过程具备了马尔科夫性。具备了马尔科夫性的随机过程称为马尔可夫过程(Markov Process),又称马尔科夫链(Markov Chain)。简而言之就是事件发生的整个过程,每个时刻的状态只与该时刻上个时刻的状态有关。如图1所示,一个学生需要通过课程最终通过考试,但是这过程中学生会受到外界世界的诱惑,例如:玩手机、泡吧、休息等,图中黄色的圆中的数字是状态转移概率。当学生开始第一节课后会有一系列的可能时间序列产生。
- 第一节课——第二节课——第三节课——考试通过——休息
- 第一节课——玩手机——玩手机——第二节课——第三节课——考试通过——休息
- 第一节课——第二节课——第三节课——泡吧——第一节课——第二节课——第三节课——考试通过——休息
- …
从马尔科夫过程给定的状态概率矩阵生成的一个状态序列过程称为采样(Sample),采样将获得一系列的状态转换过程称为状态序列(Episode)。
马尔科夫奖励过程(Markov Reward Process, MRP)
如果把奖励考虑进马尔科夫过程,则称为马尔科夫奖励过程(Markov Reward Process, MRP)。它是由一个4元组 $ (S, P, R, \gamma) 组成,其中: 组成,其中: 组成,其中:S 代表一个有限的状态集; 代表一个有限的状态集; 代表一个有限的状态集;P 代表集合中状态转移概率矩阵; 代表集合中状态转移概率矩阵; 代表集合中状态转移概率矩阵;R 代表了奖励函数; 代表了奖励函数; 代表了奖励函数;γ$代表了衰减因子一般γ取值在0和1之间。
为了更好的理解MRP过程,我们继续沿用MP中的学生学习的例子。如图2所示,学生在学习考试直至休息的整个过程中每一步都会得到一定的Reward。上课会导致精神疲惫,学生所获得的Reward为-2,泡吧可以是身心愉悦,因此所获得的Reward为1,但从整个学习过程来看泡吧后的每一步都会使得Reward变为-2,因此这个看似短暂正向的激励其实对整个过程的贡献是消极的。从某个状态
S
t
S_{t}
St直至终止状态,完成这个序列的累计奖励为收获(Return)。其数学表达式为:
G
t
=
R
t
+
1
+
γ
R
t
+
2
+
.
.
.
=
∑
k
=
0
∞
γ
k
R
t
+
k
+
1
G_{t}=R_{t+1}+γR_{t+2}+...=\sum_{k=0}^{∞}{γ^{k}R_{t+k+1}}
Gt=Rt+1+γRt+2+...=k=0∑∞γkRt+k+1
其中引入衰减因子γ其范围为[0, 1],引入衰减因子为了降低长久的未来奖励对当前收获的影响,当γ=1时未来每一步获得奖励重要性均等,当γ=0时未来奖励对当前收获无影响。
为了描述当前状态 重要性,强化学习中引入价值的概念。价值(Value)是马尔科夫奖励过程中收获的期望,其数学表达式为:
V
s
=
E
[
G
t
∣
S
t
=
s
]
V_{s}=E[G_{t}|S_{t}=s]
Vs=E[Gt∣St=s]
一个状态的价值是该状态的收获的期望,也就是说从该状态开始依据概率转移矩阵采样生成一系列的状态序列,对每一个状态序列计算该状态的收获,然后对该状态的所有收获计算平均值得到一个平均收获,当采样越多,计算得到的平均收获约接近该状态的价值。如果存在一个函数,给定一个状态就能得到该状态的价值,则称该函数为价值函数(Value Function),价值函数建立了价值与状态之间的映射。
但通过计算收获的平均值来计算状态价值并不现实,因为马尔科夫过程针对一个状态会有很多的状态序列。为了便于计算每个状态的价值,我们试着将价值函数中的收获按照其定义进行展开:
V
s
=
E
[
G
t
∣
S
t
=
s
]
=
E
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
R
t
+
3
.
.
.
.
∣
S
t
=
s
]
=
E
[
R
t
+
1
+
γ
(
R
t
+
2
+
γ
R
t
=
3
.
.
.
)
∣
S
t
=
s
]
V_{s}=E[G_{t}|S_{t}=s]=E[R_{t+1}+γR_{t+2}+γ^{2}R_{t+3}....|S_{t}=s]=E[R_{t+1}+γ(R_{t+2}+γR_{t=3}...)|S_{t}=s]
Vs=E[Gt∣St=s]=E[Rt+1+γRt+2+γ2Rt+3....∣St=s]=E[Rt+1+γ(Rt+2+γRt=3...)∣St=s]
因此,最终t时刻状态下的价值
V
s
V_{s}
Vs由三部分组成,分别是
t
+
1
t+1
t+1时刻的收获
R
t
+
1
R_{t+1}
Rt+1,
t
+
1
t+1
t+1时刻价值
V
(
S
t
+
1
)
V(S_{t+1})
V(St+1)及衰减因子
γ
γ
γ决定。如果用
s
′
s^{'}
s′表示
s
s
s状态下一时刻任意可能状态,则:
V
S
=
R
s
+
γ
Σ
P
s
s
′
V
s
′
V_{S}=R_{s}+γΣP_{ss_{'}}V_{s'}
VS=Rs+γΣPss′Vs′
该式是马尔科夫过程的贝尔曼方程(Bellman Equation),其含义为某个状态的价值函数由该状态的奖励以及后续状态价值与状态转移概率和衰减因子共同组成。
1.2 马柯夫决策过程(MDP)是什么
-
马柯夫决策过程(Markov Decision Process, MDP)是一种离散时间随机控制过程。在马尔科夫决策过程中,智能体依据策略对动作的选择与历史无关,只与当前状态有关,在不同状态下智能体大概率产生不同动作,在同一状态下也可能因为策略的制定智能体有不同的动作。例如 ε ε ε-greedy算法在相同的状态下会有一定比例的随机动作的选择,因为在不同的策略下会产生不同的马尔科夫奖励过程,进而有不同的状态价值函数,因此对于价值函数的定义在马尔科夫决策过程中需要进行拓展。
-
一个马柯夫决策过程是一个5元组 ( S , A , P , R , γ ) (S, A, P, R, \gamma) (S,A,P,R,γ), 其中
- 一个状态集 , s ∈ S 一个状态集, s \in S 一个状态集,s∈S
- 一个动作集 , a ∈ A 一个动作集, a \in A 一个动作集,a∈A
- 一个迁移模型 , T ( s , a , s ′ ) 一个迁移模型, T\left(s, a, s^{\prime}\right) 一个迁移模型,T(s,a,s′)
- 从 s 导出 s ′ 的概率 , 即 : P ( s ′ ∣ s , a ) 从s导出s'的概率, 即: P\left(s^{\prime} \mid s, a\right) 从s导出s′的概率,即:P(s′∣s,a)
- 一个回报函数 , R ( s , a , s ′ ) 衰减 , γ ∈ [ 0 , 1 ] 一个回报函数, R\left(s, a, s^{\prime}\right) 衰减, \gamma \in[0,1] 一个回报函数,R(s,a,s′)衰减,γ∈[0,1]
1.3 核心问题
找到一个控制马尔可夫决策过程的策略是MDP中的核心问题。给定一个MDP(S,A,P,R,γ),一个策略是一个计算函数 π \pi π,它对每个状态 s s s 生成一个动作 a a a。
马尔科夫决策过程引入策略(Policy)的概念常用 π π π表示,其表示在当前状态下智能体从动作(Action)集合中选择一个动作的概率分布,其数学表达式为: π ( a ∣ s ) = P [ A t = a ∣ S t = s ] π(a|s)=P[A_{t}=a|S_{t}=s] π(a∣s)=P[At=a∣St=s]
-
一个确定性策略被定义为: π : S → A \pi : S\rightarrow A π:S→A
-
一个随机策略也可以被定义为: π : S × A → [ 0 , 1 ] , w h e r e π ( s , a ) ≥ 0 a n d ∑ a π ( s , a ) = 1 \pi : S\times A \rightarrow [0,1], where ~\pi(s,a)\geq 0~ and~ \sum_{a} \pi(s, a)=1 π:S×A→[0,1],where π(s,a)≥0 and ∑aπ(s,a)=1
目标是选择一个策略 π \pi π ,使随机回报值的一些累积函数最大化。
因为在不同的策略下会产生不同的马尔科夫奖励过程,进而有不同的状态价值函数,因此对于价值函数的定义在马尔科夫决策过程中需要进行拓展。 是基于策略
π
π
π时的状态价值函数,其表示遵循
π
π
π策略时所获得的收获的期望:
V
π
(
s
)
=
E
[
G
t
∣
S
t
=
s
]
V_{π}(s)=E[G_{t}|S_{t}=s]
Vπ(s)=E[Gt∣St=s]
由于引入了动作,为了描述在同一状态下采取不同动作所带来的价值,在此引入基于策略
π
π
π的动作价值函数
Q
π
(
s
,
a
)
Q_{π}(s, a)
Qπ(s,a),其表示在状态s下采取a动作所能得到收获的期望,其数学表达式为:
Q
π
(
s
,
a
)
=
E
[
G
t
∣
S
t
=
s
∣
,
A
t
=
a
]
Q_{π}(s, a)=E[G_{t}|S_{t}=s|, A_{t}=a]
Qπ(s,a)=E[Gt∣St=s∣,At=a]
因此我们可以得到基于策略π的状态价值函数和动作价值函数的贝尔曼方程,如下:
V
π
(
s
)
=
E
[
R
t
+
1
+
γ
V
π
(
s
′
)
∣
S
t
=
s
,
A
t
=
a
]
V_{π}(s)=E[R_{t+1}+γV_{π}(s')|S_{t}=s, A_{t}=a]
Vπ(s)=E[Rt+1+γVπ(s′)∣St=s,At=a]
Q π ( s , a ) = E [ R t + 1 + Q π ( s ′ , a ′ ) ∣ S t = s , A t = a ] Q_{π}(s, a)=E[R_{t+1}+Q_{π}(s', a')|S_{t}=s, A_{t}=a] Qπ(s,a)=E[Rt+1+Qπ(s′,a′)∣St=s,At=a]
2.Dynamic Programming 动态规划
2.1 效用和优化策略
效用
-
在顺序决策问题中,偏好由状态顺序之间的顺序来表示。通常采用一个累加效用函数: U ( [ s 0 , s 1 , s 2 , … ] ) = R ( s 0 ) + R ( s 1 ) + R ( s 2 ) + … = ∑ i R ( s i ) U\left(\left[s_{0}, s_{1}, s_{2}, \ldots\right]\right)=R\left(s_{0}\right)+R\left(s_{1}\right)+R\left(s_{2}\right)+\ldots=\sum_{i} R\left(s_{i}\right) U([s0,s1,s2,…])=R(s0)+R(s1)+R(s2)+…=∑iR(si)
-
一个状态(亦称其值)的效用被定义为: U ( s i ) = U\left(s_{i}\right)= U(si)=假设最佳动作结束之前的预期回报值的总和
优化策略
- 值迭代
- 策略迭代
区别与联系
区别:Policy Iteration通常是policy evaluation+policy improvement交替执行直到收敛。Value iteration通常是寻找Optimal value function+一次policy extraction,它们不用交替执行,因为值函数最优,策略通常也是最优
联系:策略迭代和值迭代都属于动态规划算法。值迭代算法是策略评估过程只进行一次迭代的策略迭代算法。
2.2 策略迭代
什么是策略迭代
策略迭代包括策略评估(policy evaluation)和策略改进(policy improvement)。
π
0
⟶
E
v
π
0
⟶
I
π
1
⟶
E
v
π
1
⟶
I
π
2
⟶
E
⋯
⟶
I
π
∗
⟶
E
v
∗
\pi_{0} \stackrel{\mathrm{E}}{\longrightarrow} v_{\pi_{0}} \stackrel{\mathrm{I}}{\longrightarrow} \pi_{1} \stackrel{\mathrm{E}}{\longrightarrow} v_{\pi_{1}} \stackrel{\mathrm{I}}{\longrightarrow} \pi_{2} \stackrel{\mathrm{E}}{\longrightarrow} \cdots \stackrel{\mathrm{I}}{\longrightarrow} \pi_{*} \stackrel{\mathrm{E}}{\longrightarrow} v_{*}
π0⟶Evπ0⟶Iπ1⟶Evπ1⟶Iπ2⟶E⋯⟶Iπ∗⟶Ev∗
E
E
E 代表策略评估,
I
I
I 代表策略改进。每一个策略都保证比前一个更优(除非前一个已经是最优的了)
每一次策略评估都是一个迭代计算过程。每次进行策略评估时,需要基于前一个策略的价值函数开始计算。这通常会显著提高策略评估的收敛速度(很可能是因为从一个策略到另一个策略时,价值函数的改变比较小)。策略评估就是在当前策略下计算出每个状态下的状态值。策略改进就是根据策略评估计算的状态值对策略进行改进,计算出新的策略。
基本思想
交替执行下面两个阶段
-
策略迭代:定一个策略 π i \pi_{i} πi,如果 π i \pi_{i} πi 被执行的话, 计算每个状态的效用 U i U_{i} Ui。
-
使用基于 U i U_{i} Ui 的提前看一步法, 计算一个新的MEU (最大期待效用) 策略 π i + 1 \pi_{i+1} πi+1 。
π ∗ ( s ) = γ argmax α ∈ A ( s ) ∑ s ′ P ( s ′ ∣ s , a ) U ( s ′ ) \pi^{*}(s)=\gamma ~ \underset{\alpha \in A(s)}{\operatorname{argmax}} \sum_{s^{\prime}} P\left(s^{\prime} \mid s, a\right) U\left(s^{\prime}\right) π∗(s)=γ α∈A(s)argmax∑s′P(s′∣s,a)U(s′)
伪代码
2.3 值迭代
什么是值迭代
策略迭代的一个问题就是每一次策略的提升都需要计算新策略的价值 v π v^{π} vπ ,计算一个策略的价值本身又需要一次迭代算法。我们有必要精确的知道 v π v^{π} vπ 吗?实际上可能是不需要的,假设策略评估需要100次迭代,那么我们能否只迭代50次就开始策略提升呢?答案是肯定的。更加极端的是只进行一次策略评估就进行策略提升,这就是本节的算法——价值迭代。因为只有一次策略评估,我们可以把它整合到策略提升的公式里,这样看起来我们一种在更新价值,所以这个算法就叫价值迭代。
基本思想
-
计算每个状态的效用,然后使用该状态效用在每个状态中选择一个最佳动作。
-
不使用 π \pi π函数,而 π \pi π值在 U ( s ) U(s) U(s)中计算。
-
值迭代算法的基础:贝尔曼效用等式 U ( s ) = R ( s ) + γ max α ∈ A ( s ) ∑ s ′ P ( s ′ ∣ s , a ) U ( s ′ ) U(s)=R(s)+\gamma \max _{\alpha \in A(s)} \sum_{s^{\prime}} P\left(s^{\prime} \mid s, a\right) U\left(s^{\prime}\right) U(s)=R(s)+γmaxα∈A(s)∑s′P(s′∣s,a)U(s′)
伪代码