搜索
您的当前位置:首页正文

情景演算中的框架问题简介

来源:榕意旅游网


情景演算框架问题简介

公理集(1)–(24)提供了我们第一个积木世界的完整的动作效果的逻辑特性。对每个动作它给出了动作可以执行的充分和必要条件,充分定义了这个动作在每个流上的产生的效果。类似地,公理集(25)–(27)完全刻画了第二个积木世界例子的动作效果及执行条件。

但在这二个公理集中还存在一些不能令人满意的地方。在通俗描述中描述的一些动作效果在这个公理集中没有得到描述。例如在我们的例子的描述中,我们说在动作stack(x, y)执行后, 产生on(x, y)和handempty为真holding(x)和clear(y)不再为真的新情景。还有我们不必说如果y初始在桌子上, 它将还在桌子上。许多研究者认为当人们记住一个动作的效果时,他们并不清楚地记住那些没有由动作带来变化的效果,而是记忆那些发生变化的效果。因此我们公理化动作时只需要定义那些由动作产生的变化。但是如果我们的理论只定义发生变化的部分,那么如何根据动作导出不变的部分将成为问题。这个问题由McCarthy和Hayes在1969年认识到,称其为框架问题。我们可以把框架问题看做找寻一组合适的逻辑,从这组逻辑可以导出动作的完整效果定义(包括变化的和为变化的)。例如对于stack(x, y)如过有下列一组“效果公理”:

on(x, y, do(stack(x, y), s)),

clear(x, do(stack(x, y), s)),

¬clear(y, do(stack(x, y), s)),

handempty(do(stack(x, y), s)),

¬holding(x, do(stack(x, y), s)),

就可以导出一个类似于以一阶逻辑做的公理集(5)–(9)描述的stack(x, y)动作的完整效果定义。

框架问题既如何以一种有效的方式对动作执行后未发生变化的部分进行描述(也称为框架公理)和以最少的框架公理以及效果公理自动导出框架公理,是一个最著名的人工智能问题,为解决它研究者们已做了大量工作。框架问题也极大地推动了非单调逻辑的早期工作。在情景演算中碰到的框架问题也出现在其他形式主义中如事件演算, 时序逻辑, 和非单调逻辑。事实上,一般的共识是,任何关于变化推理的形式主义都将会碰到它。

McCarthy最初想通过下列带有异常谓词通用公理来解决框架问题的异常限制:

Holds(p, s) ∧ ¬abnormal(p, a, s)Holds(p, do(a, s)) (28)

不幸的是Hanks和McDermott证明在作为反例的耶鲁射击问题中这个方法并不工作。这是一个只具有三个动作(等待、拿枪、射击)的简单的问题。它们的效果可以如下公理化:

loaded(do(load, s)), (29)

loaded(s) ⊃ dead(do(shoot, s))。 (30)

假定S0是如下为真的情景:

¬loaded(S0) ∧ ¬dead(S0)。 (31)

Hanks和McDermott证明用上述意外限制Holds会产生二个版本,其中一种版本是loaded(do(load, S0)) ∧ loaded(do(wait, do(load, S0))) ∧ dead(do(shoot, do(wait, do(load, S0))))

为真(这是我们预期的);另一个是

loaded(do(load, S0))∧¬loaded(do(wait, do(load, S0))) ∧ ¬dead(do(shoot, do(wait, do(load, S0))))

为真(Wait动作是反直觉的,假定没有做任何事神不知鬼不觉地放下了枪)。

后来耶鲁射击问题极大地促进了框架问题的研究,同时也使其成为非单调逻辑关注的焦点。针对这一问题,Shoham提出了时序最小化(即扁向就近发生的变化)。还有许多其它的提案也在推进这个问题的发展。

框架问题现代解的核心是把动作效果的定义从关于这个动作的推理任务中分离出来。例如给出效果公理(29)和(30),我们可以获得下面动作的完整效果定义:

loaded(do(load, s)),

dead(do(load, s)) ≡ dead(s),

loaded(do(shoot, s)) ≡ loaded(s),

dead(do(shoot, s)) ≡ loaded(s) ∨ dead(s)

loaded(do(wait, s)) ≡ loaded(s),

dead(do(wait, s)) ≡ dead(s)。

现在给出初始状态公理(31), 我们可以轻易地推断出dead(do(shoot,do(wait, do(load, S0)))) 成立。

参考:

第一个积木世界例子公理集:

通过Poss(a, s)描述所有动作的可执行条件(n个动作)(前提条件公理)

Poss(stack(x, y), s) ≡ holding(x, s) ∧ clear(y, s), (1)

Poss(unstack(x, y), s) ≡ on(x, y, s) ∧ clear(x, s) ∧ handempty(s), (2)

Poss(pickup(x), s) ≡ ontable(x, s) ∧ clear(x, s) ∧ handempty(s), (3)

Poss(putdown(x), s) ≡ holding(x, s), (4)

通过do(a, s)描述所有动作的动作效果(大约为n个动作*m个流的语句)(效果公理)

stack(x, y)动作效果

holding(u, do(stack(x, y), s)) ≡ holding(u, s) ∧ u≠x, (5)

handempty(do(stack(x, y), s)), (6)

on(u, v, do(stack(x, y), s)) ≡ (u = x ∧ v = y) ∨ on(u, v, s), (7)

clear(u, do(stack(x, y), s)) ≡ u = x ∨ (clear(u, s) ∧ u = y), (8)

ontable(u, do(stack(x, y), s)) ≡ ontable(u, s), unstack(x, y)动作效果

holding(u, do(unstack(x, y), s)) ≡ u = x, ¬handempty(do(unstack(x, y), s)), on(u, v, do(unstack(x, y), s)) ≡ on(u, v, s) ∧ ¬(x = u ∧ y = v), clear(u, do(unstack(x, y), s)) ≡ u = y ∨ (clear(u, s) ∧ u = x), ontable(u, do(unstack(x, y), s)) ≡ ontable(u, s), pickup(x)动作效果

holding(u, do(pickup(x), s)) ≡ u = x, ¬handempty(do(pickup(x), 16)

(9)

(10)

(11)

12)

13)

(14)

(15)

s)), ( ( (

on(u, v, do(pickup(x), s)) ≡ on(u, v, s), (17)

clear(u, do(pickup(x), s)) ≡ clear(u, s) ∧ u = x, (18)

ontable(u, do(pickup(x), s)) ≡ ontable(u, s) ∧ x = u, (19)

putdown(x)动作效果

holding(u, do(putdown(x), s)) ≡ holding(u, s) ∧ u = x, (20)

handempty(do(putdown(x), (21)

s)),

on(u, v, do(putdown(x), s)) ≡ on(u, v, s), (22)

clear(u, do(putdown(x), s)) ≡ u = x ∨ clear(u, s), (23)

ontable(u, do(putdown(x), s)) ≡ u = x ∨ ontable(u, s)。 (24)

第二个版本:

Poss(move(x, y), s) ≡ x≠table ∧ clear(x, s) ∧ clear(y, s), (25)

clear(u, do(move(x, y), s))≡u= table ∨ on(x, u, s) ∨ (clear(u, s) ∧ u≠y), (26)

on(u, v, do(move(x, y), s)) ≡(x = u ∧ y = v) ∨ (on(u, v, s) ∧ u = x)。(27)

因篇幅问题不能全部显示,请点此查看更多更全内容

Top