第3期 张万鹏,等:一种利用工作流模型的分层任务网络规划领域建模方法 ·243· preconditon(value ?x false) 有集装箱为止.以下是该方法循环模式的工作流表 :tasks(((A2)))) 示及对应的HTN编码, 图2所示为顺序、并行、选择的工作流模式 <WhileActivity x:Name=“move-stack”> <WhileActivity.Condition A <RuleConditionReference (a)顺序(serial)模式 ConditionName=“precond”/> </WhileActivity.Condition SequenceActivity x:Name ="sequenceAc- AND AND tivity1”> nsl:MoveActivity x:Name ="mov-top- most-container”/> ns1:CountActivity x Name ="count-re- (b)并彳(parallel split join)模式 cursive-times'”/> =true A </SequenceActivity </WhileActivity XOR XOR precond:this.p.empty =false &this.r times >0 A: =false 对应的HTN编码如下: (c)选择(parallel exclusive -OR)模式 (task move-stack 图23种典型的工作流模式 parameters(?p-place ?g-place ?r_times- Fig.2 Three classical workflow patterns times) 此外,在HfTN规划中,递归(recursive)调用是 (method recursive-move 一种重要的方法,它可以方便地描述需要重复执行 preconditon(and((not(empty ?p ) 的行动.不过,递归的引入给HTN规划带来了不可 (GreaterThan ?r_times 0))) 判定的问题,即使基础状态空间是有限的].此困 tasks((mov-topmost-container) 难的出现是因为如果分解是可以递归的,那么HTN count-recursive-times) 规划解可以是任意长的,不能在固定的时间内终止 (move-stack))) 搜索.为了解决不可判定性的问题,一些HTN规划 本文在循环的条件中增加了对调用次数的限制, 器采取了限定规划解长度的方式,因为状态空间是 如果超过了最大调用次数则递归终止.一般情况下, 有限的,一个步骤比状态空间的状态还多的规划一 如果状态空间是有限的,任务的分解基本上都会在有 定包含了访问同一个状态2次或2次以上的回路。 限步骤内达到原子行动.如上例所描述的情况,如果 在工作流模型中,可以采用循环(loop)模式(图3) p上的集装箱个数是有限的(如有K个),则move 来表达方法的递归调用,为了解决不可判定的问题, stake行动将在被递归调用K次之后完成.当基础的 可以在循环的条件中增加调用次数的限制 状态的空间是有限的,而组合的状态空间可能是无限 =false 的,例如在上例中,如果将p上的集装箱移动到q后, XOR 还有另外的行动又将其移动到p上,这样对move- stack的调用将会无休止地进行下去.在这种情况下, =true 限定规划解的长度,即限定递归调用的次数是解决不 可判定性的一个有效方法,虽然可能会损失规划解的 完备性(可能会出现这样的情况,有的任务就是要求 图3工作流循环(loop)模式 将集装箱从p搬到q,然后再搬回来). Fig.3 Loop workflow pattern 例如,为了完成将一堆集装箱从位置p移动到 3实例分析 位置q的任务,可按照下列方式进行处理:重复移动 位置p最上面的集装箱到位置g,直到位置p上不再 为了验证工作流模型在规划领域建模中应用的 有效性,采用MSWF(Microsoft workflow founda-