基于STRIPS语言的经典规划_精品文档资料下载.pdf
《基于STRIPS语言的经典规划_精品文档资料下载.pdf》由会员分享,可在线阅读,更多相关《基于STRIPS语言的经典规划_精品文档资料下载.pdf(10页珍藏版)》请在冰豆网上搜索。
![基于STRIPS语言的经典规划_精品文档资料下载.pdf](https://file1.bdocx.com/fileroot1/2022-10/12/49e2feda-7b02-4273-b5c6-fba5e0be5b61/49e2feda-7b02-4273-b5c6-fba5e0be5b611.gif)
普通的Agent规划有下列几个较难处理的问题:
1)一个规划问题中不相关的行动太多时,普通Agent无法处理;
2)很难寻找到一个好的启发式函数;
3)Agent很多时候并不能够利用问题分解,即不能够把规划问题完全分解为子问题。
虽然在理论上,这些困难看起来的确有些难以解决,但是在经典规划理论研究中,往往都是直接忽略或者增加一些假设以避免这些问题,因为在实际应用中,问题往往被限定在一个有限的范围内,我们只需要使用一些特殊技术就能解决这些问题。
例如:
在以下要介绍的规划算法中,都是假设问题是可以分解的(子目标独立性假设)。
2Planning语言语言2.1STRIPS在介绍经典规划之前我们先介绍一下规划语言。
最初描述规划问题是用情形演算的语言,情形演算是一种特殊的一阶语言,它设置了一些特定的语法对象以描述行动和状态变化。
不过情形演算有一个致命的缺憾框架问题。
框架问题分为表示框架问题和推理框架问题,虽然在情形演算中用后继状态公设取代效果公设和框架公设而解决了表示框架问题,但是却无法解决推理框架问题。
STRIPS语言是R.File&
Nilsson在1971年提出的表示规划问题的一种简洁的形式化语言,它是一种能够描述范围很宽的各种问题的语言。
STRIPS语言成功地解决了推理框架问题,在说明它是怎么解决这个问题之前,先介绍STRIPS的相关知识。
STRIPS语言定义了以下表示1:
?
状态:
在规划问题中,用一个文字的合取式表示世界中的某一状态。
我们采用一阶文字表示这种状态,在一阶状态描述中,这些文字必须是基项(ground),而且必须是无函数的。
另外,还采用了封闭世界假设:
在一个状态中没有提到的条件被认为是假的!
行动(Action):
一个行动是由前提(Precondition)和效果(Effect)来表示和决定的。
其中,前提是执行这个行动所必须满足的条件,效果是执行行动之后引起状态的变化,效果一般用删除表(D)和添加表(A)表示。
表示一个积木世界中的行动把积木x从积木y上搬到z上如下图所示。
准确地说它表示的是一个行动模式,它包含的意义是指一系列不同的行动,这些行动可以通过把变量x,y,z实例化成不同的常量而得到。
)()(),(:
)(),(:
),(FclearyclearzxonAzclearyxonDzclearxclearyxonPCzyxMove?
目标:
其实目标表示也应包括在状态表示中,之所以把它单独提出来,是因为目标仅是用正文字的合取式表示的,而且,一个状态S满足目标G(Goal)当且仅当状态S包含G的所有原子。
说明:
注意这里有一个很重要的假设-无函数假设,之所以使用这个假设,是因为无函数假设保证了任何问题的行动模式都可以被命题化,而不会无限的迭代下去,以至于规划器无法处理。
我们知道在情形演算中使用了fluent(变式),fluent是指其值依赖于情形的谓词和函数,如:
我们在积木世界中表达B在A上这个状态On(B,A,S),注意这里每一个状态表示都与某一“时刻”的状态S联系在一起,正是因此才导致了框架问题(更多细节参见参考书目1的第十章),相对而言,在STRIPS中状态表示为On(B,A),这样,执行某一个行动后原状态未改变的逻辑公式就可以直接“复制”下来,而在情形演算中是必须通过框架公设或后继状态公设来得到的。
下面通过一个具体例子来说明STRIPS是如何解决框架问题的。
例1:
如图1所示的积木世界状态S,S用STRIPS语言表示为:
)()(),(),(),(FclearBclearFConCAonABonS=现执行行动Move(B,A,F),此行动的表示如下:
),(FclearAclearFBonAFclearABonDFclearBclearABonPCFABMove行动的执行:
若状态S中有删除表D中的某一公式,则删除之;
若状态S中没有添加表A中的某一公式,则添加之。
对于行动的添加表A和删除表D中没有提到的S中的公式,STRIPS语言使其直接复制到下一状态S,这一处理过程可以用集合运算来形式化表示:
对应到这里的行动ADSSU)(0=)()(),()(),(:
),(FclearAclearFBonFclearABonSSFABMove=U得到)()()(),(),(),(FclearBclearAclearFBonFConCAonS=,如图1所示。
而在情景演算里,用效果公设、领域知识和框架公设来推理:
),(,()(),(),(,()(),(),(,),(,()(),(),(),(),(,()(),(),(),(),(,()(),(),(),(),(,()(),(),(),(SFABMovedoFConBCSFConSFABMovedoCAonBASCAonSFclearSSFABMovedoFclearFBSFclearSBclearSABonSFABMovedoAclearFBSFclearSBclearSABonSFABMovedoABonFBSFclearSBclearSABonSFABMovedoFBonFBSFclearSBclearSABon=其中,显然,在情形演算中与一个行动不相关的状态较多的话,Agent处理这些没有被行动所改变状态的复杂程度是相当大的,这就是框架问题。
而在前面STRIPS语言用集合运算就非常简单地处理了。
),(SFABMovedoS=由此分析可以很清楚的看到,STRIPS语言非常容易的解决了“执行一个行动后原状态未改变的逻辑公式的表示”的问题,即是解决了框架问题,这也是STRIPS语言成为规划中最重要也是影响最大的语言之一的原因。
2.2ADL和和PDDL语言语言1986,Pedanault在STRIPS的基础上提出了ADL语言,ADL语言继承了STRIPS语言的知识,并且放松了STRIPS语言的一些限制,使得规划语言更加灵活,而且应用范围也更加广泛。
1998年,Ghallab等人提出问题域描述语言PDDL,它是一种更加完善的语言系统,能够表示STRIPS、ADL以及其他语言,目前是国际上公认的标准规划问题描述语言。
3规划算法规划算法3.1全序规划全序规划全序规划是指这样的规划:
它们搜索的是与起始状态或目标相关的严格线性行动序列。
下面所要介绍的状态空间搜索算法就是这样的全序规划算法。
状态空间搜索是规划算法中最直接的方法,因为规划语言中描述行动的时侯同时用到了前提和效果,所以我们可以考虑从两个方向进行搜索:
从初始状态开始的前向状态空间搜索和从目标状态开始的后向状态空间搜索。
3.1.1前向状态空间搜索和后向状态空间搜索这里只简单介绍一下这两种规划搜索算法的思想并提供一个前向搜索算法。
前向搜索(又称前行规划)从初始状态S开始,考虑那些前提得到满足的行动a,并把他们加入到规划行动集合A中去;
再通过修改当前状态S(增加S中没出现的a中的添加表文字和删除S中出现的a中的删除表文字),并把行动a添加到A中去;
最后通过判断S的相容性的和是否包含目标状态的所有文字来确定是否是规划问题的一个解。
相反,后向搜索(又称为回归规划)是从目标状态开始,考虑那些正效果中出现而负效果中不出现当前状态的文字的行动,把此行动添加到规划行动集合中去,再在S中添加此行动的前提和删除此行动的正效果。
最后也是通过判断S的相容性和初始状态是否包含S的所有文字来确定是否得到规划问题的一个解。
先对几个符号说明一下:
S0:
初始状态,G:
目标状态,表示行动集。
前向规划算法:
)返回)()中出现;
中的文字在和;
包含于,和替换)找出一个行动模式;
,);
)3,5;
SS4PCADSPC:
.S,R3|S2,10UURADtADPCreturnGIfSS=3.1.2启发式在搜索算法中的应用不论是前向还是后向搜索,如果没有一个好的启发式的话,都不是高效的。
启发式应用于搜索算法中,可以使搜索速度大大加快。
下面就介绍一些常用的求可采纳的启发式的方法:
1)删除每个行动的前提以得到松弛规划问题,然后求此松弛规划问题的最优解耗散,并以此作为一个可采纳的启发式。
2)假设子目标独立,以每个子问题耗散的总和为启发式。
在实际的应用中,经常是把上面两种方法结合起来使用,即先假设子目标独立,然后写出松弛问题,再把每个子问题的最优解耗散求和,以此作为规划问题的启发式。
为了得到更加精确的启发式,我们还可以更进一步的只删除每个行动的前提和负效果,以此得到松弛规划问题,再以此松弛问题的最优解作为启发式。
另外,还可以只删除负效果而不删除前提来生成松弛问题(此方法得到的启发式称作清空删除表启发式),这种方法得到的启发式更加精确。
3.1.3前向搜索和后向搜索的比较从以上的描述来看,因为后向搜索只需要考虑相关的行动,不必对所有可能的行动进行搜索,而前向搜索需要考虑所有可能的行动,由此产生的分支太多,搜索时间消耗自然也就随之而大大增加了,因此后向搜索在理论上要比前向搜索更好,而且一般情况下也确实如此。
不过,规划算法的速度很大程度上依赖于启发式的应用,所以这种比较就只有理论上的意义。
注:
这里的相关行动是指效果中包含目标文字或者是搜索中当前状态的文字的行动,可能行动是指前提被满足的行动。
下面用一个简单的图示(图2)来说明前行规划和回归规划的区别:
初始状态S0为:
At(P1,A)At(P2,A);
目标状态G为:
At(P1,B)At(P2,B)。
这里我们不必细究这些公式的具体含义,仅从图2中可以很明显的看出前行规划和回归规划的搜索区别:
前行规划从初始状态出发,使用问题的行动向前搜索目标状态,回归规划从目标状态出发,使用行动的逆,向后搜索初始状态。
3.2偏序规划偏序规划偏序规划是指任何能够将两个行动放在一个规划中而不指定哪一个在前的规划算法。
简单的来说,偏序规划允许两个或多个行动无严格先后顺序。
一个偏序规划包含以下内容1:
1)行动:
一组行动是组成规划的步骤。
此处需要特别说明的是Start行动和Finish行动,空规划只包含Start和Finish行动。
Start行动没有前提而且将规划问题的初始状态中的文字作为其效果,Finish行动没有效果且将规划问题的目标文字作为其前提。
2)定序约束:
形如:
,表示行动a必须在行动b之前执行。
这里还需说明的是规划中不能包含可以造成循环的定序,如:
和。
bapbapabp3)因果连接(因果链):
,表示p是行动a的效果同时是行动b的前提,且保证了p在从执行行动a的时刻到执行行动b的时刻这段时间内为真即“保护”p的真值。
bap4)开放前提:
表示不能从规划中的一些行动中得到的前提,在不引起冲突的情况下,规划算法会尽力缩小开放前提直到使得它为空集。
我们在这里引