状态空间规划VS规划空间规划
状态空间规划:搜索空间由 ∑ \sum ∑直接给出,节点是领域中的状态,弧是状态转移或动作,规划是对应从初始状态到目标状态的动作序列,即从初始状态节点通过弧连接中间节点到目标状态节点的路径。
规划空间规划:搜索空间中的节点是局部具体化的规划(Partially Specified Plan),弧是规划的求精操作(Refinement Operation),目的是进一步完善部分规划,即实现未解决的目标或者消除可能的不相容。
规划空间规划基本要素
前面说到,规划空间规划目的是进一步完善部分规划,即实现未解决的目标或者消除可能的不相容。而这个完善的过程就是缺陷求精的过程。规划空间规划被看作是两个分离的阶段:
- 选择动作(为了满足目标需要增加哪些动作?)
- 对所选的动作进行排序,从而实现目标。(如何组织这些动作?)
基础的规划空间规划的基本要素定义如下:
缺陷(flaw)
规划 π = ( A , ≺ , B , L ) \pi=(A,\prec,B,L) π=(A,≺,B,L)的缺陷(flaw)是下列二者之一:
- 一个子目标,即 A A A中一个没有因果链的动作的前提条件。
- 一个威胁,即一个可能通过因果链引起干扰的动作。
因果链的定义如下:
求精操作
求精操作中,应避免对部分规划增加对求精目的来说不是严格要求的约束,这种要求称作最小承诺原则(Least Commitment principle)。
规划空间的节点是部分规划,其弧对应于求精操作。从规划空间的顶点 π \pi π出发的弧是把 π \pi π转换为后继部分规划 π ′ \pi' π′的求精操作。一个求精操作包括以下四个步骤之一:
- 对 A A A增加一个动作。
- 对 ≺ \prec ≺增加一个顺序约束。
- 对 B B B增加一个绑定约束。
- 对 L L L增加一个因果链。
规划器的每一步都需要对当前规划解(是一个部分规划) π \pi π选择并应用一个求精操作。
部分规划
一个部分规划是一个四元组: π = ( A , ≺ , B , L ) \pi =(A,\prec,B,L) π=(A,≺,B,L),其中:
- A = { a 1 , a 2 , ⋯ , a k } A=\{a_1,a_2,\cdots,a_k\} A={a1,a2,⋯,ak}是部分动作序列
- ≺ \prec ≺是 A A A中的顺序约束集合,具有 ( a i ≺ a j ) (a_i\prec a_j) (ai≺aj)的形式
- B B B是对动作 A A A中的变量的绑定约束集合。比如 a i , a j a_i,a_j ai,aj中描述的参数 p i = p j p_i=p_j pi=pj相等。
- L L L是因果链的集合,具有形式 a i ⟶ l a j a_i\stackrel{l}\longrightarrow a_j ai⟶laj,其中 a i a_i ai和 a j a_j aj是 ≺ \prec ≺的约束,命题 l l l是 a i a_i ai的效果以及 a j a_j aj的前提。涉及两个动作间命题 l l l的参数由 B B B进行绑定。
初始状态和目标状态编码
在搜索空间中,部分规划只能表达动作及其之间的关系,而对于状态的描述是不明显的。因此需要将初始状态和目标状态进行编码,将目标状态 g g g中的命题表示成虚拟动作 a ∞ a_{\infin} a∞的前提条件(该动作无执行效果),将初始状态 s s s表示成一个虚拟动作 a 0 a_0 a0的效果(该动作无前提条件)。基于此,初始规划 π 0 \pi_0 π0可定义成 { π 0 , π ∞ } \{\pi_0,\pi_{\infin}\} {π0,π∞},具有顺序关系 ( a 0 ≺ a ∞ ) (a_0\prec a_{\infin}) (a0≺a∞),没有绑定的参数,也没有因果链条。
规划解
如果一个部分规划 π = ( A , ≺ , B , L ) \pi=(A,\prec,B,L) π=(A,≺,B,L)没有缺陷,并且顺序约束 ≺ \prec ≺和绑定约束 B B B都是相容的,则 π \pi π是规划问题 P = ( ∑ , s 0 , g ) P=(\sum,s_0,g) P=(∑,s0,g)的解。
PSP算法 Plan-Space Planning Algorithm
主要思路是,在保持 ≺ \prec ≺和 B B B的相容性的同时对 π \pi π求精,直到 π \pi π没有缺陷为止。对部分规划 π \pi π向一个解规划求精的基本操作如下:
- 找到 π \pi π的缺陷,即它的子目标和威胁。
- 选择这样的缺陷。
- 找到方法来解决该缺陷。
- 对这个缺陷选取一个求解器。
- 按照求解器要求对 π \pi π求精。