Ai Plan (10) POP 算法

Table of Contents

  1. PoP (Partial-Order Planning)
  2. State-Space vs. Plan-Space Planning

PoP (Partial-Order Planning)

PoP 是 PSP的的一种实现。 在PSP算法中,我们考虑了两种缺陷:未实现的目标和威胁,并每次在主循环消除这些缺陷。而POP只考虑未实现的目标,而把处理威胁放在主循环中。

如图,这张图只是前面的PSP算法上做一些修改,把威胁放到opengoals处理完毕后,在主循环把所有因为opengoal resolver导致的威胁处理完毕 image-center

PoP的输入

  • partial plan (和PSP的一样)
  • agenda(议程):即需要完成的事,是一组 形如(a,p)组合,a表示行动,p表示该行动的某个前提条件。因此,这些就是当前局部计划中的所有开放目标
    • 初始时,它是虚拟行动goal的所有前提条件
    • 议程只是避免了我们每次循环都重新计算open goals 的一种方式。
  • 搜索由缺陷类型控制
    • 未实现子目标(在agenda中):和前面PSP算法一样
    • 威胁:作为生成后继的一部分来处理来解决
      • 在算法中,我们消除了所有的威胁,因此,当我们生成一个新的搜索节点时,它将没有任何威胁。

伪代码

  • function Pop(plan,agenda)
    • if agenda.empty() then return plan
    • (ag,ap) ← agenda.selectOne()
    • agenda←agenda - (ag,ap)
    • relevant ← plan.getProviders(pg)
    • if relevant.empty() then return failure
    • (ap,pp,σ) ← relevant.chooseOne()
    • plan.L ← plan.L ∪ <ap-[σ(pg)]→ag>
    • plan.B ← plan.B U σ
    • if ap ∉ plan.A then
      • plan.add(ap)
      • agenda ← agenda + ap.preconditions
    • newPlan ← plan
    • for each threat on <ap-[σ(pg)]→ag> or due to ap do
      • allResolvers ← threat.getResolvers(newPlan)
      • if allResolvers.empty() then return failuer
      • resolver ← allResolvers.chooseOne()
      • newPlan ← newPlan.refine(resolver)
    • retun Pop(newPlan,agenda)

部分函数的说明 plan.getProviders(pg)

  • 确定性的选择点,不需要回溯
  • 选出所有可以解决命题pg的行动

relevant.chooseOne()

  • 不确定性选择点,可以回溯
  • 返回 一个行动ap,该行动的和子目标的命题相关的效果pp,σ是使得未实现子目标和效果一致的某种置换,如,r1 = robot,l1 = loc1

State-Space vs. Plan-Space Planning

image-center


总结: 状态空间的节点由有限的状态组成,这些状态是各种已知的世界状态。使用状态空间进行规划,需要准备好规划问题的定义域,即 ∑ = (S,A,γ)

  • S为所有状态点集
  • A为所有行动的集合
  • γ为过渡系统,其定义了所有状态的过渡映射
    • 即,s’ = γ(s,a), 在s状态,应用动作a,可以得到状态s’

然后准备搜索问题,P = (O,si,g)

  • 初始状态:si
  • 最终目标的满足检测: 如果当前s 满足 g时,说明找到终点
  • 路径成本函数: π = |π| ,等于路径的长度
  • 状态s后继节点函数 : Γ(s)

接下来就可以进行路径(解决方案)搜索了。搜索期间使用到的启发式这些就不再多说,就是优化挑选成本,选择最短的路径,成本最低的路径。

最后我们讲到因为这种在状态空间中搜索的缺点,就是在一些极端情况下,有非常耗时,不必要的搜索,不管是使用哪种启发式,前面得到一些肯定没有抵达终点路径的节点,但是在意识到之前已经遍历完毕,所以说浪费时间。 因此,我们才提出了PSP算法,在状态空间中进行的局部规划,大大减少了搜索空间,接而进一步改进PSP得到PoP算法。