人工智能实验_第1页
人工智能实验_第2页
人工智能实验_第3页
人工智能实验_第4页
人工智能实验_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、人工智能导论实验 河南理工大学人工智能实验指导实验内容实验一 状态空间搜索实验实验二 A*算法实验实验三 子句消解实验实验四 化为子句集的九步法实验实验五 梵塔问题实验实验六 BP网络实验温馨提示:上述实验可以采用任何自己熟悉的语言来实现人工智能导论实验 河南理工大学实验一 状态空间搜索实验八数码问题(必修,2学时)一、实验目的及内容实验目的:理解和掌握状态空间搜索的策略实验内容要求:在一个3X3的九宫中有18,这八个数及一个空格,随机的摆放在其中的格子里,现要求实现这个问题:将该九宫格调整为某种有序的形式,调整的原则为每次只能将空格(上、下、左、右)相邻的一个数字平移到空格中,试编程实现这一

2、问题的求解二、实验原理及基本技术路线图(方框原理图或程序流程图) 实验原理:算法分析:实验流程图:三、所用仪器、材料(设备名称、型号、规格等或使用软件) 硬件:软件:四、实验方法、步骤(或:程序代码或操作过程)1.实验步骤2.实验源程序五、实验过程原始记录( 测试数据、图表、计算等)六、实验结果、分析和结论1人工智能导论实验 河南理工大学实验二 A*算法实验(2学时)一、实验目的:熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。二、实验原理:A*算法是一种有序搜索算法,其特点在于对估价函数的定义上。对于一般的有序搜索,总是选择f值最小的节点

3、作为扩展节点。因此,f是根据需要找到一条最小代价路径的观点来估算节点的,所以,可考虑每个节点n的估价函数值为两个分量:从起始节点到节点n的代价以及从节点n到达目标节点的代价。三、实验条件:1 N数码难题演示程序。2 IE6.0以上,可以上Internet。三、实验内容:1 分别以8数码和15数码为例实际求解A*算法。2 画出A*算法求解框图。3 分析估价函数对搜索算法的影响。4 分析A*算法的特点。四、实验步骤:1 开始演示。进入N数码难题演示程序,可选8数码或者15数码,点击“选择数码”按钮确定。第一次启动后,点击两次“缺省”或者“随机”按钮,才会出现图片。22 点击“缺省棋局”,会产生一个

4、固定的初始节点。点击“随机生成”,会产生任意排列的初始节点。3 算法执行。点击“连续执行”则程序自动搜索求解,并演示每一步结果;点击“单步运行”则每次执行一步求解流程。“运行速度”可自由调节。4 观察运行过程和搜索顺序,理解启发式搜索的原理。在下拉框中选择演示“15数码难题”,点击“选择数码”确定选择;运行15数码难题演示实例。5 算法流程的任一时刻的相关状态,以算法流程高亮、open表、close表、节点静态图、当前扩展节点移动图等5种形式在按钮上方同步显示,便于深入学习理解A*算法。 6 根据程序运行过程画出A*算法框图。其它可参考帮助文件。五、实验报告要求:1 A*算法流程图和算法框图。

5、2 试分析估价函数的值对搜索算法速度的影响。根据A*算法分析启发式搜索的特点。3人工智能导论实验 河南理工大学实验三 子句消解实验(2学时)一、实验目的:理解含有变量的子句如何使用消解规则,掌握子句消解的原理和规则,能熟练进行任意两个子句的消解,了解消解推理的某些常用规则。二、实验原理:对子句集进行消解推理,得到相应的结论。为了对含有变量的子句使用消解规则,我们必须找到一个置换,作用于父辈子句使其含有互补文字。消解两个子句时,可能有一个以上的消解式,不过,在任何情况下最多有有限个消解式。三、实验条件1 子句消解推理演示程序。2 IE6.0以上,可以上Internet。四、实验内容:1 运行并观

6、察演示实例。2 输入新的子句,检查消解结果。3 根据消解过程理解消解原理和常用规则。五、实验步骤:1. 默认示例演示。进入演示实例,点击“演示实例1”,然后点击“开始消解”,得到消解结果。2. 分别运行“演示实例2”和“演示实例 3”,观察消解结果,理解常用消解规则的应4用。3. 自定义消解子句。点击“系统重置”按钮,再通过键盘与两个按钮“”与“”输入合法的子句,点击“加入子句集”加入子句集,点击“开始消解”,观察消解结果。4. 重复步骤3,多次输入不同子句进行消解,熟悉消解过程。六、实验结论:1 熟悉消解过程,理解子句消解规则。2 给出自己输入的待消解子句、消解结果和详细过程。5人工智能导论

7、实验 河南理工大学实验四 化为子句集的九步法实验(2学时)一、实验目的:理解和掌握消解原理,熟悉谓词公式化为子句集的九个步骤,理解消解推理规则,能把任意谓词公式转换成子句集。二、实验原理消解是可用于一定的子句公式的重要推理规则,任一谓词演算公式可以化成一个子句集。通过九步法消解可以从这两个父辈子句推导出一个新子句。九步法消解包括消去蕴涵符号、减否定符辖域、对变量标准化、消去存在量词、化为前束型、化为合取范式、消去全程量词、消去合取符、更换变量名,依次变换即可得到子句集。三、实验条件:1 子句集转换演示程序。2 IE6.0以上,可以上Internet。四、实验内容:理解消解原理,熟悉谓词公式转换

8、成子句集的步骤。五、实验步骤:61 对默认谓词公式进行转换。进入演示程序,点击“语法检查”,再依次点击消解过程的九个步骤按钮,得到消解结果。2 自定义消解目标。点击“清除”删除默认公式,利用界面键盘输入新的消解目标,用“大写字母”、“小写字母”按键进行输入中的字母变换。3 语法检查。点击“语法检查”检查输入谓词公式的语法错误。如无错误,则依次点击步骤按钮进行消解。4 重复运行2、3步,熟悉消解原理和消解过程。六、实验报告要求:1 了解每一步消解的规则和原则。2 给出一个谓词公式消解的详细过程和结果。3 分析消解原理的特点和原理。7人工智能导论实验 河南理工大学实验五 BP网络实验(4学时)一、

9、实验目的:理解反向传播网络的结构和原理,掌握反向传播算法对神经元的训练过程,了解反向传播公式。通过构建BP网络实例,熟悉前馈网络的原理及结构。二、实验原理反向传播(BP)算法是一种计算单个权值变化引起网络性能变化值的较为简单的方法。BP算法过程从输出节点开始,反向地向第一隐含层(即最接近输入层的隐含层)传播由总误差引起的权值修正。BP网络不仅含有输入节点和输出节点,而且含有一层或多层隐(层)节点。输入信号先向前传递到隐节点,经过作用后,再把隐节点的输出信息传递到输出节点,最后给出输出结果。三、实验条件:1 BP网络演示程序。2 IE5.0以上版本,能连通Internet。四、实验内容:1 通过

10、BP网络各项参数的不同设置,观察BP算法的学习效果。2 观察比较BP网络各项参数变化对于训练结果的影响。五、实验步骤:1 设置各层神经元个数设置。用户点击下拉列表框选择输入、隐含、输出各层神经元个数,其中隐含层神经元个数自动设为输入层神经元个数(n)的2n+1个,然后再点击“确定”按钮,就可以看到所设置BP神经网络示意图以及系统随机生成默认的各层权值。2 学习参数设置,用户点击或拖动各滚动条分别设置样本误差、系统误差、学习速率、动量因子、迭代次数参数值。3 各层权值设置,如果用户使用系统随机生成默认的各层权值,则进行第4步。用户8或选中“自定义权”单选框自定义权各层权,在权值设置文本域设置权值

11、后,单击其后“确定”按钮。或双击下方列表框选项,相应权值会在权值设置文本域出现,则进行该权值修改后,单击其后“确定”按钮,修改后的权值会成功地列表框的原位修改。后两种方式均会成功地激活“确定”按钮。4 学习样本设置,单文本域中出现“入层”字样表示在单文本域中设置输入层神经元信号向量。单文本域中出现“出层”字样表示在单文本域中设置输出层神经元信号向量。当输入已完成一个或一个以上模式对,“已设置完”单选框会成功地激活,如选中,则“校正网络”按钮会成功地激活。样本列表框也具有如步3的双击修改功能。5 “校正网络”按钮成功地激活后,单击“校正网络”按钮,进行网络学习。当学习完成后,“较正结果如下:”列

12、表框显示校正学习后的结果,用户可通过察看“学习”是否满意。如满意,则设置测试样本,进行测试“学习”效果。如不满意,则可(重新设置初始权值、或学习样本等方式)让网络重新“学习”。六、实验结论:1 BP网络的基本结构及BP算法的训练过程。2 试述阈值函数和权值变化对BP网络推理结果的影响。9人工智能导论实验 河南理工大学实验一 状态空间搜索实验样例八数码问题一、实验目的及内容实验目的:理解和掌握状态空间搜索的策略实验内容要求:在一个3X3的九宫中有18,这八个数及一个空格,随机的摆放在其中的格子里,现要求实现这个问题:将该九宫格调整为某种有序的形式,调整的原则为每次只能将空格(上、下、左、右)相邻

13、的一个数字平移到空格中,试编程实现这一问题的求解二、实验原理及基本技术路线图(方框原理图或程序流程图) 实验原理:八数码问题中,程序产生的随机排列转换成目标共有两种可能,而且这两种不可能同时成立,也就是奇数排列和偶数排列。我们可以把一个随机排列的数组从左到右从上到下用一个数组表示,例如,其中代表空格。它在奇序列位置上。 在这个数组中我们首先计算它能够重排列出来的结果,公式就是:(),其中(),就是一个数他前面比这个数小的数的个数,为奇数和偶数个有一种解法。那么上面的数组我们就可以解出它的结果。算法分析:九宫问题的求解方法就是交换空格()位置,直至到达目标位置为止。图形表示就是:因此可知:九宫的

14、所以排列有!种,也就是种排法,数据量是非常大的,我使用广度搜索,需要记住每一个结点的排列形式,要是用数组记录的话会占用很多的内存,我们把数据进行适当的压缩。使用形式保存,压缩形式是每个数字用位表示,这样就是×个字节,由于的二进制表示形式,不能用位表示,我使用了一个小技巧就是将表示位,然后用多出来的个字表示所在的位置,就可以用表示了。用移位和或操作将数据逐个移入,比乘法速度要快点。定义了几个结10果来存储遍历到了结果和搜索完成后保存最优路径。实验流程图:三、所用仪器、材料(设备名称、型号、规格等或使用软件) 硬件:个人计算机 一台,软件: Microsoft Visual C+ 6.0

15、四、实验方法、步骤(或:程序代码或操作过程)111.实验步骤(1)运行Microsoft Visual C+ 6.0软件,新建工作空间,得文档。(2)输入源程序代码,进行编译,调试运行。(3)运行结果,按提示要求输入18这八个数,进行程序测验。2.实验源程序#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <queue>#include <stack>using namespace std;#define HashTableSize 362881#def

16、ine NOT !#define UP 0#define DOWN 1#define LEFT 2#define RIGHT 3#define Bit chartypedef struct mapsBit detail9;int myindex; / 记录自己节点在hash表中的位置Bit position; / 记录 空格(0)在序列中的位置Map,*PMap;Map org; / 初始状态int EndIndex; 目标/上移 ,下移 , 左移 ,右移 int const derection4 = -3 , 3 , -1 , 1 ;/ 可移动的四个方向int const Factorial

17、9 = 40320 , 5040 , 720 , 120 , 24 , 6 , 2 , 1 , 1 ;int HashTableHashTableSize=0;/hash表,其中记录的是上一个父节点对应的位置/*八数码的输入(在这里不做任何输入检查,均认为输入数据是正确的)*/ void input()12int i,j;int sum , count ,index ;for(i = 0 ; i < 9 ; i + )scanf("%1d", &org.detail i );org.detail i | (org.position = i) ;for(i =

18、0 ; i < 9 ; i + ) /计算逆序if( 0 = org.detail i )continue;for(j = 0 ; j < i; j + )sum += ( 0 != org.detail j && org.detail j < org.detail i ); for( i = 0 , index = 0 ; i < 9 ; i + ) / 计算初始状态的hash值 for(j = 0 , count = 0 ; j < i ; j +)count += org.detail j > org.detail i ;index +

19、= Factorial org.detail i * count;org.myindex = index + 1 ;EndIndex = sum%2 ? 161328:322561; / 目标状态的hash值 return;/*hash值的计算*Parent:父状态的hash值*direct:移动的方向*/inline int HashValue(Map& Parent , int& direct )int i = Parent.position ;int newindex = Parent.myindex ;Bit *p = Parent.detail;switch(dire

20、ct)case UP :newindex -= 3*40320 ;newindex += ( p i - 2 > p i - 3 ) ? ( Factorial p i - 3 ) : ( - Factorial p i - 2 );newindex += ( p i - 1 > p i - 3 ) ? ( Factorial p i - 3 ) : ( - Factorial p i - 1 );13break;case DOWN :newindex += 3*40320 ;newindex -= ( p i + 2 > p i + 3 ) ? ( Factorial p

21、i + 3 ) : ( - Factorial p i + 2 );newindex -= ( p i + 1 > p i + 3 ) ? ( Factorial p i + 3 ) : ( - Factorial p i + 1 );break;case LEFT : return newindex - 40320; break;case RIGHT : return newindex + 40320; break;return newindex;/* * * 宽度优先搜索*/void Bfs()queue<Map> Queue;Queue.push(org);HashTa

22、ble org.myindex = -1;while( NOT Queue.empty() )Map node = Queue.front();Queue.pop();for(int k =0 ; k < 4; k + )Map tmp = node;tmp.position = node.position + derectionk;if(tmp.position < 0 | tmp.position > 8 | ( k > 1 && tmp.position / 3 != node.position /3 ) )continue;tmp.myindex

23、 = HashValue( node , k );if(0 != HashTabletmp.myindex ) continue;tmp.detail node.position = tmp.detail tmp.position ; / 移动空格 tmp.detail tmp.position = 0 ;HashTabletmp.myindex = node.myindex; / 状态记录到hashtable中 if( node.myindex = EndIndex ) return ;Queue.push( tmp );14return ;/* 通过hash表中记录的进行查找路径*/voi

24、d FindPath()int nowindex;int count =0 ;int nixu9, result9;int i, j , k ;stack<int> Stack;Stack.push(EndIndex);nowindex = EndIndex;while( -1 != HashTable nowindex )Stack.push(HashTable nowindex );nowindex = HashTable nowindex ;printf("共需: %d 步n",Stack.size()-1);getchar();while( NOT St

25、ack.empty()nowindex = Stack.top() - 1 ;Stack.pop();for( i = 0 ; i < 9; i + ) / 计算出逆序 nixui = nowindex / Factorial i ;nowindex %= Factorial i ;memset( result , -1 , 9 *sizeof(int);for( i =0 ; i < 9 ; i + ) / 根据逆序计算排列 for( j = 0 , k = nixui ; j < 9 ; j + )if(resultj = -1 ) k -;if( k < 0 ) break;resultj = i ;for( i =0 ; i < 9 ; i + )15printf("%3d",resulti);if( 2 = i % 3 ) printf("n"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论