情景演算简介
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
情景演算简介
情景演算是表现变化的逻辑语言。
它由McCarthy在1963年提出,并由McCarthy和Hayes 在1969年把研究推动到形式化阶段。
情景演算中最基本的概念是情景(situations), 动作(actions)和流(fluents)。
简单说,动作就是当执行体执行其时,使动态世界从一个情景转变成另一个情景。
流是用来描述动作效果的情景依赖函数。
有二种类型的流:关系(relational)流、函数(functional)流。
关系流只有真和假二种值,而函数流可以有一个值的范围。
例如“空手”关系流,在机器人手中没有东西时为真。
“电池电量”函数流其值是0到100的整数。
McCarthy和Hayes认为情景就是“在某个时间点的宇宙万物全体的状态”,Reiter认为情景等同于从初始情景S0有限步动作的执行的过程。
无论何种解释,情景演算的独特功能就是情景是可以量化的一阶对象。
正因为此使情景演算成为描述变化的一种强有力的形式化工具,并区别于其它形式化工具如动态逻辑等。
要在情景演算中描述一个动态域,就需要在提供给执行体执行的动作集合上和描述这些动作将产生何种变化的流集合上做决定。
例如经典的积木世界:有一些相同大小的形状的积木可以排列成桌子上塔形。
这个域中的动作集合依赖于虚构执行者的可能做的动作。
想象执行者是只有一只手的机器人,它只能直接抓取塔顶上的积木或把积木放到塔顶或放到桌子上搭建一个新塔,这样我们可有下列动作:
stack(x, y)—把积木x放在积木y上面, 假定机器人拿着x且y在顶上(即y的上面个没有其他积木);
unstack(x, y)—从积木y上拿掉积木x,假定机器人手是空的且x在y上面且x在顶层;
putdown(x)—把积木放到桌子上, 假定假定机器人拿着x;
pickup(x)—从桌子上拿起积木x,假定机器人手是空的且积木x在桌子上(在顶层)。
要描述这些动作的效果,我们可以使用下列的关系流:
handempty—如果机器人的手是空的为真;
holding(x)—如果机器人握着积木x为真;
on(x, y)—如果积木x在积木y上面为真;
ontable(x)—如果积木x在桌子上为真;
clear(x)—如果积木x在塔的顶层,也即机器人不握着也没有其他积木在它上面为真。
这样例如我们就可以说要执行动作stack(x, y)时,holding(x)和clear(y)必须为真, 在stack(x, y)执行后, 产生新的情景on(x, y)和handempty 将为真,holding(x)和clear(y)不再为真。
如果执行者可以直接把在一个顶层的积木移到另一个顶层时,那么我们只需要下面的动作:
move(x, y)—移动积木x到位置y, 假定积木x在被移动塔的顶层,位置y 是一个顶层积木或桌子。
要描述这个动作的效果只需要二个流on(x, y)和clear(x): 如果x≠table且clear(x)和clear(y)为真时动作move(x, y)可被执行,在move(x, y)执行后产生的新的情景下x在y的上面。