首页 百科知识 情景演算本体论

情景演算本体论

时间:2022-08-23 百科知识 版权反馈
【摘要】:情景表示了实施行动产生的状态。这种方法被称为情景演算,涉及到以下本体论: 如同在第八章中,行动是诸如Forward和Turn这样的逻辑项。例如,Holding表示智能体在初始情景S0下未持有金子G1。首先,我们称执行一个空序列将保持情景不变:一个情景演算智能体应该能够演绎出一个给定行动序列的结果;这就是投影任务。我们将使用一个修改版本的wumpus世界作例子,在这个版本中,我们不用担心智能体的方向,智能体能够从一个位置走向相邻的位置。

10.3.1 情景演算本体论

一种避免公理的多个副本的明显方法就是简单地在时间轴上进行量化——也就是说,“对所有的t,在 t 时刻执行的行动在 t+1 时刻的结果就是怎样怎样。”在这一节里,我们会集中讨论情景(situations),而不是像t+1这样明确的时刻。情景表示了实施行动产生的状态。这种方法被称为情景演算,涉及到以下本体论:

• 如同在第八章中,行动是诸如Forward和Turn(Right)这样的逻辑项。目前,我们假设环境只包含一个智能体。(如果不止一个,可以另加一个参数来说明哪个智能体在实施行动。)

• 情景(situation)是指一些逻辑项,由初始情景(常称为 S0)和所有在某个情景上应用一个行动后生成的情景组成。函数Result(a,s)(有时称为D0)指定了对情景s执行行动a产生的情景的名称。图10.2图示了这个概念。

• 流(fluent)指的是使情景从一个变换到下一个的函数和谓词,诸如智能体的位置或者wumpus的死活。字典上说,流是像液体那样流动的东西。在这里,它意味着在情景间流动或变换。按惯例,情景总是一个流的最后一个参数。例如,¬Holding(G1,S0)表示智能体在初始情景S0下未持有金子G1。 Age(Wumpus,S0)指定了S0下wumpus的年龄。

• 不受时间影响的或者说永久的谓词和函数也是允许的。具体的例子包括谓词Gold(G1)和函数LeftLegOf (Wumpus)。

图10.2 在情景演算中,每个情景(除去S0)都是一个行动的结果

除了单个行动,对行动序列进行推理也是有用的。我们可以按照多个单个行动的结果来定义序列的结果。首先,我们称执行一个空序列将保持情景不变:

Result( [], s) = s

执行一个非空序列相当于执行第一个行动然后在产生的情景中执行剩下的行动:

Result( [a|seq], s) = Result(seq, Result(a, s))

一个情景演算智能体应该能够演绎出一个给定行动序列的结果;这就是投影(projection)任务。通过一个合适的构造性的推理算法,它还应该能够找到一个序列来达到想要的效果;这就是规划(planning)任务。

我们将使用一个修改版本的wumpus世界作例子,在这个版本中,我们不用担心智能体的方向,智能体能够从一个位置走向相邻的位置。假设智能体在[1, 1]而金子在[1, 2]。目标是将金子放到[1, 1]。流谓词是At(o,x,s)和Holding(o,s)。那么初始知识库可能包含以下描述:

At(Agent, [1, 1], S0) ∧ At(G1, [1, 2], S0)

然而这还不够,因为它没有说明S0下什么是假的。(对这一点的进一步讨论参见第10.7.1节。)完整的描述如下:

At(o, x, S0) ⇔ [(o = Agent ∧ x = [1, 1]) ∨ (o = G1∧ x = [1, 2])

¬Holding(o,S0)

我们还需要说明G1是金子,[1,1]和[1,2]是相邻的。

Gold(G1) ∧ Adjacent([1, 1], [1, 2]) ∧ Adjacent([1, 2], [1, 1])

有人可能会去证明智能体可以通过以下行动达成它的目标:走到[1,2],拿金子,回到[1,1]。也就是:

At(G1, [1, 1], Result([Go([1, 1], [1, 2]), Grab(G1), Go([1, 2], [1, 1])], S0))

更有趣的是构造一个规划来得到金子的可能性,这个规划可以通过回答查询“什么样的动作序列能导致金子处于[1,1]?”而得到。

∃seq At(G1, [1, 1], Result(seq, S0))

让我们来看看为了回答这个查询,在知识库里必须有什么。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈