人工智能实验二图搜索
人工智能实验搜索策略
实验一搜索策略一、实验内容1.熟悉和掌握启发式搜索的定义、估价函数和算法过程,比较不同算法的性能。
2.以八数码问题或路径规划等问题为例设计启发式搜索算法,改变启发函数,观察结果的变化,分析原因。
二、实验目的熟悉和掌握各种启发式搜索策略的思想,掌握A*算法的定义、估价函数和算法过程,理解求解流程和搜索顺序。
三、实验内容1、分别以各种搜索算法为例演示搜索过程,比较不同算法的性能;2、分析各种算法中的OPEN表CLOSE表的生成过程;3、分析估价函数对搜索算法的影响;4、以八数码问题或路径规划等问题为例设计启发式搜索算法,改变启发函数,观察结果的变化,分析原因。
四、实验记录搜索策略实验报告表一启发式搜索A*算法框图路径规划问题中的启发函数在之前的作业中我们就已经写过A*算法的程序代码。
在八数码路径规划问题中,利用A*算法去找出一条最短路,最要关注的就是估价函数,在本实验中,估价函数为路径代价g 和启发函数h之和。
进而我们需要关注启发函数。
在原启发函数的定义用该点到目标点的曼哈顿距离估计从该点到目标节点的代价。
源节点目标节点7 2 4 0 1 25 06 3 4 58 3 1 6 7 8源程序如下:def setH(self, endNode):for x in range(0, 3):for y in range(0, 3):for m in range(0, 3):for n in range(0, 3):if self.array2d[x][y] == endNode.array2d[m][n]:self.h += abs(x-m)+abs(y-n)上图中的多层循环意在取值该节点到目标节点的曼哈顿距离。
而在曼哈顿距离下的花销如下:一共需要26步完成。
并且程序执行速度也比较快。
欧式距离作为启发式def setH(self, endNode):for x in range(0, 3):for y in range(0, 3):for m in range(0, 3):for n in range(0, 3):if self.array2d[x][y] == endNode.array2d[m][n]:#self.h += abs(x-m)+abs(y-n)self.h += (abs(x-m)*abs(x-m) + abs(y-n)*abs(y-n)) ** 0.5用欧式距离代替曼哈顿距离发现同样是26步,可以知道26步是该情况解的最优解。
人工智能实验报告,包括八数码问题八皇后问题和tsp问题
八数码问题(一)问题描述在一个3*3的方棋盘上放置着1,2,3,4,5,6,7,8八个数码,每个数码占一格,且有一个空格。
这些数码可以在棋盘上移动,其移动规则是:与空格相邻的数码方格可以移入空格。
现在的问题是:对于指定的初始棋局和目标棋局,给出数码的移动序列。
该问题称八数码难题或者重排九宫问题。
(二)问题分析八数码问题是个典型的状态图搜索问题。
搜索方式有两种基本的方式,即树式搜索和线式搜索。
搜索策略大体有盲目搜索和启发式搜索两大类。
盲目搜索就是无“向导”的搜索,启发式搜索就是有“向导”的搜索。
1、启发式搜索由于时间和空间资源的限制,穷举法只能解决一些状态空间很小的简单问题,而对于那些大状态空间的问题,穷举法就不能胜任,往往会导致“组合爆炸”。
所以引入启发式搜索策略。
启发式搜索就是利用启发性信息进行制导的搜索。
它有利于快速找到问题的解。
由八数码问题的部分状态图可以看出,从初始节点开始,在通向目标节点的路径上,各节点的数码格局同目标节点相比较,其数码不同的位置个数在逐渐减少,最后为零。
所以,这个数码不同的位置个数便是标志一个节点到目标节点距离远近的一个启发性信息,利用这个信息就可以指导搜索。
即可以利用启发信息来扩展节点的选择,减少搜索范围,提高搜索速度。
启发函数设定。
对于八数码问题,可以利用棋局差距作为一个度量。
搜索过程中,差距会逐渐减少,最终为零,为零即搜索完成,得到目标棋局。
(三)数据结构与算法设计该搜索为一个搜索树。
为了简化问题,搜索树节点设计如下:struct Chess//棋盘{int cell[N][N];//数码数组int Value;//评估值Direction BelockDirec;//所屏蔽方向struct Chess * Parent;//父节点};int cell[N][N]; 数码数组:记录棋局数码摆放状态。
int Value; 评估值:记录与目标棋局差距的度量值。
Direction BelockDirec; 所屏蔽方向:一个屏蔽方向,防止回推。
人工智能九宫格重移——搜索的实验报告
人工智能九宫格重移——搜索1.问题描述:八数码问题也称为九宫问题。
在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。
棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。
要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。
所谓问题的一个状态就是棋子在棋盘上的一种摆法。
棋子移动后,状态就会发生改变。
解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。
2.九宫重移有无答案检查(逆序数)我们把每个9宫格横向展开,如第一个123456789,我们把左边数大于右边数的组数称为这个九宫格的逆序数,显然123456789的逆序数为0;考虑横向平移,那么逆序数的增量为2或0或-2;纵向平移,逆序数的增量为4或0或-4;但147258369的逆序数为奇数。
所以147258369是无解的情况。
由此也可以类推当将9宫格展开后,如果数据序列的逆序数为奇数,则此数据序列对应的九宫格是无解的。
3.BFS算法队列: Queue open = new Queue();存放待扩展的节点List: List<Bfstr> closed = new List<Bfstr>();存放已被扩展过的节点ArrayList map = new ArrayList();//存放答案HashTale: Hashtable table = new Hashtable();构造哈希表以方便查找3.1.BFS算法介绍广度优先搜索算法BFS基本思想:从图中某顶点v出发,逐层对节点进行拓展,并考察是否为目标节点,在第n层节点没有全部扩展并考察前,不对第n+1层节点进行扩展。
对九宫重排问题,即构造广度优先搜索树,从初始状态,利用广度优先搜索算法逐步找到目标状态的节点。
3.2.状态空间表示状态空间用一维数组表示,每个节点存放在Bfstr结构体中的字符now中,从第一行开始从左往右给九宫格标号0……8,字符串now元素下标代表格子位置,而now数组中对应数组的值代表九宫格中存放的数码,用数值9代表空格。
人工智能《启发式搜索》实验大作业
《人工智能》实验大作业实验题目:启发式搜索一、实验目的:熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A算法求解九宫问题,理解求解流程和搜索顺序。
二、实验方法:1.先熟悉启发式搜索算法;2.用C、C++或JA V A 语言编程实现实验内容。
三、实验背景知识:1.估价函数在对问题的状态空间进行搜索时,为提高搜索效率需要和被解问题的解有关的大量控制性知识作为搜索的辅助性策略。
这些控制信息反映在估价函数中。
估价函数的任务就是估计待搜索节点的重要程度,给这些节点排定次序。
估价函数可以是任意一种函数,如有的定义它是节点x处于最佳路径的概率上,或是x节点和目标节点之间的距离等等。
在此,我们把估价函数f(n)定义为从初始节点经过n节点到达目标节点的最小代价路径的代价估计值,它的一般形式是:f(n) = g(n) + h(n)其中g(n)是从初始节点到节点n的实际代价,g(n)可以根据生成的搜索树实际计算出来;h(n)是从n到目标节点的最佳路径的代价估计,h(n)主要体现了搜索的启发信息。
2. 启发式搜索过程的特性(1)可采纳性当一个搜索算法在最短路径存在的时候能保证能找到它,我们就称该算法是可采纳的。
所有A*算法都是可采纳的。
(2)单调性一个启发函数h是单调的,如果a)对所有的状态n i和n j,其中n j是n i的子孙,h(n i )- h(n j )≤cost(n i,n j ),其中cost(n i,n j )是从n i到n j 实际代价。
b)目标状态的启发函数值为0,即h(Goal)=0.具有单调性的启发式搜索算法在对状态进行扩展时能保证所有被扩展的状态的f值是单调递增(不减)。
(3)信息性比较两个启发策略h1和h2,如果对搜索空间中的任何一个状态n都有h1(n) ≤h2(n),就说h2比h1具有更多的信息性。
一般而言,若搜索策略h2比h1有更多的信息性,则h2比h1考察的状态要少。
但必须注意的是更多信息性需要更多的计算时间,从而有可能抵消减少搜索空间所带来的益处。
产生式实验报告
产生式实验报告一、引言产生式(Production)是一种用于表示语法规则的形式化工具,它在人工智能领域具有广泛的应用。
本实验报告旨在介绍产生式的基本概念、产生式的应用领域以及在实验中如何使用产生式来实现推理和搜索。
二、产生式的基本概念1. 产生式的定义产生式是一种形式化的表示语法规则的工具。
它由一个左部(Left-hand side)和一个右部(Right-hand side)组成,左部表示一个非终结符号,右部则表示一串终结符号和非终结符号的序列。
2. 产生式的形式产生式的形式通常为:左部 -> 右部,其中右部由终结符和非终结符组成,可以为空。
3. 产生式的应用产生式在人工智能领域有广泛的应用,例如在自然语言处理中,可以使用产生式来表示句子的语法结构;在专家系统中,可以使用产生式来表示知识库中的规则;在编译原理中,可以使用产生式来描述语言的语法规则等。
三、产生式的应用领域1. 自然语言处理在自然语言处理中,产生式被广泛应用于句子的语法分析、语义分析以及机器翻译等任务。
通过定义一系列产生式规则,可以构建一个语法分析器,用于自动识别和分析句子的结构和意义。
2. 专家系统专家系统是一种基于知识库的智能系统,其中的知识被表示为一组产生式规则。
通过使用产生式来表示知识和推理规则,专家系统可以根据用户提供的问题和条件进行推理和决策,给出相应的解答和建议。
3. 编译原理编译原理是计算机科学中的一个重要领域,其中的产生式被广泛应用于编译器的前端处理,用于描述语言的语法规则和语义规则。
通过使用产生式和对应的语法分析算法,可以将源代码转化为中间代码或目标代码。
四、产生式在实验中的应用在实验中,我们可以使用产生式来实现推理和搜索。
以人工智能领域的经典问题“图搜索”为例,我们可以使用产生式规则来描述搜索的过程。
1. 初始状态假设我们需要解决一个迷宫问题,迷宫可以表示为一个二维矩阵,其中的元素可以是墙壁、路径或终点。
实验二 A星算法实验
人工智能基础(第2版)
实验二A*算法实验
1.提交期限和方法
2.实验目的
熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N 数码难题,理解求解流程和搜索顺序。
3.实验任务
1)实现类似于如图所示N数码难题演示程序。
2)用你所熟悉的程序语言实现,可以B/S实现,也可以C/S实现。
4、实验内容
1)分别以8数码和15数码为例实际求解A*算法。
2)画出A*算法求解框图。
3)分析估价函数对搜索算法的影响。
4 )分析A*算法的特点。
5、提交要求
1、本次实验为个人任务,需独立完成,以纸质和电子档的形式把实验报告提交给学习委员,再由学习委员在规定期限内提交给任课老师。
2、要求把所做的程序的演示图附加到实验报告上,代码不需要添加到实验报告上。
3、撰写实验报告
实验报告具体内容如下:
实验题目、实验目的、实验原理、实验条件、实验内容、实验步骤、程序代码、个人实验小结。
4、未按时提交实验报告者,每迟交一天扣1分,扣完为止。
经辅导员同意并签字的事病假时间不计入迟交范围。
凡被发现实验报告有抄袭者,本次成绩以零分记。
人工智能实验指导书+作业展示
《人工智能技术导论》实验指导书西北工业大学计算机学院目录一实验纲要 (1)二上机要求 (2)三实验内容 (3)实验一图搜索与问题求解 (3)实验1.1 启发式搜索 (3)实验1.2 A*算法搜索 (9)实验1.3 其他应用问题 (12)实验二产生式系统推理 (14)实验三TSP问题的遗传算法实现 (20)四实验报告模板 (27)人工智能实验一实验报告 (27)人工智能实验二实验报告 (28)人工智能实验三实验报告 (29)附件1 TSP问题的遗传算法程序模板 (30)附件2 学生作业作品展示 (35)一实验纲要一实验教学的目的、任务与要求将人工智能基础理论应用于实际问题的解决当中,加深学生对所学知识的理解,提高学生的实际动手能力。
二实验项目内容1图搜索策略实验用启发式搜索方法/A*算法求解重排九宫问题/八数码问题。
2产生式系统的推理以动物识别系统为例,实现基于产生式规则的推理系统。
3 TSP问题的遗传算法实现以N个结点的TSP问题为例,用遗传算法加以求解。
三参考教材人工智能技术导论-第3版,廉师友编著,西安电子科技大学出版社,2007。
四使用主要仪器设备说明在Windows2000/XP上,选用Java/C/C++/Matlab等语言进行实现。
五实验考核实验为12学时,分4次课完成。
每个实验题目在课堂上分别按百分制给出。
其中包括课堂纪律、程序运行结果、课堂回答问题及实验报告成绩等。
实验课总成绩为3个实验题目的平均成绩。
实验课要求学生提前预习,上课时需向辅导老师提交预习报告,报告格式和内容不作过多要求,只需简要说明自己本次实验的大体思想。
预习报告形式不限,电子版或手写版均可。
1 考核方法由各班辅导老师当堂检查源程序和运行结果,并提问相关问题,课堂上给出成绩并记录。
每个题目完成后把源代码和实验报告提交,由辅导老师检查实验报告并给出报告成绩。
2 评分标准每个实验题目根据以下标准进行考核:1)考勤分20分。
人工智能实验二-图搜索技术
实验二图搜索技术一、实验目的1.加深学生对图搜索技术的理解。
2.掌握图搜索基本编程方法。
3.能初步运用图搜索技术解决一些实际应用问题。
二、预习要求1.复习广度优先搜索算法。
2.复习深度优先搜索算法。
3.设计初步的搜索算法。
三、实验内容1.(必做)利用深度优先和广度优先搜索技术解决传道士和野人问题。
修道士和野人问题如下:有三个传教士和三个野人一起来到河边准备渡河,河边有一条空船,且传教士和野人都会划船,但每次最多可供两人乘渡。
河的任何一岸以及船上一旦出现野人人数超过传教士人数,野人就会把传教士吃掉。
为完全地渡河,传教士应如何规划渡河方案?2.(选做)若传教士和野人的数目均为五人,渡船至多可乘三人,请定义一个启发函数,并给出相应的搜索树。
四、实验要求:1.程序运行时,应能在屏幕上显示结果。
2. 界面直观、友好。
3.交实验报告。
五、实验结果:实验截图:实验代码:// yeren.cpp : Defines the entry point for the console application.//#include"stdafx.h"#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct{int xds; //xiudaoshiint yr; //yerenint cw; //chuanwei}DataType;DataType fa[50000];typedef struct node{DataType data;struct node *son;struct node *bro;struct node *par;struct node *next;}Ltable;void Ltableinit(Ltable**head) //初始化邻接表的操作{*head=(Ltable *)malloc(sizeof (Ltable)); //动态分配空间(*head)->son=NULL;(*head)->bro=NULL;(*head)->par=NULL;(*head)->next=NULL;}void insertson(Ltable *head, DataType x) //在邻接表中插入儿子结点的操作{Ltable *q,*s;q=(Ltable *)malloc(sizeof (Ltable)); q->data=x;head->son=q;s=head;while (s->next!=NULL)s=s->next; q->par=head;q->son=NULL;q->bro=NULL;s->next=q;q->next=NULL;}void insertbro(Ltable *head,DataType x) //在邻接表中插入兄弟结点的操作,所有的兄弟结点都指向他们右边的结点;{Ltable *q,*s;q=(Ltable *)malloc(sizeof (Ltable));s=head->son;q->data=x;while (s->bro!=NULL)s=s->bro;s->bro=q;s->next=q;q->next=NULL;q->bro=NULL;q->par=head;q->son=NULL;}int findfa(DataType x,int n) //生成在船上修道士仍安全的几种情况;{int i=0,a,b,t=0;if(x.cw){a=0;b=n-a;while (a+b>=1){t++;while (b>=0){fa[i].xds=a;fa[i].yr=b;i++;a++;b--;}a=0;b=n-a-t;}}else{a=1;b=0;t=0;while (a+b<=n){t++;while (a>=0){fa[i].xds=a*(-1);fa[i].yr=b*(-1);i++;a--;b++;}a=fa[0].xds*(-1)+t;b=0;}return i;}int jiancha(DataType x,int n) //安全性检测,检查当前情况下,修道士是否安全{if((x.xds>=x.yr||x.xds==0)&&((n-x.xds)>=(n-x.yr)||x.xds==n)&&x.xds>=0&&x.xds<=n&&x.y r>=0&&x.yr<=n)return 1;elsereturn 0;}void print(Ltable *q,Ltable *p) //输出安全渡河的过程{DataType a[100];int i=1;a[0].cw=0;a[0].xds=0;a[0].yr=0;while (q!=p){a[i++]=q->data;q=q->par;}while ((--i)>-1){ printf("( %d %d %d )",a[i].xds, a[i].yr,a[i].cw);if(!(a[i].xds==0&&a[i].yr==0&&a[i].cw==0)) {if (a[i].cw==1)printf(" --> ( %d %d ) --> ( %d %d 0 )\n",a[i].xds-a[i-1].xds,a[i].yr-a[i-1] .yr,a[i-1].xds,a[i-1].yr);elseprintf(" <-- ( %d %d ) <-- ( %d %d1 )\n",(a[i].xds-a[i-1].xds)*(-1),(-1)*(a[i].yr-a[i-1].yr),a[i-1].xds,a[i-1].yr);}else printf("\n");}printf("渡河成功!\n");void work(Ltable *p,int n,int c)//渡河过程{Ltable *q,*t;DataType tem;int i,flag,flag1,g=0,j,count=0;q=p->son;while (q!=NULL){flag=0;j=findfa(q->data,c);for (i=0;i<j;i++){tem.xds=q->data.xds-fa[i].xds; tem.yr=q->data.yr-fa[i].yr;tem.cw=1-q->data.cw;t=q;if (jiancha (tem,n)){flag1=1;while (t!=p){if(tem.xds==t->data.xds&&tem.yr==t->data.yr&&tem.cw==t->data.cw){flag1=0;break; }t=t->par;}if(flag1==1){if (flag==0){insertson(q, tem);flag=1;}elseinsertbro(q,tem);if(tem.xds==0&&tem.yr==0&&tem.cw==0){ print(q,p);count++;}}}}q=q->next;}if (count==0)printf("无法渡河成功。
人工智能搜索实验报告
人工智能搜索实验报告人工智能搜索实验报告引言近年来,人工智能(Artificial Intelligence,简称AI)在各个领域都取得了巨大的进展。
其中,人工智能搜索技术的发展尤为引人注目。
本实验旨在通过对不同搜索引擎的比较和分析,探讨人工智能搜索的发展趋势和应用前景。
一、搜索引擎的发展历程搜索引擎作为人们获取信息的主要工具之一,经历了多年的发展和演变。
最早的搜索引擎是基于关键词匹配的,用户通过输入关键词来获取相关的网页信息。
然而,这种搜索方式存在信息匹配不准确、结果排名不合理等问题。
随着人工智能的发展,搜索引擎逐渐引入了机器学习和自然语言处理等技术,使得搜索结果更加精准和个性化。
二、人工智能搜索的技术原理人工智能搜索的核心技术包括自然语言处理、机器学习和深度学习等。
自然语言处理技术可以将用户输入的自然语言转化为机器可以理解的形式,从而更好地理解用户的搜索意图。
机器学习技术通过对大量的数据进行学习和训练,提高搜索引擎的预测和推荐能力。
深度学习技术则更加注重对数据的特征提取和模式识别,进一步提升搜索引擎的准确性和效率。
三、不同搜索引擎的比较与分析1. 谷歌搜索作为全球最大的搜索引擎,谷歌搜索凭借其强大的人工智能技术和庞大的数据资源,能够提供准确、全面的搜索结果。
谷歌搜索不仅可以根据用户的搜索历史和地理位置等信息,推荐个性化的搜索结果,还能通过自然语言处理技术,理解用户的搜索意图,提供更加精准的答案。
2. 百度搜索作为中国最大的搜索引擎,百度搜索在人工智能搜索方面也取得了显著的进展。
百度搜索通过深度学习技术,对用户的搜索行为和偏好进行分析,提供个性化的搜索结果。
此外,百度搜索还引入了知识图谱和自然语言处理等技术,使搜索结果更加丰富和准确。
3. 必应搜索必应搜索是微软推出的搜索引擎,它与谷歌搜索和百度搜索相比,在搜索结果的准确性和个性化方面存在一定差距。
然而,必应搜索在美观度和用户体验方面表现出色,其界面设计简洁、易用,给用户带来良好的搜索体验。
人工智能与机器人实验2 碰撞检测
(一)实验目的1、了解学习碰撞传感器的使用;2、熟悉机器人套件的搭建;3、掌握创意之星控制器AD口相关函数、LED及LCD 的使用。
(三)实验环境使用舵机(舵机ID为0x01)及L2-5连接件碰撞传感器,当传感器收到碰撞时LED亮,其中LED 接在控制器输出口0,传感器接在AD0口,舵机工作在电机模式,L2-5在转动过程中碰到传感器,立即反向转动,转1s后继续回转。
(四)实验步骤(二)实验要求1、说明及流程;2、编程和下载;3、实验现象;4、实验总结、作业。
1、零件清单详见搭建手册—执行器_LED 红绿灯—零件清单。
2、搭建步骤详见搭建手册—执行器_LED 红绿灯—搭建步骤。
1、说明及流程(1)说明碰撞传感器的输出为开关量,传感器在未受碰撞时输出高电平(4.3V左右),受到碰撞时输出低电平(0V),可通过控制器上的AD 口检测碰撞传感器的信号。
ANA0~ANA15即为控制器上的16个AD 输入口,经过2/3的分压接到了控制器芯片的ADC0~ADC15。
当传感器信号为高电平时AD 值为(((4.3*2)/3)*4096)/3.3=3558。
此例中使用舵机(舵机ID为0x01)及L2-5 连接件碰撞传感器,当传感器收到碰撞时LED 亮,其中LED 接在控制器输出口0,传感器接在AD0 口,舵机工作在电机模式,L2-5 在转动过程中碰到传感器,立即反向转动,转1s后继续回转。
与AD 口相关的函数有:u16 UP_ADC_GetValue(u8 Channel)//此函数为读取对应AD口的电压值,Channel 为AD 口的通道号0~15。
u8 UP_ADC_GetIO(u8 Channel)//此函数为将AD口的输入转换为开关量,当AD口采样值大于500时函数返回1,小于等于500 时输出0。
碰撞传感器接在控制器的AD0 口,LED 灯接在GPIO0,舵机工作在电机模式,ID 固定为0x01。
2、编程和下载(1)Keil 方式示例程序详见实验指导书2.2.6。
人工智能实验指导书-1
人工智能导论实验指导一、实验整体要求(包括进度、实验预习和报告要求、结果形式、考核等)共分两个实验,12学时内完成,每次3学时,共4次上机。
每个实验相当于一个大作业,锻炼学生运用知识解决实际问题的能力,对所学知识有更深刻的理解。
要求提交源代码,运行结果和相关文档(包括核心算法)。
由实验老师逐一检查考核,占考试成绩的20%。
二、(有关说明:软/硬环境、实验基本方法、调试和测试工具的使用等)在Windows2000/XP环境下,语言可以采用C/C++/JAVA/Matlab等。
实验室提供相关软件可由学生根据需要安装。
三、实验内容实验_图搜索策略1.实验目的(说明本次实验应对那些知识达到何种认知程度,如了解/掌握)(1)加深对各种图搜索策略概念的理解;(2)进一步了解启发式搜索;(3)比较并分析各种图搜索策略的异同°2.实验预习内容(1)了解重排九宫问题、一字棋游戏、八皇后问题;(2)各种图搜索算法及剪枝技术等。
3.实验内容和步骤结合第二章内容,以一字棋游戏,八皇后问题,重排九宫问题等为例,分组编程演示其搜索策略.题目:b 以重排九宫问题为例演示各种搜索策略的搜索过程,要求程序具有一定的普适性,重点是要把算法描述清楚。
6学时2,对博弈感兴趣的同学可选做一字棋游戏的实现。
4.实验总结及思考总结出各种搜索策略的特点和区别。
实验二产生式系统的推理1.实验目的(说明本次实验应对那些知识达到何种认知程度,如了解、掌握等)理解并掌握基于规则系统的表示与推理。
2.实验预习内容第五章产生式系统3.实验内容和步骤1.内容:结合第五章内容,以动物识别系统(或货物袋装系统)为例,实现基于规则的系统构造实验.6学时。
2.要求:1)根据输入的规则,正确地识别所能识别的动物。
2)能完成正向和/或反向推理我们假设计算机的视觉系统可以识别毛发、羽毛、奶、犬齿、爪、蹄、颜色等等基本的事实。
一个动物识别专家系统的产生式如下:R1:若某动物有奶,则它是哺乳动物。
山东大学人工智能实验二实验报告
Queue_Node *point; }Seal;
class A_Star { public: //构造函数 A_Star() { input(); } ~A_Star() { for (int i = 1; i <= _len; ++i) { for (int j = 1; j <= _wid; ++j) { if (_seal[i][j].point != NULL) { delete _seal[i][j].point; } } } for (int i = 0; i <= _len; ++i) { delete[]_seal[i]; delete[]_maze[i]; } delete[]_seal; delete[]_maze; } void input() { cout << "输入: 迷宫左边长,上边宽! 例如:30 20" << endl; cin >> _len >> _wid; _seal = new Seal*[_len + 1]; _maze = new unsigned char*[_len <= _len; ++i) { _seal[i] = new Seal[_wid + 1]; _maze[i] = new unsigned char[_wid + 1];
人工智能实验指导书
人工智能及应用实验指导书前言《人工智能及应用》课程实验的目的是为了配合课堂教学,进一步强化对人工制能的不同实现途径的理解。
实验的任务是要结合相关的人工智能语言平台(PROLOG语言),熟练掌握和深入理解课堂教学内容。
帮助学生更好地学习本课程,理解和掌握人工智能算法设计与实现所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计等各环节的训练,使学生深刻理解、牢固掌握所用到的一些原理与技术。
实验中的内容和教科书的内容是密切相关的,在反复实践的过程中才能掌握。
使学生在掌握抽象人工智能理论的基础之上学到更多可操作性很强的智能算法技术及实践经验。
目录实验一 Prolog语言及逻辑程序设计 (1)实验二搜索策略实验 (3)实验三专家系统实验 (6)实验一 Prolog语言及逻辑程序设计一、实验目的加深学生对逻辑程序运行机理的理解,使学生掌握PROLOG语言的特点、熟悉其编程环境,同时为后面的人工智能程序设计做好准备。
1、熟悉PROLOG语言编程环境的使用;2、了解PROLOG语言中常量、变量的表示方法;3、了解利用PROLOG进行事实库、规则库的编写方法。
二、实验环境计算机,Visual PROLOG教学软件。
三、预习要求实验前应阅读实验指导书,了解实验目的、预习PROLOG语言的相关知识。
四、实验内容1、学习使用Visual PROLOG,包括进入PROLOG主程序、编辑源程序、修改环境目录、退出等基本操作。
2、在Visual prolog集成环境下调试运行简单的Visual PROLOG程序。
3、编写一个描述亲属关系的PROLOG程序,然后再给出一些事实数据,建立一个小型演绎数据库。
可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他亲属关系。
4、修改教材2.2节例2.9的程序,使其能输出图中所有路径(path)。
五、实验方法和步骤1、启动Windows 操作环境。
人工智能导论实验一 基于图搜索技术的八数码问题求解
广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 2020年10月14日(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)一、实验内容1. 分别用广度优先搜索策略、深度优先搜索策略和启发式搜索算法(至少两种)求解八数码问题;分析估价函数对启发式搜索算法的影响;探究讨论各个搜索算法的特点。
二、实验设备1. 实验设备:计算机;2. 平台:Windows操作系统,Visual C++ 6.0 / Python Anaconda三、实验步骤1. 随机生成一个八数码问题分布,设计一个可解的目标状态(要求棋盘9个位置都不同)2. 分别用广度优先搜索策略、深度优先搜索策略和至少两种启发式搜索算法求解八数码问题3. 分析估价函数对启发式搜索算法的影响4. 探究讨论各个搜索算法的特点四、分析说明(包括核心代码及解释)广度优先搜索:首先创建一个结构体node,来记录节点移动方向和扩展的节点。
struct node{int ab[3][3];//节点int direction;//方向};struct node sh[102], end;int count = 1;然后创建一个init函数来初始化棋盘起始状态和目标状态,使用for语句填写棋盘数字用loction函数确定0节点的位置,通过for语句和if语句判断sh[num].ab[i / 3][i % 3] == 0,即可得到0节点的位置Sign函数用来获取棋盘状态,将当前棋盘数字顺序生成一个数,即可得知棋盘状态。
Mobile函数用来移动0节点,先用loction函数获取0节点的位置,再通过if语句来判断0节点位置和所能移动方向,然后进行移动。
Display函数使用for语句来打印当前棋盘。
Search函数使用display函数来打印从初始状态移动到目标状态的中间状态棋盘,在while(1)语句下利用mobile函数移动0节点,直到目标状态找到或者超过寻找次数。
人工智能实验二 博弈树井字棋 实验报告
人工智能实验二博弈树井字棋实验报告姓名:舒吉克班级:545007学号:1000000000目录一、实验环境 (2)二、实验目的 (2)三、实验内容 (2)四、实验步骤 (2)(1)博弈树搜索算法 (2)(2)估价函数 (2)(3)数据结构 (2)五、实验结果 (2)一、实验环境操作系统:WIN7编译环境:Codeblocks13.12语言:C++二、实验目的用博弈树算法实现井字棋游戏。
三、实验内容用博弈树算法实现井字棋游戏。
井字棋游戏是一种简单的棋类游戏,在3*3的棋盘上,两人轮流下子,谁的棋子先连成3颗一条直线,谁就赢了,可以横着、竖着、斜着。
博弈树算法是用搜索来解决这类问题的算法,井字棋游戏步数较少,很容易用博弈树算法实现AI。
四、实验步骤(1)博弈树搜索算法博弈树搜索算法是搜索算法的一种,用深搜来遍历所有的下子情况,利用一种叫做MIN-MAX的策略,就是对每种棋盘情况有一个估价函数,对A方有利就是正数,对B方有利就是负数。
A方行动时,必然走使棋盘的估价函数最大的那一步,也就是MAX;而B方行动时,必然走使估价函数变得最小,也就是MIN的一步。
博弈树搜索时,会假设双方都足够聪明,每次都先试着走完所有的可能,然后让当前行动人走对自己最有利的那一步。
最后,得到AI当前所需走的这一步到底走哪步,让AI走出这一步。
(2)估价函数估价函数是博弈树算法重要的一部分。
我设计的估价函数,是某一方已经连三了(也就是已经胜利了),就直接返回1000或-1000。
若在某一行、某一列、某一斜线(一共有三行、三列、两条斜线),每有两个A方的棋和一个空格,则估价+50,每有一个A方的棋和两个空格,则估价+10;B方的也类似。
这样,就能把双方的胜负、优劣势情况用估价函数表示出来。
(3)数据结构没有用太复杂的数据结构,用结构体中的3*3数组存储棋盘,用vector来存储某一情况电脑可以走的各种选择,这样电脑能在有多种估价函数相同的选择的时候能随机从中选一个。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人工智能技术基础图搜索问题求解
实验报告
一、实验目的
加强对图搜索技术的理解,初步掌握图搜索基本编程方法,并能运用图搜索技术解决一些应用问题。
二、实验要求
(1)可使用第3章中的状态图搜索通用程序,这时只需编写规则集程序;也可以用PROLOG 语言或其他语言另行编写。
(2)程序运行时,应能在屏幕上显示程序运行结果。
三、实验内容或题目
实验题目:迷宫求解
实验内容:利用状态图搜索方法求解下列迷宫图
入口
出口12345
12345
四、实验步骤与源程序
实验步骤:
(1) 理解题目;
(2) 对状态进行编码;
(3)转换规则集;
(4)编写程序;
(5)调试运行;
源程序:
/*状态图搜索通用程序*/
DOMAINS
state=symbol %例如:state=symbol
DATABASE-mydatabase
open(state,integer) %用动态数据库实现OPEN表
closed(integer,state,integer) %和CLOSED表
res(state)
open1(state,integer)
min(state,integer)
mark(state)
fail_
PREDICATES
solve
road(state,state)
search(state,state)
result
searching
step4(integer,state)
step56(integer,state)
equal(state,state)
repeat
resulting(integer)
rule(state,state)
GOAL
solve.
CLAUSES
solve:- search(s,e),result.
/*例如
solve:-
search(st(0,1,2,3,4,5,6,7,8),st(0,2,8,3,4,5,6,7,1)),result. */
search(Begin,End):- %搜索
retractall(_,mydatabase),
assert(closed(0,Begin,0)),
assert(open(Begin,0)), %步1 将初始节点放入OPEN表
assert(mark(End)),
repeat,
searching,!.
result:- %输出解
not(fail_),
retract(closed(0,_,0)),
closed(M,_,_),
resulting(M),!.
result:- %输出解
not(fail_),
retract(closed(0,_,0)),
closed(M,_,_),
resulting(M),!.
result:- beep,write("sorry don't find a road!").
searching:-
open(State,Pointer), %步2 若OPEN表为空,则失败,退出
retract(open(State,Pointer)), %步3 取出OPEN表中第一个节点,给其
closed(No,_,_),No2=No+1, %编号
asserta(closed(No2,State,Pointer)), %放入CLOSED表
!,step4(No2,State).
searching:-assert(fail_).
%步4 若当前节点为目标节点,则成功
step4(_,State):- mark(End),equal(State,End). %转步2
step4(No,State):- step56(No,State),!,fail.
step56(No,StateX):- %步5 若当前节点不可扩展,转步2
rule(StateX,StateY), %步6 扩展当前节点X得Y
not(open(StateY,_)), %考查Y是否已在OPEN表中
not(closed(_,StateY,_)), %考查Y是否已在CLOSED表中
assertz(open(StateY,No)), %可改变搜索策略
fail.
step56(_,_):-!.
equal(X,X).
repeat.
repeat:-repeat.
resulting(N):- closed(N,X,M),asserta(res(X)),resulting(M).
resulting(_):- res(X),write(X),write("\t"),fail.
resulting(_):- !.
rule(X,Y):-road(X,Y).
road(s,s11).road(s11,s12).road(s12,s11).road(s12,s13).road(s13,s12).road(s13,s14).r oad(s14,s13).road(s11,s21).road(s21,s11).road(s12,s22).
road(s15,s25).road(s25,s15).road(s23,s24).road(s24,s23).road(s24,s25).road(s25,s24) .road(s21,s31).road(s31,s21).road(s23,s33).road(s33,s23).
road(s24,s34).road(s34,s24).road(s25,s35).road(s35,s25).
road(s31,s32).road(s32,s31).road(s32,s33).road(s33,s32).road(s34,s35).
road(s35,s34).road(s31,s41).road(s41,s31).road(s34,s44).road(s44,s34).road(s42,s43) .
road(s43,s42).road(s43,s44).road(s44,s43).road(s44,s45).road(s45,s44).road(s42,s52) .
road(s52,s42).road(s51,s52).road(s52,s51).road(s52,s53).road(s53,s52).road(s53,s54) .road(s54,s53).road(s54,s55).road(s55,s54).road(s55,e) .
%例如:rule(X,Y):-road(X,Y).
五、实验结果
六、实验总结
该实验的例题较为特殊,要实现深度优先和广度优先搜索,在源代码中修改一致,只需将assertz(open(StateY,No))改为asserta(open(StateY,No))。
实验刚开始出现运行错误,road未定义,在PREDICATES中给road加以定义
road(state,state)。
之后运行还有一个报错,经过反复检查,发现最后结尾语句没加句号。
因为急于验收,修改完代码,直接加载,导致犯下一个结尾少加句号的低级错误,耗时耗力,影响进度。
随着今后编程的增多,深深体会到编程时要静心严谨,否则一个小小的疏忽,将增加额外的工作量。
通过第二次上机实验,自己对prolog运行平台的使用更为熟练。
今后课下会多多关注人工智能方面的科研资讯,学习课外的知识,增加自己知识储备,提高自己的专业技能。