迷宫寻路问题——一阶谓词逻辑
迷宫寻路问题——一阶谓词逻辑
迷宫寻路问题是人工智能中的有趣问题,如何表示状态空间和搜索路径是寻路问题的重点,本文的主要内容是一阶谓词逻辑的理解和应用,首先对基本知识和算法思想进行了解,再通过其对迷宫问题求解应用,编写 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 )。
用谓词公式表示知识的步骤如下:
- 定义用谓词及个体,确定每个谓词及个体的确切含义;
- 根据所要表达的事物或概念,为每个谓词中的变元赋以特定的值;
- 根据所要表达的知识的语义,用适当的连接符号将各个谓词连接起来,形成谓词公式。
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) 运行结果:
通过对状态空间进行广度优先搜索,可以得到从起点到终点的一条路径。
迷宫寻路问题——一阶谓词逻辑相关推荐
- bfs迷宫寻路问题(一看就懂的讲解)
bfs迷宫问题讲解 广度优先搜索解决迷宫寻路问题 一.问题概述 二.问题分析 (一).手动模拟 (二).如何用计算机来解决 (1).地图表示 (2).如何找通路 (3).==如何找最短路(难点)== ...
- 数据结构应用实例#栈#迷宫寻路
使用数据结构 栈(Stack)来实现一种低级的迷宫寻路的功能. 低级是因为无法判断路径是不是最短的. 这里使用的栈结构如图 (这图我选择死亡...) 注意结构体里DataType的实际含义,是另外一个 ...
- 迷宫寻路系列常用算法逻辑探究
前言: 又到了人才流动的高峰季节,"金三银四",过了这个村,就没那个店,面试者勤奋地准备题典,面试官也在奋笔疾书, 有些面试官喜欢广度的知识覆盖,而有些面试官喜欢深度的知识探求. ...
- 语言谓词函数isprime_G?del完备性定理 —— 一阶谓词逻辑演绎系统 Part II
本文使用 Zhihu On VSCode 创作并发布 各位朋友七夕快乐! 上一篇文章Gödel完备性定理 -- 一阶谓词逻辑演绎系统 Part I中笔者介绍了一阶谓词逻辑的语言和演绎系统,并粗略讨论了 ...
- 爪哇国新游记之二十六----迷宫寻路
代码: class Position{int x;int y;public Position(int x,int y){this.x=x;this.y=y;} } // 迷宫寻路 public cla ...
- java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画
前言 数据结构准备 迷宫生成算法 迷宫寻路算法 前言 本次带来迷宫相关的算法,迷宫的算法涉及到不少经典的图论算法,在游戏中NPC这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...
- 迷宫生成算法和迷宫寻路算法
迷宫生成算法和迷宫寻路算法 大学二年级的时候,作为对栈这个数据结构的复习,我制作了一个迷宫生成算法的小程序,当时反响十分好,过了几天我又用自己已经学的DirectX技术制作了DirectX版的程序.这 ...
- 【强化学习】Q-Learning算法求解迷宫寻路问题 + Java代码实现
文章目录 前言 一.Q-Learning算法简介 1.1 更新公式 1.2 预测策略 1.3 详细资料 二.迷宫寻路问题简介 三.Java代码 3.1 环境说明 3.2 参数配置 3.3 迷宫环境类 ...
- AI基础——一阶谓词逻辑表示法
一阶谓词逻辑表示法以数理逻辑为基础,是一种重要的知识表示方法. 知识的谓词逻辑表示方法 谓词公式, 用谓词联接符号将一些谓词链接起来所形成的公式. 利用谓词公式既可以表示事物的状态.属性和概念等事实性 ...
最新文章
- Android中再按一次退出实现
- 深度学习还不能解决什么问题?
- C语言中时间的基本用法
- 如何用css3实现简单旋转的风车
- Spring MVC自定义验证注释
- java windows so文件_windows下编译使用NDK,调用SO文件 | 学步园
- 嵌入式开发板03---看门狗、编写启动代码
- 浏览器对象模型(BOM)
- android h5语音,html5录音支持pc和Android、ios部分浏览器,微信也是支持的,JavaScript getUserMedia...
- 使用Notepad++作为Latex编辑器
- 什么是UDS诊断协议?
- 6个html5手机游戏源码,html5逗你玩手机游戏源码
- ajax实现读取文件内容打印,javascript结合ajax读取txt文件内容
- java中BOM是什么_Java-BOM与DOM对象
- 软件开发模型-瀑布模型、V形模型、原型模型、增量模型、快速开发、敏捷模型
- 非常好的视频类软件下载与安装教程,非常棒
- [转]山寨手机初用者攻略
- 如果金融男和IT男同时追你,你选谁?
- 刘易java_java基础之多态的那些事儿
- 元宇宙将如何改变工作的未来?
热门文章
- 不同坐标系下角速度_星空的经纬线:浅谈赤道坐标系
- 翻译TIPatterns--项目(Projects)
- 【数学建模】线性代数模型(上)
- android魅族升级,魅族Android 4.4 Flyme升级教程教学详细介绍
- U盘刻录GSMS软件系统ISO文件教程
- 免费开源的客服系统 Linux 服务器环境安装部署过程
- 河北计算机专科学校排行,河北2017计算机专业专科学校排名
- 日本计算机专业就业方向 薪酬高吗?
- 蝙蝠算法c语言,一种新颖的群智能算法:飞蛾扑火优化算法
- 技术实践 | 在线 KTV 实现过程(内附demo体验)