人工智能实验报告大全.docx

上传人:wj 文档编号:66622 上传时间:2023-04-28 格式:DOCX 页数:129 大小:951.87KB
下载 相关 举报
人工智能实验报告大全.docx_第1页
第1页 / 共129页
人工智能实验报告大全.docx_第2页
第2页 / 共129页
人工智能实验报告大全.docx_第3页
第3页 / 共129页
人工智能实验报告大全.docx_第4页
第4页 / 共129页
人工智能实验报告大全.docx_第5页
第5页 / 共129页
人工智能实验报告大全.docx_第6页
第6页 / 共129页
人工智能实验报告大全.docx_第7页
第7页 / 共129页
人工智能实验报告大全.docx_第8页
第8页 / 共129页
人工智能实验报告大全.docx_第9页
第9页 / 共129页
人工智能实验报告大全.docx_第10页
第10页 / 共129页
人工智能实验报告大全.docx_第11页
第11页 / 共129页
人工智能实验报告大全.docx_第12页
第12页 / 共129页
人工智能实验报告大全.docx_第13页
第13页 / 共129页
人工智能实验报告大全.docx_第14页
第14页 / 共129页
人工智能实验报告大全.docx_第15页
第15页 / 共129页
人工智能实验报告大全.docx_第16页
第16页 / 共129页
人工智能实验报告大全.docx_第17页
第17页 / 共129页
人工智能实验报告大全.docx_第18页
第18页 / 共129页
人工智能实验报告大全.docx_第19页
第19页 / 共129页
人工智能实验报告大全.docx_第20页
第20页 / 共129页
亲,该文档总共129页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

人工智能实验报告大全.docx

《人工智能实验报告大全.docx》由会员分享,可在线阅读,更多相关《人工智能实验报告大全.docx(129页珍藏版)》请在冰点文库上搜索。

人工智能实验报告大全.docx

 

人工智能课内实验报告

(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:

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

1、实验目的

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

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

二、编程环境

VC语言

3、问题描述

房子里有一只猴子(即机器人),位于a处。

在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。

房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。

如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。

要求通过VC语言编程实现猴子摘香蕉问题的求解过程。

图1 猴子摘香蕉问题

4、源代码

#include

unsigned int i;

void Monkey_Go_Box(unsigned char x, unsigned char y)

{

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("请用abc来表示猴子箱子香蕉的位置\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");

getchar();

}

5、实验结果相关截图

六、心得体会

通过本次实验,我初步了学会了使用VC的新建工程,并且进行简单的程序编写。

此外我还学会如何使用一些谓词来解决生活中的一些简单问题,并且用VC编程给出具体的操作步骤,感觉对VC编程有了新的认识。

在实验中我也遇到过许多问题,比如在我写完代码进行编译时总是会出现一个错误“ fatalerrorC1010:

 在查找预编译头时遇到意外的文件结尾,是否忘记了向源中添加“#include ‘stdafx.h’”关于这个错误我我问了几个同学得不出答案后,我决定通过上网查找,最终找到了解决方法,需要在该项目的每一个cpp结尾的文件属性中设置不使用预编译头即可。

在这个过程中也锻炼了自己解决问题的能力。

人工智能课内实验报告

实验2:

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

 

学 院:

 自动化学院

班 级:

 智能1501

姓 名:

 刘少鹏(33)

学 号:

 06153034

日 期:

 2017-3-13 10:

15-12:

00

 

实验2:

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

一、实验目的

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

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

二、实验内容

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

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

3、实验步骤

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; //输入的事实长度

string f[255]; //输入的事实数组

void input()

{

while 

(1)

{

cat++;

cout << "number" << endl;

cin >> r[cat].count;

cout << "输入事实,两种以上的事实请在每个事实后加上‘&’符号" << endl;

cin >> r[cat].pre;

cout << "输入结果" << endl;

cin >> r[cat].back;

r[cat].mark=0;

while 

(1)

{

cout << "输入“1”继续添加规则,输入“2”查看规则库" << endl;

int p;

cin >> p;

if (p==1)

{

input();

}

else

{

if (p==2)

{

check();

}

else

{

cout << "输入错误,重新输入" << endl;

}

}

}

}

}

void delate()

{

cout << "输入要删除的条数" << endl;

int bar;

cin >> bar;

for (int t=0;t<=cat;t++)

{

r[bar-1] = r[bar];

bar++;

}

cat--;

check();

}

void check()

{

cout << endl << "规则库如下" << endl;

for (int i=0;i<=cat;i++)

{

cout << i+1 << "." << "由" << r[i].pre << "可得" << r[i].back << endl;

}

cout << endl;

while 

(1)

{

cout << "输入“1”继续添加规则,输入“3”删除选定的规则" << endl;

cin >> m;

if (m==1)

{

input();

}

else

{

if (m==3)

delate();

}

}

}

int find_rule(int s) //查找规则库中是否还有可使用的规则

{

for (int i=0;i<=15;i++)

s = s*r[i].mark;

//cout<<"find_rule结果"<

return s;

}

int compare1(RULES r) //当前提条件为1时

{

int j=0,i=1;

string str,str2;

str = r.pre;

while (i<=length)

{

if (f[i] == str)

{

str2 = r.back;

f[length+1] = str2; //加入事实库

length++; //事实库的长度加1

r.mark=1; //标记规则已使用过

break;

}

else

i++;

}

return r.mark;

}

int compare2(RULES r) //前提条件不为1

{

string b[10];

string str,str2;

int i,j=1,num=0;

int a=0;

str = r.pre;

for (i=0;i!

=10;++i) //转换数组

{

b[i] = "";

}

for (i=0;i!

=str.length();++i)

{

if (str.at(i)!

= '&')

{

b[j] += str.at(i);

}

else

{

j++;

}

}

i=1;

while (i<= r.count)

{

for (j=1;j!

=length+1;j++)

{

if (f[j] == b[i])

{

a+=1;

}

}

i++;

}

if (a== r.count)

{

str2 = r.back;

f[length+1] = str2; //加入事实库

length++; //事实库的长度加1

r.mark=1; //标记规则已使用过

}

return r.mark;

}

void result()

{

int i=1,m=0;

while (i!

= length+1)

{

if (f[i] == "金钱豹")

{

cout << "该动物是金钱豹" << endl;

m=1;

break;

}

else

if (f[i] == "老虎")

{

cout << "该动物是老虎" << endl;

m=1;

break;

}

else

if (f[i] == "长颈鹿")

{

cout << "该动物是长颈鹿" << endl;

m=1;

break;

}

else

if (f[i] == "斑马")

{

cout << "该动物是斑马" << endl;

m=1;

break;

}

else

if (f[i] == "鸵鸟")

{

cout << "该动物是鸵鸟" << endl;

m=1;

break;

}

else

if (f[i] == "企鹅")

{

cout << "该动物是企鹅" << endl;

m=1;

break;

}

else

if (f[i] == "信天翁")

{

cout << "信天翁" << endl;

m=1;

break;

}

else

i++;

}

if (m==0)

cout << "没有符合的动物,请确认特征,重新输入" << endl;

}

void idetify()

{

int i=0,u=0;

if (find_rule(u)==0) //如果规则库中还有未使用的规则

{//cout<<"还有未使用的规则"<

int num=length;

while (i<16) //从第一条规则开始遍历

{

if (r[i].mark==0) //如果该条规则未使用

{

if (r[i].count==1) //该条规则前提数为1

{

u=compare1(r[i]);

if (u==1)

r[i].mark=1;

if (r[i].mark==1)

{

cout << "使用规则" << i+1;

cout << "且加入的新事实为" << r[i].back << endl;

}

}

else

{

u=compare2(r[i]);

if (u==1)

r[i].mark=1;

if (r[i].mark==1)

{

cout << "使用规则" << i+1;

cout << "且加入的新事实为" << r[i].back << endl;

}

}

}

if (i==15)

{

if (num!

=length)

{

i= 0;

num=length;

}

else

i=16;

}

else

{

i++;

}

}

}

else

{

cout << "所有的规则都已使用" << endl;

}

result();

}

/*主函数*/

void main()

{

cout << "******智能1501班********" << endl;

cout << "******06153034**********" << endl;

cout << "******刘少鹏************" << endl;

cout << "进行动物识别请输入7" << endl;

cout << "进行规则库操作请输入8" << endl;

cin >> a;

while (a==8)

{ while 

(1)

{

cout << "添加规则输入‘1’,查看已有规则输入‘2’" << endl;

cin >> m;

if (m==1)

{

input();

}

else

{

if (m==2)

{

check();

}

else

cout << "输入错误请重新输入" << endl;

}

}

}

if (a==7)

{

int u=0;

cout << "请输入动物的特征数" << endl;

cin >> length;

cout << "请输入动物的特征" << endl;

for (int i=1;i<=length;i++)

cin >> f[i];

idetify();

}

system("pause");

}

5、实验结果相关截图

1、程序总体结构

2、 规则库操作→查看规则库

3、 规则库操作→添加规则→添加袋鼠规则

4、 规则库操作→删除规则→删除袋鼠规则

5、动物识别→识别长颈鹿

六、心得体会

通过本次实验我深刻的理解和掌握产生式知识表示方法,并且能够通过VC编程语言实现产生式系统的规则库。

本次实验我同样遇到许多问题,我通过自己查阅资料,与同学们讨论,逐步的将自己的问题解决,在这个过程中提高了我的问题解决能力。

最后因为本次实验只有对数据库有清楚的掌握,同时熟悉规则才能合理编程,因此我在平时的学习中应当加大数据库与数据结构的学习力度,提高自己的编程能力。

 

 

人工智能课内实验报告

实验3:

盲目搜索求解八数码问题

 

学 院:

 自动化学院

班 级:

 智能1501

姓 名:

 刘少鹏 (33)

学 号:

 06153034

日 期:

 2017-03-30 10:

15-12:

00

 

人工智能课内实验3:

盲目搜索求解8数码问题

1、 实验目的

(1)熟悉人工智能系统中的问题求解过程;

(2)熟悉状态空间中的盲目搜索策略;

(3)掌握盲目搜索算法,重点是宽度优先搜索和深度优先搜索算法。

2、 实验要求

用VC语言编程,采用宽度优先搜索和深度优先搜索方法,求解8数码问题

3、 实验内容

(1)采用宽度优先算法,运行程序,要求输入初始状态

假设给定如下初始状态S0

283

164

705

和目标状态Sg

216

408

753

验证程序的输出结果,写出心得体会。

(2)对代码进行修改(选作),实现深度优先搜索求解该问题

提示:

每次选扩展节点时,从数组的最后一个生成的节点开始找,找一个没有被扩展的节点。

这样也需要对节点添加一个是否被扩展过的标志。

4 源代码及实验结果截图

(1) 实验源代码

#include

#include

TypedefstructNode{ int num[9];//棋盘状态

intdeepth;//派生的深度 g(n)

intdiffnum;//不在位的数目 h(n)

intvalue;//耗散值 f(n)=g(n)+h(n)

structNode*pre;

structNode*next;

structNode*parent;

}numNode;/*--endofstructnumNode--*/

intorigin[9];//棋盘初始状态

inttarget[9];//棋盘目标状态

intnumNode_num,total_step;

numNode*open,*close;//Open表和Close表

numNode*create_numNode()

{

return(numNode*)malloc(sizeof(numNode));

}

numNode*open_getfirst(numNode*head);//返回第一项,并从Open表中删除

voidopen_insert(numNode*head,numNode*item);//向Open表中按序插入新节点

voidclose_append(numNode*head,numNode*item);//向Close表中插入新节点

intexpand(numNode*item);//扩展节点

intprint_result(numNode*item);//打印结果

numNode *copy_numNode(numNode*orgin);

charisNewNode(numNode*open,numNode*close,intnum[9]);//是否在Open表或Close表中

voidprint_num(intnum[9]);//打印棋盘状态

intdiff(intnum[9]);//求不在位棋子的个数

voidinit();//初始化,获得棋盘初始状态和目标状态

voidswap(int*a,int*b);

intoperate(int num[],intop);

voidfree_list(numNode*head);

//*Name:

 主函數

//*Description:

 程序入口

intmain(intargc,char*argv[])

{

//初始化Open表和Close表

printf("*****智能1501****\n");

printf("*****刘少鹏******\n");

printf("*****06153034****\n");

open=create_numNode();

close=create_numNode();

open->pre=open->next=close->pre=close->next=NULL;

init();//由用户输入初始和目标状态

//初始化初始节点

numNode*p1;

p1=create_numNode();

p1->parent=NULL;

p1->deepth=0;

inti=0;

for(i=0;i<9;i++)

{

p1->num[i]=origin[i];

}

open_insert(open,p1);

numNode_num=1;

p1=open_getfirst(open);

while(p1!

=NULL)

{

close_append(close,p1);

if(expand(p1))

returnEXIT_SUCCESS;

p1=open_getfirst(open);

}

printf("Nosolution!

\n");

returnEXIT_SUCCESS;

}/*----------endoffunctionmain----------*/

voidinit()

{

while

(1)

{

printf("Pleaseinputopriginalstatus:

\nForexample:

123456780standsfor\n"

"123\n"

"456\n"

"7 80\n");

chartemp[10];

scanf("%s",&temp);

inti=0;

for(i=0;i<9&&temp[i]-'0'>=0&&temp[i]-'0'<=8;i++)

{

origin[i]=temp[i]-'0';

}

printf("Pleaseinputtargetstatus:

\n");

scanf("%s",&temp);

int

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2