人工智能实验二报告(含代码说明)

  1. 实验目的
  2. 实验硬件,软件平台
  3. Prolog学习
  4. 问题的选取

一、实验目的
1.熟悉PROLOG的运行环境,进行PROLOG的基本编程练习;
了解PROLOG语言中常量、变量的表示方法。PROLOG的简单程序结构,掌握分析问题、询问解释技巧;进行事实库、规则库的编写,并在此基础上进行简单的询问。
2.求解图搜索问题。
任选一个以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问题、八皇后问题、农夫过河问题、传教士与野人问题。
二、实验的硬件、软件平台
硬件:计算机
  软件:操作系统:WINDOWS/Linux
应用软件:Prolog

三.Prolog的学习
1.prolog的用途。
主要用在人工智能和计算机语言的研究领域,prolog和LISP是两个主要的研究人工智能算法的工具,基本的写法是确定物件与物件之间的关系,询问目标的方式来查询各个物件之间的关系,系统会自动进行匹配和回溯,找出正确的答案,有自己的知识库。
2.安装配置对应系统的SWI-Prolog。
在这里插入图片描述

Windows安装SWI-Prolog,64位版本。打印语句打印出第一句话hello world,后面会跟着一句true,Prolog调用时会查询自己的知识库,判断知识库中这句话是否为真,打印出判断结果。
退出语句为halt.每句话以“.”结尾,halt退出SWI-Prolog。
3.语法的熟悉。
程序由一组事实,规则和问题组成,根据事实推导出隐藏的规则,并且提出查询的问题,得到问题的答案。
使用记事本编辑图的关系,并且保存下来,记录路径,通过路径来查询,点击file的consult来查询,也可以输入文件路径来查询。

对应的家谱,yuan:母亲,yuqing:女儿,di:父亲,xin:奶奶,jianbo:爷爷。

在这里插入图片描述
在这里插入图片描述

每一行代表一个子句,带有“:-”的是规则,不带有“:-”的是事实,以小写英文字母开头的是原子,以大写字母开头的是变量,原子是常量,它的值是不可以改变的,变量的值可以改变,在Prolog里面,“,”表示逻辑关系的且,“;”表示逻辑关系的或。
在这里插入图片描述

Consult让SWI-Prolog加载后面文件路径的程序,然后编译,文件存在,输出true,输入grandmother查询yuqing的祖母是谁,结果为xin,虽然我们没有直接输入这个关系,但是Prolog根据我们给出的规则生成,输入father(di,yuqing),yuqing的父亲是di,查询prolog的知识库,存在这个子句关系,输出结果为true。
Prolog的表相关知识:表是Prolog的一种数据结构,数字中序列,集合,数组,记录都可以使用表来表示,最大的特点是长度不固定,可以改变,可以增加或者删除一个元素,通过表可以方便地构建堆栈,队列,链表,树等动态数据结构,十分方便好用。
同时,表可以分为头尾两个部分,表头是第一个元素,表尾是最后一个元素,通过[header|tail]来进行划分,它可以按照你的划分方式来划分元素,进行灵活地匹配。
Prolog查询的方式:
(1)匹配,prolog试图从自己的知识库里找出最符合你的规则或者是事实。
(2)变量重命名,给变量重命名保证变量不重复。
(3)回溯,使用深度优先的算法寻找答案,直到查询完所有可能的情况,如果依然不能证实,那么返回“false”。
4.Prolog的过程性意义和描述性意义
Prolog通过过程性意义来确定解决问题的步骤,描述性意义在于描述问题中各个物体之间的关系,Prolog进行搜索知识库回溯规则来解决问题,并且输出判断的结果,或是二者之间的关系。
四.问题的选取
1.题目描述
事实:
1、在一条街上,有5座房子,喷了5种颜色.
2、每个房里住着不同国籍的人
3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物

提示:
1、英国人住红色房子
2、瑞典人养狗
3、丹麦人喝茶
4、绿色房子在白色房子左面
5、绿色房子主人喝咖啡
6、抽Pall Mall 香烟的人养鸟
7、黄色房子主人抽Dunhill 香烟
8、住在中间房子的人喝牛奶
9、 挪威人住第一间房
10、抽Blends香烟的人住在养猫的人隔壁
11、养马的人住抽Dunhill 香烟的人隔壁
12、抽Blue Master的人喝啤酒
13、德国人抽Prince香烟
14、挪威人住蓝色房子隔壁
15、抽Blends香烟的人有一个喝水的邻居
问题:谁养鱼?

2.问题分析
使用目标导向分析,我们需要写出prolog程序来解答这个问题,程序由文字编辑器输入,根据题目中给出的已知条件,写出对应的规则,事实,最后推导出问题的答案。
根据题目意思,在爱因斯坦问题中,五所房子相邻在一起,房子的颜色不同,房客的国籍不同,养的宠物不同,抽烟,饮料也不同,通过给出的15个事实,需要推导出养鱼的人的具体信息,从而使得所有信息成立。
(1)对于房子来说,根据提示4,有的房子在另一所的左边;
(2)提示8中,有的房子在5所房子中间,5所房子是相邻排列的;
(3)提示10,11,14中,有的房子A在另一所房子B的隔壁;
(4)根据三条总结,我们可以制定相应的规则,来实现房子处于左边,房子处于中间,房子处在第一位,房子在隔壁;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)每所房子的房客都有五个特点,我们可以设定谓词person(Color,Country,Drink,Cigar,Pet),五个属性对应五个特点,每个房子的属性都不一样。
(6)使用house(A,[])来表示房子在五所房子中的位置信息,从左到右排列,处于一个长度为5的列表中,每个列表元素代表着一所房子,下划线“_”表示当前属性待定。
在这里插入图片描述

(7)根据题目的意思,使用逻辑且,输入所有的事实。
在这里插入图片描述

(8)在满足所有的前提的情况下,求出最后需要得到问题的表示形式,得到正确的布局和答案即可。

3.结果运行
在这里插入图片描述

在保存文本文件的时候保存为大写字母开头,然后保存为.pl格式,在文本中编辑的时候,注释使用“/**/”表示,由于SWI-prolog不能识别中文,加了中文注释后一直运行不通过,所以把注释换为了英文才得到正确的结果。
在事实陈述的时候,使用“,”表示逻辑且,“.”表示事实陈述结束。
运行的结果中,通过consult来建立连接,true表示连接成功,输入solve(A)查看列表中的具体内容,A表示变量,是一个列表参数,表示所有的房子的排列,打印的结果里面,满足了所有的条件,可以看到德国人German的宠物是金鱼。

房子的排列情况:
在这里插入图片描述

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值