JSHOP2规划器是最著名的HTN规划器之一,它是SHOP2规划器的JAVA实现的版本。二者具有相同的HTN规划算法。基于有序任务分解,是一个领域无关的智能规划器。
变量符号:名称以?开头的符号。
eg: ?Hello
原子任务:名称以!开头的符号。
eg: !Hello
常量符号,谓词符号,复合任务符号:名称以字母或下划线开头的任何符号。
复合任务:指非原子任务,可分解为一系列的复合任务和原子任务
逻辑表达式:指逻辑原子或以下任何复杂表达式。包括连词(and),析取(or),否定(not),含义(imply),通用量化(forall),赋值(assign)以及调用表达式(call)
操作:说明一个原子任务如何执行。
(:operator (head) (pre) (del) (add))
head:描述一个原子任务
pre:逻辑前提条件
del:操作的删除列表
add:操作的添加列表
方法:说明如何将一个复合任务分界成由复合任务或原子任务组成的偏序任务集合。
(:method (head) Pi Ti)
head:描述一个复合任务
Pi:方法执行的前提条件
Ti:任务列表
个人理解:可以将方法理解为编程中的函数,其中head为函数名和函数参数,Pi和Ti可以当成i编程语言中的f结构。如果if(Pi)成立,则执行Ti
规划域:是规划器对规划问题求解的依据,与规划问题共同作为规划器的输入。相当于知识库。
(defdomain domain-name (d1 d2 ... dn))
di:表示操作,方法或者公理
规划问题:作为规划器的输入,相当于需要使用HTN求解的问题。
(defproblem problem-name domain-name
([a1,1 a1,2 a1,3 … a1,n]) T1
…[am,1 am,2 … am.n] Tm
)
ai,j是一个逻辑原子,每个Ti是一个任务列表。这种新式定义了域domain-name中的m个规划问题,每个domain-name都可以通过原子ai.1到ai,n定义的初始状态来解决Ti中的任务。