人人范文网 范文大全

人工智能实验报告

发布时间:2020-03-03 12:29:11 来源:范文大全 收藏本文 下载本文 手机版

人工智能课内实验报告

(8次)

学 院: 自动化学院

班 级: 智能1501 姓 名: 刘少鹏(34) 学 号: 06153034

目 录

课内实验1:猴子摘香蕉问题的VC编程实现„„„„„„„„1 课内实验2:编程实现简单动物识别系统的知识表示„„„5 课内实验3:盲目搜索求解8数码问题„„„„„„„„„18 课内实验4:回溯算法求解四皇后问题„„„„„„„„„33 课内实验5:编程实现一字棋游戏„„„„„„„„„„„37 课内实验6:字句集消解实验„„„„„„„„„„„„„46 课内实验7:简单动物识别系统的产生式推理„„„„„„66 课内实验8:编程实现D-S证据推理算法„„„„„„„„78

人工智能课内实验报告

实验1:猴子摘香蕉问题的VC编程实现

学 院: 自动化学院 班 级: 智能1501 姓 名: 刘少鹏 (33) 学 号: 06153034 日 期: 2017-3-8 10:15-12:00

1

实验1:猴子摘香蕉问题的VC编程实现

一、实验目的

(1)熟悉谓词逻辑表示法;

(2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。

二、编程环境 VC语言

三、问题描述

房子里有一只猴子(即机器人),位于a处。在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过VC语言编程实现猴子摘香蕉问题的求解过程。

图1 猴子摘香蕉问题

四、源代码

#include unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned char y) {

2

printf(\"Step %d:monkey从%c走到%c\\n\", ++i, x, y);//x表示猴子的位置,y为箱子的} void Monkey_Move_Box(char x, char y) { 位置

printf(\"Step %d:monkey把箱子从%c运到%c\\n\", ++i, x, y);//x表示箱子的位置,y为} void Monkey_On_Box() { 香蕉的位置

printf(\"Step %d:monkey爬上箱子\\n\", ++i); } void Monkey_Get_Banana() { printf(\"Step %d:monkey摘到香蕉\\n\", ++i); } void main() {

unsigned char Monkey, Box, Banana; printf(\"********智能1501班**********\\n\"); printf(\"********06153034************\\n\"); printf(\"********刘少鹏**************\\n\"); printf(\"请用a b c来表示猴子箱子香蕉的位置\\n\"); printf(\"Monkey\\tbox\\tbanana\\n\"); scanf(\"%c\", &Monkey); getchar(); printf(\"\\t\"); scanf(\"%c\", &Box); getchar(); printf(\"\\t\\t\"); scanf(\"%c\", &Banana); getchar(); printf(\"\\n操作步骤如下\\n\"); if (Monkey != Box) { Monkey_Go_Box(Monkey, Box); } if (Box != Banana) { Monkey_Move_Box(Box, Banana); } Monkey_On_Box(); Monkey_Get_Banana(); printf(\"\\n\");

3

getchar(); }

五、实验结果相关截图

六、心得体会

通过本次实验,我初步了学会了使用VC的新建工程,并且进行简单的程序编写。此外我还学会如何使用一些谓词来解决生活中的一些简单问题,并且用VC编程给出具体的操作步骤,感觉对VC编程有了新的认识。在实验中我也遇到过许多问题,比如在我写完代码进行编译时总是会出现一个错误“ fatal error C1010: 在查找预编译头时遇到意外的文件结尾,是否忘记了向源中添加“#include ‘stdafx.h’”关于这个错误我我问了几个同学得不出答案后,我决定通过上网查找,最终找到了解决方法,需要在该项目的每一个cpp结尾的文件属性中设置不使用预编译头即可。在这个过程中也锻炼了自己解决问题的能力。

4

人工智能课内实验报告

实验2:编程实现简单动物识别系统的知识表示

学 院: 自动化学院

班 级: 智能1501 姓 名: 刘少鹏(33) 学 号: 06153034 日 期: 2017-3-13 10:15-12:00

5

实验2:编程实现简单动物识别系统的知识表示

一、实验目的

1、理解和掌握产生式知识表示方法;

2、能够通过VC编程语言实现产生式系统的规则库。

二、实验内容

1、以动物识别系统的产生式规则为例;

2、用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作。

三、实验步骤

1、确定需要识别的动物及其属性

本次实验的简单动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟和信天翁。

2、建立识别七种动物识别系统的规则

3、选定编程语言并确定综合数据库和规则库结构 (1)选用C语言作为编程语言

(2)综合数据库的建立 (3)规则库的建立

四、程序源代码

#include #include using namespace std; struct RULES

{

int count; char pre[255]; char back[255]; int mark; }; void check(); RULES r[100] = {

{ 1,\"有毛发\",\"哺乳动物\",0 }, { 1,\"有奶\",\"哺乳动物\",0 }, { 1,\"有羽毛\",\"鸟\",0 }, { 2,\"会飞&下蛋&\",\"鸟\",0 }, { 1,\"吃肉\",\"食肉动物\",0 },

//所有规则静态数据库

{ 3,\"有锋利的牙齿&有爪&眼睛盯着前方&\",\"食肉动物\",0 }, { 2,\"哺乳动物&有蹄&\",\"有蹄类哺乳动物\",0 }, { 2,\"哺乳动物&反刍&\",\"有偶蹄类哺乳动物\",0 }, { 4,\"哺乳动物&食肉动物&黄褐色&有暗斑&\",\"金钱豹\",0 }, { 4,\"哺乳动物&食肉动物&黄褐色&黑色条纹&\",\"老虎\",0 }, { 4,\"有蹄类哺乳动物&有长脖子&有长腿&有暗斑&\",\"长颈鹿\",0 }, { 2,\"有蹄类哺乳动物&黑条纹&\",\"斑马\",0 }, { 5,\"鸟&不会飞&有长脖子&有长腿&黑白色&\",\"鸵鸟\",0 }, { 4,\"鸟&不会飞&会游泳&黑白色&\",\"企鹅\",0 }, { 2,\"鸟&会飞&\",\"信天翁\",0 }, { 1,\"反刍\",\"哺乳动物\",0 }

}; int number; int m; int cat = 15; int a; int length; void input() {

//输入的事实长度

string f[255];

//输入的事实数组

while (1) {

cat++; cout > r[cat].count; cout > r[cat].pre; cout > r[cat].back; r[cat].mark = 0; while (1) {

cout > p; if (p == 1) { } else { if (p == 2) {

7 input();

} } check(); else { } cout

cout > bar; for (int t = 0; t = 0 && temp[i]\'0\' >= 0 && temp[j]\'0\'; target[j] = temp[j]3); break; case 2: /* down */

if (blank

if (blank != 0 && blank != 3 && blank != 6) swap(m + blank, m + blank1][y1][y - 1] = -1;

40 bool flag = true; int i = 0; for (i = 0; i

for (int j = 0; j

if (s.QP[i][j] == 0)tmpQP[i][j] = 1; else tmpQP[i][j] = s.QP[i][j]; for (i = 0; i

count += (tmpQP[i][0] + tmpQP[i][1] + tmpQP[i][2]) / 3; count += (tmpQP[0][i] + tmpQP[1][i] + tmpQP[2][i]) / 3; for (i = 0; i

for (int j = 0; j

if (s.QP[i][j] == 0)tmpQP[i][j] = -1; else tmpQP[i][j] = s.QP[i][j]; for (i = 0; i

count += (tmpQP[i][0] + tmpQP[i][1] + tmpQP[i][2]) / 3; count += (tmpQP[0][i] + tmpQP[1][i] + tmpQP[2][i]) / 3; for (i = 0; i

count += (tmpQP[0][0] + tmpQP[1][1] + tmpQP[2][2]) / 3; count += (tmpQP[2][0] + tmpQP[1][1] + tmpQP[0][2]) / 3; return count; return false; L1: cout

};

} else {

} cout

demo() {} bool Judge() {

} virtual bool AutoDone() {

int a, b, i, j, m, n, max, min, x, y; if (IsWin(States[0]) == -1) {

} a = 0, b = 0; max = -10000; for (x = 0; x

for (y = 0; y

if (States[0].QP[i][j] == 0) {

a = 1;

for (x = 0; x

for (y = 0; y

41

}

}

States[a].QP[x][y] = States[0].QP[x][y];

States[a].QP[i][j] = 1; min = 10000;

for (m = 0; m

for (n = 0; n

}

if (States[a].QP[m][n] == 0) {

}

b = 1;

for (x = 0; x

for (y = 0; y

States[10].QP[x][y] = States[a].QP[x][y];

States[10].QP[m][n] = -1;

States[10].e_fun = e_fun(States[10]);

if (States[10].e_fun

States[a].e_fun = min; if (States[a].e_fun>max) {

}

max = States[a].e_fun; for (x = 0; x

for (y = 0; y

States[11].QP[x][y] = States[a].QP[x][y]; for (x = 0; x

} else if (IsWin(States[0]) == -1) {

} return false;

42 cout

}; } void main() {

cout

system(\"title #子棋智能小游戏\"); system(\"color A2\"); char IsFirst; bool IsFinish; cout > IsFirst; demo *p = new demo(); p->init(); cout PrintQP(); do {

if (!p->Judge()) {

} if (p->Judge()) IsFinish = true; if (IsFirst == \'Y\') {

} else if (IsFirst == \'N\') {

} IsFinish = p->AutoDone(); if (!p->Judge()) { }

if (!IsFinish) { p->UserInput(); p->PrintQP(); } p->UserInput(); p->PrintQP(); if (!p->Judge()) { }

IsFinish = p->AutoDone(); } while (!IsFinish); if ((p->IsWin(p->States[0]) == 0) && p->Judge()) {

43

} } cout

44

4、实验心得

本次实验,我通过学习用VC编程语言设计简单的博弈游戏,从而理解和掌握博弈树的启发式搜索过程,熟悉博弈中两种最基本的搜索方法——极大极小过程和过程。并且将这种思想通过代码表现出来。

本次实验我最大的收获不仅仅是学到了课本上的知识,更是学会了如何主动的求解问题的答案。实验中我遇到了许多困难,不仅仅是有关编程算法方面的,还有一些代码逻辑流程的设计。这些困难我通过上网和去图书馆查找资料或者向同学请教等方式,逐一解决了困难,我收获良多。

45

人工智能课内实验报告

实验6:子句集消解实验

学 院: 自动化学院 班 级: 智能1501 姓 名: 刘少鹏 (33) 学 号: 06153034 日 期: 2017-05-8 10:15-12:00

46

实验6子句集消解实验

一、实验目的

(1)熟悉子句集化简的九个步骤;

(2)理解消解规则,能把任意谓词公式转换成子句集。

二、编程环境

Visual Studio 2017

三、实验原理

在谓词逻辑中,任何一个谓词公式都可以通过应用等价关系及推理规则化成相应的子句集。

其化简步骤如下:

(1) 消去连接词“→”和“↔” 反复使用如下等价公式:

P→Q ⇔﹁ P∨Q

P↔Q ⇔ (P∧Q)∨(﹁P∧﹁Q) 即可消去谓词公式中的连接词“→”和“↔”。 (2) 减少否定符号的辖域 反复使用双重否定率

﹁(﹁P) ⇔ P

摩根定律

﹁(P∧Q) ⇔﹁P∨﹁Q

﹁(P∨Q) ⇔﹁P∧﹁Q

量词转换率

﹁ (∀x)P(x) ⇔ (∃x) ﹁P(x)

﹁ (∃x)P(x) ⇔ (∀x)¬P(x) 将每个否定符号“﹁”移到仅靠谓词的位置,使得每个否定符号最多只作用于一个谓词上。

(3) 对变元标准化

在一个量词的辖域内,把谓词公式中受该量词约束的变元全部用另外一个没有出现过的任意变元代替,使不同量词约束的变元有不同的名字。

(4) 化为前束范式

化为前束范式的方法:把所有量词都移到公式的左边,并且在移动时不能改变其相对顺序。

(5) 消去存在量词

(6) 化为Skolem标准形

对上述前束范式的母式应用以下等价关系

P∨(Q∧R) ⇔ (P∨Q)∧(P∨R) (7) 消去全称量词 (8) 消去合取词

47

在母式中消去所有合取词,把母式用子句集的形式表示出来。其中,子句集中的每一个元素都是一个子句。

(9) 更换变量名称

对子句集中的某些变量重新命名,使任意两个子句中不出现相同的变量名。

四、实验结果及代码

//化简子句集的九步法演示 //作者:刘少鹏 //时间:2017.5 #include #include #include #include using namespace std; //一些函数的定义

void initString(string &ini);//初始化

string del_inlclue(string temp);//消去蕴涵符号

string dec_neg_rand(string temp);//减少否定符号的辖域 string standard_var(string temp);//对变量标准化 string del_exists(string temp);//消去存在量词 string convert_to_front(string temp);//化为前束形

string convert_to_and(string temp);//把母式化为合取范式 string del_all(string temp);//消去全称量词

string del_and(string temp);//消去连接符号合取% string change_name(string temp);//更换变量名称

//辅助函数定义 bool isAlbum(char temp);//是字母

string del_null_bracket(string temp);//删除多余的括号 string del_blank(string temp);//删除多余的空格 void checkLegal(string temp);//检查合法性

char numAfectChar(int temp);//数字显示为字符

//主函数 void main() { cout P)\"; //orign = \"~(#x)y(x)\"; //orign = \"~((@x)x!b(x))\"; //orign = \"~(x!y)\"; //orign = \"~(~a(b))\"; string orign, temp; char command, command0, command1, command2, command3, command4, command5,

48

人工智能_实验报告

人工智能TSP旅行商问题实验报告

人工智能产生式系统实验报告解读

人工智能

人工智能

人工智能

人工智能

人工智能

人工智能

人工智能

人工智能实验报告
《人工智能实验报告.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档