人工智能实验报告大全.pdf
《人工智能实验报告大全.pdf》由会员分享,可在线阅读,更多相关《人工智能实验报告大全.pdf(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-.人工智能课内实验报告(8 次)学院:自动化学院班级:智能 1501姓名:X 少鹏(34)学号:06153034-编.-可修-.目 录课内实验 1:猴子摘香蕉问题的 VC 编程实现1课内实验 2:编程实现简单动物识别系统的知识表示5课内实验 3:盲目搜索求解 8 数码问题18课内实验 4:回溯算法求解四皇后问题33课内实验 5:编程实现一字棋游戏37课内实验 6:字句集消解实验46课内实验 7:简单动物识别系统的产生式推理66课内实验 8:编程实现 D-S 证据推理算法7-可修编.8-.-编.-可修-.人工智能课内实验报告实验 1:猴子摘香蕉问题的 VC 编程实现学院:自动化学院班级:智能
2、1501姓名:X 少鹏(33)学号:06153034日期:2017-3-810:15-12:00-编.-可修-.实验实验 1 1:猴子摘香蕉问题的猴子摘香蕉问题的 VCVC 编程实现编程实现一、实验目的(1)熟悉谓词逻辑表示法;(2)掌握人工智能谓词逻辑中的经典例子猴子摘香蕉问题的编程实现。二、编程环境VC 语言三、问题描述房子里有一只猴子(即机器人),位于a 处。在c 处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的 b 处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图 1 所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过 VC 语言编程实现猴子摘香蕉问题的求解
3、过程。图 1猴子摘香蕉问题四、源代码#includeunsignedint i;void Monkey_Go_Box(unsignedcharx,unsignedchary)-可修编.-.置void Monkey_Move_Box(charx,chary)printf(Step%d:monkey把箱子从%c运到%cn,+i,x,y);/x表示箱子的位置,y为香printf(Step%d:monkey从%c走到%cn,+i,x,y);/x表示猴子的位置,y为箱子的位蕉的位置void Monkey_On_Box()printf(Step%d:monkey爬上箱子n,+i);void Monkey_
4、Get_Banana()printf(Step%d:monkey摘到香蕉n,+i);void main()unsignedcharMonkey,Box,Banana;printf(*智能1501班*n);printf(*06153034*n);printf(*X少鹏*n);printf(请用a b c来表示猴子箱子香蕉的位置n);printf(Monkeytboxtbananan);scanf(%c,&Monkey);getchar();printf(t);scanf(%c,&Box);getchar();printf(tt);scanf(%c,&Banana);getchar();print
5、f(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();五、实验结果相关截图六、心得体会通过本次实验,我初步了学会了使用VC 的新建工程,并且进行简单的程序编写。此外我还学会如何使用一些谓词来解决生活中的一些简单问题,并且用 VC 编程给出具体的操作步骤,感觉对 VC 编程有了新的认识。在实验中我也遇到过许多问题,比如在我写完代码进行
6、编译时总是会出现一个错误“fatal error C1010:在查找预编译头时遇到意外的文件结尾,是否忘记了向源中添加“#include stdafx.h”关于这个错误我我问了几个同学得不出答案后,我决定通过上网查找,最终找到了解决方法,需要在该项目的每一个 cpp 结尾的文件属性中设置不使用预编译头即可。在这个过程中也锻炼了自己解决问题的能力。-可修编.-.人工智能课内实验报告实验 2:编程实现简单动物识别系统的知识表示学院:自动化学院班级:智能 1501姓名:X 少鹏(33)学号:06153034日期:2017-3-1310:15-12:00-编.-可修-.实验实验 2 2:编程实现简单动
7、物识别系统的知识表示:编程实现简单动物识别系统的知识表示一、实验目的1、理解和掌握产生式知识表示方法;2、能够通过 VC 编程语言实现产生式系统的规则库。二、实验内容1、以动物识别系统的产生式规则为例;2、用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作。三、实验步骤1、确定需要识别的动物及其属性本次实验的简单动物识别系统总共能识别7 种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟和信天翁。2、建立识别七种动物识别系统的规则3、选定编程语言并确定综合数据库和规则库结构(1)选用 C 语言作为编程语言(2)综合数据库的建立(3)规则库的建立四、程序源代码#inclu
8、de#includeusingnamespace std;structRULESint count;char pre255;char back255;int mark;void check();RULES r100=1,有毛发,哺乳动物,0,1,有奶,哺乳动物,0,1,有羽毛,鸟,0,2,会飞&下蛋&,鸟,0,/所有规则静态数据库-可修编.-.1,吃肉,食肉动物,0,3,有锋利的牙齿&有爪&眼睛盯着前方&,食肉动物,0,2,哺乳动物&有蹄&,有蹄类哺乳动物,0,2,哺乳动物&反刍&,有偶蹄类哺乳动物,0,4,哺乳动物&食肉动物&黄褐色&有暗斑&,金钱豹,0,4,哺乳动物&食肉动物&黄褐色&黑色
9、条纹&,老虎,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 f255;/输入的事实数组void input()while(1)cat+;cout number rcat.count;cout 输入事实,两种以上的事实请在每个事实后加上&符号 rcat.pre;cout 输
10、入结果 rcat.back;rcat.mark=0;while(1)cout 输入“1”继续添加规则,输入“2”查看规则库 p;if(p=1)input();else-编.-可修-.if (p=2)elsecheck();cout 输入错误,重新输入 endl;void delate()cout 输入要删除的条数 bar;for (int t=0;t=cat;t+)rbar-1=rbar;bar+;cat-;check();void check()cout endl 规则库如下 endl;for (int i=0;i=cat;i+)cout i+1 .由 ri.pre 可得 ri.back e
11、ndl;cout endl;while(1)cout 输入“1”继续添加规则,输入“3”删除选定的规则 m;if (m=1)input();else-编.-可修-.if(m=3)delate();int find_rule(ints)/查找规则库中是否还有可使用的规则for(int i=0;i=15;i+)s=s*ri.mark;/coutfind_rule结果sendl;returns;int pare1(RULESr)/当前提条件为1时int j=0,i=1;string str,str2;str=r.pre;while(i=length)if(fi=str)str2=r.back;fle
12、ngth+1=str2;/加入事实库length+;/事实库的长度加1r.mark=1;/标记规则已使用过break;elsei+;returnr.mark;int pare2(RULESr)/前提条件不为1string b10;string str,str2;int i,j=1,num=0;int a=0;str=r.pre;for(i=0;i!=10;+i)/转换数组bi=;-编.-可修-.for(i=0;i!=str.length();+i)if(str.at(i)!=&)bj+=str.at(i);elsej+;i=1;while(i=r.count)for(j=1;j!=length
13、+1;j+)if(fj=bi)a+=1;i+;if(a=r.count)str2=r.back;flength+1=str2;/加入事实库length+;/事实库的长度加1r.mark=1;/标记规则已使用过returnr.mark;void result()int i=1,m=0;while(i!=length+1)if(fi=金钱豹)cout 该动物是金钱豹 endl;m=1;break;-编.-可修-.elseif(fi=老虎)elseif(fi=长颈鹿)cout 该动物是老虎 endl;m=1;break;m=1;break;elseif(fi=斑马)break;elseif(fi=鸵
14、鸟)break;elseif(fi=企鹅)break;elseif(fi=信天翁)break;else-编.cout 该动物是长颈鹿 endl;cout 该动物是斑马 endl;m=1;cout 该动物是鸵鸟 endl;m=1;cout 该动物是企鹅 endl;m=1;cout 信天翁 endl;m=1;-可修-.i+;if(m=0)cout 没有符合的动物,请确认特征,重新输入 endl;void idetify()int i=0,u=0;if(find_rule(u)=0)/如果规则库中还有未使用的规则/cout还有未使用的规则endl;int num=length;while(i16)/
15、从第一条规则开始遍历if(ri.mark=0)/如果该条规则未使用if(ri.count=1)/该条规则前提数为1u=pare1(ri);if(u=1)ri.mark=1;if(ri.mark=1)cout 使用规则 i+1;cout 且加入的新事实为 ri.back endl;elseu=pare2(ri);if(u=1)ri.mark=1;if(ri.mark=1)cout 使用规则 i+1;cout 且加入的新事实为 ri.back endl;if(i=15)if(num!=length)-编.-可修-.i=0;num=length;elsei=16;elsei+;elsecout 所有
16、的规则都已使用 endl;result();/*主函数*/void main()cout*智能1501班*endl;cout*06153034*endl;cout*X少鹏*endl;cout 进行动物识别请输入7 endl;cout 进行规则库操作请输入8 a;while(a=8)while(1)cout 添加规则输入1,查看已有规则输入2 m;if(m=1)input();elseif(m=2)check();-编.-可修-.elsecout 输入错误请重新输入 endl;if(a=7)int u=0;cout 请输入动物的特征数 length;cout 请输入动物的特征 endl;for(
17、int i=1;i fi;idetify();system(pause);五、实验结果相关截图1、程序总体结构2、规则库操作查看规则库-编.-可修-.3、规则库操作添加规则添加袋鼠规则-可修编.-.4、规则库操作删除规则删除袋鼠规则5、动物识别识别长颈鹿-可修编.-.六、心得体会通过本次实验我深刻的理解和掌握产生式知识表示方法,并且能够通过VC 编程语言实现产生式系统的规则库。本次实验我同样遇到许多问题,我通过自己查阅资料,与同学们讨论,逐步的将自己的问题解决,在这个过程中提高了我的问题解决能力。最后因为本次实验只有对数据库有清楚的掌握,同时熟悉规则才能合理编程,因此我在平时的学习中应当加大数
18、据库与数据结构的学习力度,提高自己的编程能力。-编.-可修-.人工智能课内实验报告实验 3:盲目搜索求解八数码问题学院:自动化学院班级:智能 1501姓名:X 少鹏(33)学号:06153034日期:2017-03-30 10:15-12:00-编.-可修-.人工智能课内实验人工智能课内实验 3:3:盲目搜索求解盲目搜索求解 8 8 数码问题数码问题1、实验目的(1)熟悉人工智能系统中的问题求解过程;(2)熟悉状态空间中的盲目搜索策略;(3)掌握盲目搜索算法,重点是宽度优先搜索和深度优先搜索算法。2、实验要求用 VC 语言编程,采用宽度优先搜索和深度优先搜索方法,求解 8 数码问题3、实验内容
19、(1)采用宽度优先算法,运行程序,要求输入初始状态假设给定如下初始状态 S0283164705和目标状态 Sg216-可修编.-.408753验证程序的输出结果,写出心得体会。(2)对代码进行修改(选作选作),实现深度优先搜索求解该问题提示:提示:每次选扩展节点时,从数组的最后一个生成的节点开始找,找一个没有被扩展的节点。这样也需要对节点添加一个是否被扩展过的标志。4 源代码及实验结果截图(1)实验源代码#include#include Typedef struct Node int num9;/棋盘状态int deepth;/派生的深度 g(n)int diffnum;/不在位的数目 h(n
20、)int value;/耗散值 f(n)=g(n)+h(n)struct Node*pre;struct Node*next;struct Node*parent;numNode;/*-end of struct numNode-可修编.-.*/int origin9;/棋盘初始状态int target9;/棋盘目标状态int numNode_num,total_step;numNode*open,*close;/Open 表和 Close 表numNode*create_numNode()return(numNode*)malloc(sizeof(numNode);numNode*open_
21、getfirst(numNode*head);/返回第一项,并从Open 表中删除void open_insert(numNode*head,numNode*item);/向 Open表中按序插入新节点void close_append(numNode*head,numNode*item);/向Close 表中插入新节点int expand(numNode*item);/扩展节点int print_result(numNode*item);/打印结果numNode*copy_numNode(numNode*orgin);-可修编.-.charisNewNode(numNode*open,num
22、Node*close,intnum9);/是否在 Open 表或 Close 表中void print_num(int num9);/打印棋盘状态int diff(int num9);/求不在位棋子的个数void init();/初始化,获得棋盘初始状态和目标状态void swap(int*a,int*b);int operate(int num,int op);void free_list(numNode*head);/*Name:主函數/*Description:程序入口int main(int argc,char*argv)/初始化 Open 表和 Close 表printf(*智能 1
23、501*n);printf(*X 少鹏*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;int i=0;for(i=0;inumi=origini;open_insert(open,p1);numNode_num=1;p1=open_
24、getfirst(open);while(p1!=NULL)-编.-可修-.close_append(close,p1);if(expand(p1)return EXIT_SUCCESS;p1=open_getfirst(open);printf(No solution!n);return EXIT_SUCCESS;/*-end of function main-*/void init()while(1)printf(Please input opriginal status:nFor example:123456780stands forn编.123n456n780n);char temp1
25、0;-可修-.scanf(%s,&temp);int i=0;for(i=0;i=0&tempi-0=8;i+)printf(Please input target status:n);scanf(%s,&temp);int j=0;for(j=0;j=0&tempj-0 next;q=head;while(p!=NULL&item-value p-value)q=p;p=p-next;q-next=item;item-pre=q;item-next=p;if(p!=NULL)-编.-可修-.p-pre=item;/*-end of function open_insert-*/numNode
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 实验 报告 大全
限制150内