当前位置:文档之家› 人工智能实验报告大全

人工智能实验报告大全

人工智能课内实验报告(8次)学院:自动化学院班级:智能1501 姓名:刘少鹏(34)学号: ********目录课内实验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)熟悉谓词逻辑表示法;(2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。

二、编程环境VC语言三、问题描述房子里有一只猴子(即机器人),位于a处。

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

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

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

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

图1 猴子摘香蕉问题四、源代码#include<stdio.h>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("请用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");getchar();}五、实验结果相关截图六、心得体会通过本次实验,我初步了学会了使用VC的新建工程,并且进行简单的程序编写。

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

在实验中我也遇到过许多问题,比如在我写完代码进行编译时总是会出现一个错误“ fatal error C1010: 在查找预编译头时遇到意外的文件结尾,是否忘记了向源中添加“#include ‘stdafx.h’”关于这个错误我我问了几个同学得不出答案后,我决定通过上网查找,最终找到了解决方法,需要在该项目的每一个cpp结尾的文件属性中设置不使用预编译头即可。

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

人工智能课内实验报告实验2:编程实现简单动物识别系统的知识表示学院:自动化学院班级:智能1501姓名:刘少鹏(33)学号: 06153034日期: 2017-3-13 10:15-12:00实验2:编程实现简单动物识别系统的知识表示一、实验目的1、理解和掌握产生式知识表示方法;2、能够通过VC编程语言实现产生式系统的规则库。

二、实验内容1、以动物识别系统的产生式规则为例;2、用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作。

三、实验步骤1、确定需要识别的动物及其属性本次实验的简单动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟和信天翁。

2、建立识别七种动物识别系统的规则3、选定编程语言并确定综合数据库和规则库结构(1)选用C语言作为编程语言(2)综合数据库的建立(3)规则库的建立四、程序源代码#include<iostream>#include<string>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结果"<<s<<endl;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++; //事实库的长度加1r.mark = 1; //标记规则已使用过break;}elsei++;}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++; //事实库的长度加1r.mark = 1; //标记规则已使用过}return r.mark;}void result(){int i = 1, m = 0;while (i != length + 1){if (f[i] =="金钱豹"){cout <<"该动物是金钱豹"<< endl;m = 1;break;}elseif (f[i] =="老虎"){cout <<"该动物是老虎"<< endl;m = 1;break;}elseif (f[i] =="长颈鹿"){cout <<"该动物是长颈鹿"<< endl;m = 1;break;}elseif (f[i] =="斑马"){cout <<"该动物是斑马"<< endl;m = 1;break;}elseif (f[i] =="鸵鸟"){cout <<"该动物是鸵鸟"<< endl;m = 1;break;}elseif (f[i] =="企鹅"){cout <<"该动物是企鹅"<< endl;m = 1;break;}elseif (f[i] =="信天翁"){cout <<"信天翁"<< endl;m = 1;break;}elsei++;}if (m == 0)cout <<"没有符合的动物,请确认特征,重新输入"<< endl;}void idetify(){int i = 0, u = 0;if (find_rule(u) == 0) //如果规则库中还有未使用的规则{//cout<<"还有未使用的规则"<<endl;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;}elsei = 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();}elsecout <<"输入错误请重新输入"<< 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");}五、实验结果相关截图1、程序总体结构2、规则库操作→查看规则库3、规则库操作→添加规则→添加袋鼠规则4、规则库操作→删除规则→删除袋鼠规则5、动物识别→识别长颈鹿六、心得体会通过本次实验我深刻的理解和掌握产生式知识表示方法,并且能够通过VC编程语言实现产生式系统的规则库。

相关主题