📜  基于命题逻辑的代理

📅  最后修改于: 2022-05-13 01:58:08.703000             🧑  作者: Mango

基于命题逻辑的代理

先决条件:人工智能中的 Wumpus 世界

在本文中,我们将利用我们的理解来制作使用命题逻辑的 wumpus 世界代理。第一阶段是使代理能够最大程度地从其感知历史中推断出世界的状态。这就需要为行动的后果创建一个彻底的逻辑模型。我们还演示了代理如何跟踪世界而不必为每个推理返回感知历史。最后,我们展示了代理如何使用逻辑推理制定保证满足其目标的计划。

Wumpus世界的现状

逻辑代理的工作原理是在给定关于世界的单词知识库的情况下推断要做什么。公理是关于宇宙如何运作的一般信息,与从代理在特定现实中的经验中收集的感知语句相结合,形成知识库。

理解公理

我们将从 Wumpus 世界的不可变方面开始,稍后再讨论可变方面。目前,我们需要为每个符号使用以下符号[x, y]   协调:

  • 如果里面有坑[x, y]   , P_{x,y}   是真的。
  • 如果有 Wumpus 在[x, y]   ,无论是死是活, W_{x,y}   是真的。
  • 如果代理感觉到微风[x, y]   , B_{x,y}   是真的。
  • 如果代理检测到气味[x, y]   , S_{x,y}   是真的。

我们写的句子足以推断P_{1,2}   (里面没有坑[1,2]   标记)。每个句子都有标签R_{i}   以便我们可以参考它:

  • [1, 1]   ,没有坑: R_{1}: \quad \neg P_{1,1}
  • 当且仅当它的一个邻居有一个坑时,一个正方形是微风的。必须对每个方格进行说明;暂时,我们只会添加相关的方块: \begin{aligned} &R_{2}: \quad B_{1,1} \Leftrightarrow\left(P_{1,2} \vee P_{2,1}\right) \\ &R_{3}: \quad B_{2,1} \Leftrightarrow\left(P_{1,1} \vee P_{2,2} \vee P_{3,1}\right) \end{aligned}
  • 在所有 Wumpus 宇宙中,前面的句子都是正确的。现在包括在代理所在的特定环境中访问的前两个方格的微风感知。 \begin{array}{ll} R_{4}: & \neg B_{1,1} \\ R_{5}: & B_{2,1} . \end{array}

代理知道没有坑\left(\neg P_{1,1}\right)   或 Wumpus \left(\neg W_{1,1}\right)   在起始广场。它还知道,当且仅当周围的广场有坑时,方格是有风的,当且仅当相邻的方格有 Wumpus 时,方格是臭的。结果,我们包含了大量以下类型的句子:

\begin{aligned} &B_{1,1} \Leftrightarrow\left(P_{1,2} \vee P_{2,1}\right) \\ &S_{1,1} \Leftrightarrow\left(W_{1,2} \vee W_{2,1}\right) \\ &\ldots \end{aligned}

特工也知道这个星球上只有一个 wumpus。这分为两个部分。首先,我们必须声明至少有一个 wumpus:

W_{1,1} \vee W_{1,2} \vee \cdots \vee W_{4,3} \vee W_{4,4}

那么我们必须得出结论,只有一个 wumpus。我们在每一对地方添加一个声明,说明其中至少一个必须是无 wumpus 的:

\begin{aligned} &\neg W_{1,1} \vee \neg W_{1,2} \\ &\neg W_{1,1} \vee \neg W_{1,3} \\ &\cdots \\ &\neg W_{4,3} \vee \neg W_{4,4} \end{aligned}

到目前为止,一切进展顺利。现在让我们看看代理的看法。如果现在有臭味,知识库将受益于命题的添加Stench   .但是,如果在前一个时间步没有恶臭,那么\neg \text { Stench }   本来已经陈述过了,而新的断言只是一个矛盾。当我们掌握了知觉只是简单地陈述了当前时间的任何内容时,难题就解决了。因此,如果时间步长(提供给 MAKE-PERCEPT-SENTENCE 是 4,我们将 Stench 4添加到知识库而不是 Stench,巧妙地避免了与 Stench 3的任何可能冲突。对于风、碰撞、闪光和尖叫。

将命题与时间步长相关联是一个可以应用于随时间变化的宇宙的任何特征的概念。 L_{1,1}^{0}   ——代理人在广场上[1,1]   在时间 0 以及 FacingEast、HaveArrow 和 WumpusAlive ——都包含在初始知识库中。我们使用术语流利(来自拉丁语流利,意思是“流动”)来描述环境的变化元素。 “Fluent”是“状态变量”的同义词。非时间变量是与世界的永久元素相关的符号,不需要时间上标。

通过位置流利,我们可以直接将臭气和风的感知与它们遇到的方块的属性联系起来。

我们断言

\begin{aligned} &L_{x, y}^{t} \Rightarrow\left(\text { Breeze }^{t} \Leftrightarrow B_{x, y}\right) \\ &L_{x, y}^{t} \Rightarrow\left(\text { Stench }^{t} \Leftrightarrow S_{x, y}\right) \end{aligned}

对于每个时间步 t 和任何正方形[x,y]   .

当然,需要公理来允许代理跟踪流式,例如L_{x, y}^{t}   .这些流式随着智能体的活动而变化,因此我们需要将 wumpus 世界的转换模型写成一系列逻辑语句。

首先,我们需要用于动作发生的命题符号。这些符号,就像知觉一样,是按时间索引的;例如,Forward 0 表示代理在时间 0 执行 Forward 动作。根据惯例,给定时间步的感知首先发生,然后是该时间步的动作,然后转换到下一个时间步.

我们可以尝试定义效果公理来解释下一个时间步的动作结果,以描述世界如何变化。如果代理在[1,1]  在时间 0 面向东方并前进,结果是代理现在在正方形[2, 1]  并且不再在[1, 1]

L_{1,1}^{0} \wedge \text { FacingEast }^{0} \wedge \text { Forward }^{0} \Rightarrow\left(L_{2,1}^{1} \wedge \neg L_{1,1}^{1}\right)

每个潜在的时间步长、16 个方格中的每一个以及四个方向中的每一个都需要单独的陈述。对于其他动作,我们需要类似的句子: grabshootclimbturnLeftturnRight

假设代理决定在时间 0 前行,并将此信息记录在其知识库中。代理现在可以使用上述等式中的效果公理和关于时间 0 状态的初始陈述得出它在 [2, 1] 中。 \operatorname{ASK}\left(KB, L_{2,1}^ {1}\right)=\operatorname{true},换句话说。到目前为止,一切进展顺利。不幸的是,其他地方的消息并不是那么好:如果我们\operatorname{ASK}\left(KB, \text { HaveArrow }^{1}\right),结果是假的,这意味着代理不能显示它仍然有箭头或没有!因为效果公理无法解释动作的结果是什么保持不变,所以知识已经丢失。框架问题源于这样做的需要。添加框架公理明确表达所有保持不变的命题可能是框架问题的一种答案。对于每个时间 t,我们将有

\begin{aligned} &\text { Forward }^{t} \Rightarrow\left(\text { HaveArrow }^{t} \Leftrightarrow \text { HaveArrow }^{t+1}\right) \\ &\text { Forward }^{t} \Rightarrow\left(\text { WumpusAlive }^{t} \Leftrightarrow \text { WumpusAlive }^{t+1}\right) \\ &\ldots \end{aligned}

尽管代理现在知道它在继续前进后仍然保留箭头并且 wumpus 没有被杀死或复活,但框架公理的扩散似乎非常低效。在具有 m 个不同动作和 n 个流式的宇宙中,框架公理的大小将是 O. (mn)。代表性框架问题是用于描述这种特定形式的框架问题的术语。从历史上看,这个问题一直是人工智能研究人员的一个重要问题。我们将在本章的注释中更详细地讨论它。

表征框架问题很重要,因为,说得好听点,现实世界有大量的流利。对我们来说幸运的是,每个动作通常只影响一小部分流利——世界展示了本地化。为了解决代表性框架问题,必须使用一组大小公理来定义转换模型O(mk)  而不是大小O(mk)  .还有推理框架问题,它涉及及时预测 t-step 行动计划的结果O(kt)  而不是O(nt)  .

这个困难可以通过将注意力从写关于动作的公理转移到写关于流利的公理来解决。结果,我们将为每个流利的公理F  描述的真值F^{t+1}  就流利而言(包括F  自身)在时间 t 和可能的行动在时间 t。现在,真值F^{t+1}  可以通过以下两种方式之一设置:要么是时间 t 的动作导致F  在时间是真实的t+1  ,或者 F 在时间 t 已经为真,并且时间 t 的活动对其没有影响。后继状态公理是一种具有以下模式的公理:

F^{t+1} \Leftrightarrow \text { ActionCausesF }^{t} \vee\left(F^{t} \wedge \neg \text { ActionCausesNotF }^{t}\right)

HaveArrow公理是最基本的后继状态公理之一。因为没有重新加载的动作, \text { ActionCausesF }^{t}  部分被删除,留给我们

\text { HaveArrow }^{t+1} \Leftrightarrow\left(\text { HaveArrow }^{t} \wedge \neg \text { Shoot }^{t}\right)