人工智能 一种现代方法 第10章 经典的规划问题(classical planning)


本文旨在讲明:
1)规划问题定义(PDDL)为一个搜索问题
2)前向搜索,后向搜索,及搜索的启发式
3)从规划图获得启发式及提取规则

规划问题定义(PDDL)为一个搜索问题

Planning Domain Definition Language(简称PDDL,规划区域定义语言)
规划:设计一个动作规划以达到目标
ch03的基于搜索的问题求解Agent和ch07的逻辑Agent是一种规划Agent。
用PDDL能够描述ch03和ch07无法描述的规划问题。
因此,规划研究者选择了要素化(factored representation)——用一组变量表示世界的一个状态的表示方法。可使用PDDL语言。

将规划问题定义为一个搜索问题(要素有哪些?)

  • 状态流(fluent)(状态变量的同义词)的合取,这些流是基元的(无变量),无函数的原子。
    例如,Poor∧Unknown可能代表倒霉的Agent的状态;
    在一个包裹传递问题中的状态可以是At(Truck 1 , Melbourne)∧At(Truck 2 ,Sydney)
    在一个状态中,以下流是不允许的::At(x,y)(有变量) 、¬Poor()、At(Father(Fred),Sydney)(使用了函数符号)
  • 动作模式:动作可用动作模式来描述,动作模式隐式描述了ACTIONS(s)和RESULT(s, a)。

例如直升机从一个地点飞行到另一个地点的动作模式:
Action(Fly(p, from, to),
PRECOND: At(p, from) ∧Plane§ ∧Airport(from)
∧Airport(to)
EFFECT: ¬At(p,from) ∧At(p,to))
这个模式有动作名、模式中用到的所有变量列表、前提(precondition)、以及效果(effect)。

PDDL根据什么发生了变化来描述一个动作的结果;不提及保持不变的东西。动作的前提和效果都是文字(原子语句或原子语句的否定)的合取。前提定义了动作能被执行的状态,效果定义了执行这个动作的结果。

通过为所有的变量代入值而得到基元动作:
Action(Fly(P 1 , SFO, JFK),
PRECOND: At(P 1 , SFO) ∧Plane(P 1 ) ∧Airport(SFO)
∧Airport(JFK)
EFFECT: ¬At(P 1 , SFO) ∧At(P 1 , JFK))

ACTIONS(s):一个动作a能在状态s被执行,如果s蕴涵了a的前提。蕴涵也可用集合语义来表达:s╞q当且仅当q中的正文字都在s中,且q中的负文字都不在s中。用形式符号,可以说a∈ACTIONS(s)) ⇔ s╞ PRECOND(a)
如果状态s满足前提,我们称在状态s动作a是适用的(applicable)。

RESULT(s,a):在状态s执行动作a的结果定义为状态s’,它由一组流(fluent)表示,这组流由s开始,去掉在动作效果中以负文字出现的流(称之为删除列表delete list或DEL(a)),并增加在动作效果中以正文字出现的流(称之为增加列表add list或ADD(a)):
s’=RESULT(s,a) = (s – DEL(a))∪ADD(a)

初始状态是基元原子的合取。(对于所有状态,使用封闭世界假设,这意味着任何没有提到的原子都是假的。)
目标就像前件:是可以含有变量的文字(正文字或负文字)的合取,像At(p,SFO)∧Plane§。变量是存在量化的
当我们能找到一个动作序列,使得在蕴涵了目标的状态s结束,问题就得到了解决。例如,状态Plane(Plane 1 )∧At(Plane 1 ,SFO)蕴涵了目标At(p, SFO)∧Plane§。

经典规划的复杂性
本节考虑规划的理论上的复杂性,并区分两个决策问题。
PlanSAT:询问是否存在解决一个规划问题的某个规划
限界(bounded)PlanSAT:询问是否存在用于找到最优规划的、长度小于k的一个解。
限界(bounded)PlanSAT是NP-完全的,而PlanSAT属于P。换言之,最优规划通常困难,但次优规划有时是容易的。

状态空间搜索规划算法

前向状态空间搜索

规划问题的描述定义了一个搜索问题,启发式搜索算法(第3章)或局部搜索算法(第4章)可求解规划问题。
前向搜索从初始状态开始搜索状态空间,寻找一个目标。
s’=RESULT(s,a) = (s –DEL(a))∪ADD(a)

前向搜索:从初始状态出发,使用问题的动作,向前搜索目标状态
后向搜索:从目标的状态集出发,使用动作的逆,向后搜索初始状态。
1)前向搜索容易探索到无关动作
2)规划问题常有大的状态空间
对前向搜索来说,显然,没有精确的启发式,即使相对小的问题实例也是无望的。但是规划的许多现实应用还是能自动导出非常强的独立于领域的启发知识,这使得前向搜搜具有可行性。

后向相关状态搜索

从目标开始,向后应用动作,直到找到达到初始状态的步骤序列。 在每一步考虑一组相关状态,而不是单个状态。
从目标开始,对一组状态进行描述的文字之合取。
可喜的是,PDDL表示的设计使得后退动作很容易。
最后一个问题是:决定哪些动作是后退的候选动作,在前向中我们选择适用的动作——在规划中可能是下一个步骤的那些动作在后向中,我们需要相关的动作——导致当前目标状态的规划中可以作为最后一个步骤的那些动作。
一个动作要与一个目标相关,则必须明显对目标有贡献。
尽管后向搜索是分支因子低于前向,然而,后向使用状态集而不是单个状态的事实使得它更加难以想出好的启发知识,这就是当前主流偏向前向的主要原因。

规划的启发式

没有好的启发式函数,无论前向后向都不高效。

可采纳的启发式。可以通过更容易求解的松弛问题导出。

将搜索问题想成一个图,节点为状态,边为动作。问题是要找一条连接初始状态到目标状态的路径。
有2个方法来松弛这个问题:
1)加入更多的边,使得路径更容易被找到
2)多个节点组合到一起,将状态空间抽象为具有更少状态的形式
忽略前提启发式
忽略删除列表启发式
定义启发式的关键思想是分解(decomposition)

资源分享

实验代码下载:
https://github.com/yyl424525/AI_Homework
人工智能-一种现代方法中文第三版pdf、课件、作业及解答、课后习题答案、实验代码和报告、历年考博题下载:https://download.csdn.net/download/yyl424525/11310392

猜你喜欢

转载自blog.csdn.net/yyl424525/article/details/95309629