没有合适的资源?快使用搜索试试~ 我知道了~
首页人工智能原理实验报告.pdf合肥工业大学人工智能原理实验报告
资源详情
资源评论
资源推荐

《人工智能原理》实验报告
姓名:
学号:
专业:
2021 年 4 月 10 日
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制

目录
1.斑马问题
.....................................................................................................................
3
1.1
实验目的
..............................................................................................................................................
3
1.2 实验内容
..............................................................................................................................................
3
1.3 实验原理
..............................................................................................................................................
4
1.4 实验代码
..............................................................................................................................................
5
1.5 实验结果
..............................................................................................................................................
6
1.6 心得体会
.............................................................................................................................................
6
2.
黑白棋问题
.................................................................................................................
7
1.1 实验目的
..............................................................................................................................................
7
1.2
实验内容
..............................................................................................................................................
7
1.3
实验原理
..............................................................................................................................................
8
1.4
实验代码
............................................................................................................................................
11
1.5 实验结果
............................................................................................................................................
32
1.6 心得体会
............................................................................................................................................
34
3.八皇后问题
..............................................................................................................
36
1.1 实验目的
............................................................................................................................................
36
1.2 实验内容
............................................................................................................................................
36
1.3 实验原理
............................................................................................................................................
36
1.4 实验代码
............................................................................................................................................
37
1.6
实验心得
...........................................................................................................................................
44
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制

1.斑马问题
1.1 实验目的
通过实验,基本掌握逻辑编程的思想,了解逻辑编程与命令式编程的区别。
能够依据给定的事实以及规则编写代码,解决逻辑约束问题(CLP)。
1.2 实验内容
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制

对整个实验代码有一个初步的了解,阅读整段代码,填补空缺部分。完成对
问题的推导,找到哪所房子里的人养斑马,哪所房子里的人喜欢喝矿泉水。并进
行输出。其中 left()函数的作用是描述两个具有一系列特征的对象的左右位置
关系。其中 next()函数的作用是描述两个具有一系列特征的对象的具有相邻的
位置关系。
1.3 实验原理
在 python 中有着丰富的库,每个库都能实现各种各样的功能。其中 Kanren
库里面的 lall 包用于定义规则,而解决问题的关键就是弄清楚爱因斯坦的超级
问题中,事实、规则、问题分别是什么。
“事实”实际上已经很清楚了,就是题目详情中所给的第一段话以及 15 个
已知信息;问题也很明确:找到养鱼的那个人。但对于此题,将所有人的国籍、
养的宠物、房子的颜色、喝的饮料以及抽的烟全部匹配出来同样是可行的。所以
问题可以变为,求出使全部事实成立的 5 个匹配。
相比较与”事实“和“问题”的清晰明了,“规则”就比较隐秘了,需要
我们从题目中挖掘:
通过已知信息(4),我们知道需要定义规则“A 在 B 的左边(相邻)”。一共
有五座房子,若从左到右依次标号为 1-5,那么“(A,B)分别为(1,2)、(2,3)、
(3,4)、(4,5)”都符合“规则 A 在 B 的左边(相邻)”。
通过已知信息(8),我们知道需要定义规则“A 房子在中间”。若让五座房
子沿用上面 1-5 的编号,则只有“A 房子标号为 3”才符合规则“A 房子在中间”。
通过已知信息(9),我们知道需要定义规则“A 房子是第一个房子”。若让五座
房子沿用上面 1-5 的编号,则只有“A 房子标号为 1”才符合规则“A 房子是第
一个房子”。
通过已知信息(10)、(11)、(14),我们知道需要定义规则“A 在 B 的旁边”。
那么“(A,B)分别为(1,2)、(2,3)、(3,4)、(4,5)、(2,1)、(3,2)、(4,3)、(5,4)”
都符合规则“A 在 B 的旁边”。
由于房主人的国籍、房主人所养的宠物、房子的颜色、房主人喝的饮料、房
主人抽的烟都是匹配好的,所以我们假设:在使用与这 5 个属性的其中之一属性
相关的任何一个规则时,都将其他 4 个属性与其绑定处理,看作一个整体,只不
过这个整体除了规则涉及到的属性之外,还有其他的属性。
由于所有的属性都与人息息相关,所以我们可以设定谓词 var(Country, Pet,
Color, Drink, Smoke)。
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制

五个房子从左到右又有五个位置,所以我们可以设定谓词 house(A, Houses),
其中 A 就是使事实成立的一个 people 实例,house(A, Houses)表示 A 的房子在
五个房子中的相对位置,一共有五种。
eq()函数表示五个房子的布局。其中用 var()来表示每个房子的特征。
最后一个规则就是,当所有事实成立时,我们便可得出一个布局。
1.4 实验代码(其中红色部分为填补的代码)
from kanren import *
from kanren.core import lall # lall
包用于定义规则
import time
#
定义
left()
函数
def left(q, p, list):
return membero((q,p), zip(list, list[1:]))
#
定义
next()
函数
def next(q, p, list):
return conde([left(q, p, list)], [left(p, q, list)])
'''声明房子变量 '''
houses = var()
''' 给出条件语句 '''
rules_zebraproblem = lall(
(eq, (var(), var(), var(), var(), var()), houses), # 5
个
var()
分别代表人、身份、饮料、动物、屋子颜色
#
房子里的每个子成员
有五个属性
: membero(
国家,身份,饮料,宠物,房子
)
(membero,('英国人', var(), var(), var(), '红色'), houses), # 1.
英国人住在红色的房子里
(membero,('西班牙人', var(), var(), '狗', var()), houses), # 2.
西班牙人养了一条狗
(membero,('日本人', '油漆工', var(), var(), var()), houses), # 3.
日本人是一个油漆工
(membero,('意大利人', var(), '茶', var(), var()), houses), # 4.
意大利人喜欢喝茶
(eq,(('挪威人', var(), var(), var(), var()), var(), var(), var(),
var()), houses),# 5.
挪威人住在左边的第一个房子里
(left,(var(), var(), var(), var(), '白色'),(var(), var(), var(), var(),
'绿色'), houses), # 6.
绿房子在白房子的右边
(membero,(var(), '摄影师', var(), '蜗牛', var()), houses),
# 7.
摄影师养了一只蜗牛
(membero,(var(), '外交官', var(), var(), '黄色'), houses),
# 8.
外交官住在黄房子里
(eq, (var(), var(), (var(), var(), '牛奶', var(), var()), var(), var()),
houses),# 9.
中间那个房子的人喜欢喝牛奶
(membero,(var(), var(), '咖啡', var(), '绿色'), houses),
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
严禁复制
剩余67页未读,继续阅读





安全验证
文档复制为VIP权益,开通VIP直接复制

评论0