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

迷宫寻路问题是人工智能中的有趣问题,如何表示状态空间和搜索路径是寻路问题的重点,本文的主要内容是一阶谓词逻辑的理解和应用,首先对基本知识和算法思想进行了解,再通过其对迷宫问题求解应用,编写 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) 运行结果:

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

迷宫寻路问题——一阶谓词逻辑相关推荐

  1. bfs迷宫寻路问题(一看就懂的讲解)

    bfs迷宫问题讲解 广度优先搜索解决迷宫寻路问题 一.问题概述 二.问题分析 (一).手动模拟 (二).如何用计算机来解决 (1).地图表示 (2).如何找通路 (3).==如何找最短路(难点)== ...

  2. 数据结构应用实例#栈#迷宫寻路

    使用数据结构 栈(Stack)来实现一种低级的迷宫寻路的功能. 低级是因为无法判断路径是不是最短的. 这里使用的栈结构如图 (这图我选择死亡...) 注意结构体里DataType的实际含义,是另外一个 ...

  3. 迷宫寻路系列常用算法逻辑探究

    前言: 又到了人才流动的高峰季节,"金三银四",过了这个村,就没那个店,面试者勤奋地准备题典,面试官也在奋笔疾书, 有些面试官喜欢广度的知识覆盖,而有些面试官喜欢深度的知识探求. ...

  4. 语言谓词函数isprime_G?del完备性定理 —— 一阶谓词逻辑演绎系统 Part II

    本文使用 Zhihu On VSCode 创作并发布 各位朋友七夕快乐! 上一篇文章Gödel完备性定理 -- 一阶谓词逻辑演绎系统 Part I中笔者介绍了一阶谓词逻辑的语言和演绎系统,并粗略讨论了 ...

  5. 爪哇国新游记之二十六----迷宫寻路

    代码: class Position{int x;int y;public Position(int x,int y){this.x=x;this.y=y;} } // 迷宫寻路 public cla ...

  6. java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画

    前言 数据结构准备 迷宫生成算法 迷宫寻路算法 前言 本次带来迷宫相关的算法,迷宫的算法涉及到不少经典的图论算法,在游戏中NPC这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...

  7. 迷宫生成算法和迷宫寻路算法

    迷宫生成算法和迷宫寻路算法 大学二年级的时候,作为对栈这个数据结构的复习,我制作了一个迷宫生成算法的小程序,当时反响十分好,过了几天我又用自己已经学的DirectX技术制作了DirectX版的程序.这 ...

  8. 【强化学习】Q-Learning算法求解迷宫寻路问题 + Java代码实现

    文章目录 前言 一.Q-Learning算法简介 1.1 更新公式 1.2 预测策略 1.3 详细资料 二.迷宫寻路问题简介 三.Java代码 3.1 环境说明 3.2 参数配置 3.3 迷宫环境类 ...

  9. AI基础——一阶谓词逻辑表示法

    一阶谓词逻辑表示法以数理逻辑为基础,是一种重要的知识表示方法. 知识的谓词逻辑表示方法 谓词公式, 用谓词联接符号将一些谓词链接起来所形成的公式. 利用谓词公式既可以表示事物的状态.属性和概念等事实性 ...

最新文章

  1. Android中再按一次退出实现
  2. 深度学习还不能解决什么问题?
  3. C语言中时间的基本用法
  4. 如何用css3实现简单旋转的风车
  5. Spring MVC自定义验证注释
  6. java windows so文件_windows下编译使用NDK,调用SO文件 | 学步园
  7. 嵌入式开发板03---看门狗、编写启动代码
  8. 浏览器对象模型(BOM)
  9. android h5语音,html5录音支持pc和Android、ios部分浏览器,微信也是支持的,JavaScript getUserMedia...
  10. 使用Notepad++作为Latex编辑器
  11. 什么是UDS诊断协议?
  12. 6个html5手机游戏源码,html5逗你玩手机游戏源码
  13. ajax实现读取文件内容打印,javascript结合ajax读取txt文件内容
  14. java中BOM是什么_Java-BOM与DOM对象
  15. 软件开发模型-瀑布模型、V形模型、原型模型、增量模型、快速开发、敏捷模型
  16. 非常好的视频类软件下载与安装教程,非常棒
  17. [转]山寨手机初用者攻略
  18. 如果金融男和IT男同时追你,你选谁?
  19. 刘易java_java基础之多态的那些事儿
  20. 元宇宙将如何改变工作的未来?

热门文章

  1. 不同坐标系下角速度_星空的经纬线:浅谈赤道坐标系
  2. 翻译TIPatterns--项目(Projects)
  3. 【数学建模】线性代数模型(上)
  4. android魅族升级,魅族Android 4.4 Flyme升级教程教学详细介绍
  5. U盘刻录GSMS软件系统ISO文件教程
  6. 免费开源的客服系统 Linux 服务器环境安装部署过程
  7. 河北计算机专科学校排行,河北2017计算机专业专科学校排名
  8. 日本计算机专业就业方向 薪酬高吗?
  9. 蝙蝠算法c语言,一种新颖的群智能算法:飞蛾扑火优化算法
  10. 技术实践 | 在线 KTV 实现过程(内附demo体验)