迷宫寻路问题——一阶谓词逻辑

来源:互联网 发布:淘宝物流重量怎么填 编辑:程序博客网 时间:2024/06/03 14:41

迷宫寻路问题——一阶谓词逻辑


迷宫寻路问题是人工智能中的有趣问题,如何表示状态空间和搜索路径是寻路问题的重点,本文的主要内容是一阶谓词逻辑的理解和应用,首先对基本知识和算法思想进行了解,再通过其对迷宫问题求解应用,编写 Python 程序进行深入学习。


完整代码可在 @DiamonJoy下载


由于谓词逻辑表示与人类的自然语言比较接近,类似于计算机语言中的伪代码形式,可以很方便地存储到计算机中去,并被计算机做精确处理。因此,它是一种最早应用于人工智能中的表示方法,很适合初学者作为入门级的学习。

知识(Knowledge)是人们在改造客观世界的实践中形成的对客观事物(包括自然的和人造的)及其规律的认识,包括对事物的现象、本质、状态、关系、联系和运动等的认识。知识是把有关的信息关联在一起,形成的关于客观世界某种规律性认识的动态信息结构。知识=事实+规则+概念:事实就是指人类对客观世界、客观事物的状态、属性、特征的描述,以及对事物之间关系的描述;规则是指能表达在前提和结论之间的因果关系的一种形式;概念主要指事实的含义、规则、语义、说明等。

所谓知识表示(Knowledge Representation),就是把知识用计算机可接受的符号并以某种形式描述出来。

常见的知识表示方式有一阶谓词逻辑、产生式表示、状态空间图表示、与或图表示、语义网络、框架结构表示,还有问题归纳法、面向对象法等。

一阶谓词逻辑表示法是一种重要的知识表示方法,它以数理逻辑为基础,是到目前为止能够表达人类思维活动规律的一种最精确的形式语言。用一阶谓词逻辑公式不仅可以表示事物的状态、属性、概念等事实性知识,而且也可以表示事物间具有确定因果关系的规则性知识。它与人类的自然语言比较接近,类似于计算机语言中的伪代码形式,可以很方便地存储到计算机中去,并被计算机做精确处理。因此,它是一种最早应用于人工智能中的表示方法,很适合初学者作为入门级的学习。


1. 命题与命题逻辑

命题:是具有真假意义的语句。命题代表人们进行思维时的一种判断,或者是肯定,或者是否定。

命题逻辑:“命题逻辑”是“谓词逻辑”的基础。在现实世界中,有些陈述语句在特定情况下都具有“真”或“假”的含义,在逻辑上称这些语句为“命题”。如:A. 天在下雨 B. 天晴 C. 日照的天气很宜人 D. 我们在辛苦于远程研修中。表达单一意义的命题称为“原子命题”。

命题逻辑就是研究命题和命题之间关系的符号逻辑系统。命题逻辑的联结词:原子命题可通过“联结词”构成“复合命题”,联结词有5种,定义为:

  • ﹁表示否定,复合命题“﹁Q”即“﹁Q”
  • ∧表示合取,复合命题“P∧Q”表示“P与Q”
  • ∨表示析取,复合命题“P∨Q”表示“P或Q”
  • →表示条件,复合命题“P→Q”表示“如果P,那么Q”
  • ↔表示双条件,复合命题“P↔Q”即表示“P当且仅当Q”

2. 谓词与谓词逻辑

谓词逻辑是命题逻辑的扩充和发展,它将一个原子命题分解成个体和谓词两个组成部分。在谓词公式 P(x) 中,P 称为谓词,x 称为个体变元,若 x 是一元的,称为一元谓词, P(x,y) 称为二元谓词

在谓词中,个体可以为常量,变量,函数。若谓词中的个体都为常量,变量或函数,则称它为一阶谓词,如果个体本身是谓词,称为二阶谓词,依次类推。谓词公式也有原子谓词公式、复合谓词公式等概念,利用命题逻辑的联结词将原子逻辑化式组合为复合谓词公式。

谓词逻辑的量词(Quantifiers):量词表示了个体与个体域之间的包含关系,谓词逻辑中有两个量词:全称量词(Universal Quantifiers),表示了该量词作用的辖域为个体域中“所有的个体 x ”或“每一个个体都”要遵从所约定的谓词关系;存在量词(Existential Quantifier),表示了该量词要求“存在于个体域中的某些个体 x ”或“某个个体 x ”要服从所约定的谓词关系。


3. 谓词公式
由下述规则得到的谓词公式称为合式公式:

  • 单个谓词和单个谓词的否定称为原子谓词公式,原子谓词公式是合式公式
  • 若A是合式公式,则﹁A也是合式公式
  • 若A、B都是合式公式,则A∨B、A∧B、A→B也都是合式公式
  • 若A是合式公式, x 是任一个体变元,则(x )A和(x )A也都是合式公式
在合式公式中,连词的优先级别依序为:﹁,∧,∨,→

谓词公式的解释:在命题逻辑中,对命题公式中各个命题的一次真值指派称为命题公式的一个解释。一个谓词公式的解释可能有很多个。对于每一个解释,谓词公式都可求出一个真值( T 或 F )。

用谓词公式表示知识的步骤如下:

  1. 定义用谓词及个体,确定每个谓词及个体的确切含义;
  2. 根据所要表达的事物或概念,为每个谓词中的变元赋以特定的值;
  3. 根据所要表达的知识的语义,用适当的连接符号将各个谓词连接起来,形成谓词公式。


4. 迷宫问题


迷宫的每一个格子,对应一个状态。在本题中,迷宫的大小为6*7,则有42个状态,如图所示。初始状态为41,目标状态为2和5。对于迷宫中的每个状态,在它的上下左右四个方向中,如果某个方向没有墙,则可以走进下一个状态。


我们通过谓词表示法求解迷宫问题:

1)  定义表示事物状态的谓词:

AT(person, x):person位于位置x处

Start(x):位置x是起始位置

End(x):位置x是终点位置

Pass(x, y):位置x和位置y合法,且相邻,且无阻隔


2)  定义表示事物状态的谓词:

初始状态:AT(person, 41)

目标状态:AT(person, 2)或AT(person, 5)

操作符:

Move(person, x):从位置x向上下左右移动

条件:AT(person, x)

动作:Goto(x, x+1),Goto(x, x-1),Goto(x, x+7),Goto(x, x-7)

Goto(x, y):从x走到y

条件:AT(person, x) ∧Pass(x, y)

动作:删除AT(person, x),添加AT(person, y)


3) 运用推理或搜索方法,获得路径:

推理:

AT(person, 41) →AT(person, 34) →AT(person, 35) →AT(person, 42) →结束

AT(person, 41) →AT(person, 40) →AT(person, 39) →AT(person, 38) →(person, 37) →AT(person, 36) →AT(person, 29) →AT(person, 30) →AT(person, 31) →AT(person, 32) →AT(person, 33) →AT(person, 26) 

→① AT(person, 25) →AT(person, 24) →AT(person, 23) →AT(person, 22) →结束

→② AT(person, 27) →AT(person, 28) →AT(person, 21) →AT(person, 14) →AT(person, 7)→AT(person, 6)→AT(person, 5) →成功

通过推理可以获得一条路径:

AT(person, 41) →AT(person, 40) →AT(person, 39) →AT(person, 38) →(person, 37) →AT(person, 36) →AT(person, 29) →AT(person, 30) →AT(person, 31) →AT(person, 32) →AT(person, 33) →AT(person, 26) →AT(person, 27) →AT(person, 28) →AT(person, 21) →AT(person, 14) →AT(person, 7)→AT(person, 6)→AT(person, 5)(而无法达到位置2)

搜索:

对以上状态空间采用广度优先搜索。

# 查找路径的入口函数    def find_path(self):        # 构建开始节点        p = Node_Elem(None, self.s_x, self.s_y)        while True:            # 广度优先扩展节点            self.extend_round(p)            # 如果open表为空,则不存在路径,返回            if not self.open:                return            # 取open表的第一个节点            idx, p = self.get_node()            # 到达终点,生成路径,返回            if self.is_target(p):                self.make_path(p)                return            # 把此节点加入close表,并从open表里删除            self.close.append(p)            del self.open[idx]


4) 运行结果:



通过对状态空间进行广度优先搜索,可以得到从起点到终点的一条路径。

0 0
原创粉丝点击