人工智能实验指导书Word文档下载推荐.docx
《人工智能实验指导书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《人工智能实验指导书Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
将该九宫格调整为某种有序的形式,调整的原则为每次只能将空格(上、下、左、右)相邻的一个数字平移到空格中,试编程实现这一问题的求解
二、实验原理及基本技术路线图(方框原理图或程序流程图)
实验原理:
算法分析:
实验流程图:
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
硬件:
软件:
四、实验方法、步骤(或:
程序代码或操作过程)
1.实验步骤
2.实验源程序
五、实验过程原始记录(测试数据、图表、计算等)
六、实验结果、分析和结论
(2学时)
一、实验目的:
熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。
二、实验原理:
A*算法是一种有序搜索算法,其特点在于对估价函数的定义上。
对于一般的有序搜索,总是选择f值最小的节点作为扩展节点。
因此,f是根据需要找到一条最小代价路径的观点来估算节点的,所以,可考虑每个节点n的估价函数值为两个分量:
从起始节点到节点n的代价以及从节点n到达目标节点的代价。
三、实验条件:
1N数码难题演示程序。
2IE6.0以上,可以上Internet。
三、实验内容:
1分别以8数码和15数码为例实际求解A*算法。
2画出A*算法求解框图。
3分析估价函数对搜索算法的影响。
4分析A*算法的特点。
四、实验步骤:
1开始演示。
进入N数码难题演示程序,可选8数码或者15数码,点击“选择数码”按钮确定。
第一次启动后,点击两次“缺省”或者“随机”按钮,才会出现图片。
2点击“缺省棋局”,会产生一个固定的初始节点。
点击“随机生成”,会产生任意排列的初始节点。
3算法执行。
点击“连续执行”则程序自动搜索求解,并演示每一步结果;
点击“单步运行”则每次执行一步求解流程。
“运行速度”可自由调节。
4观察运行过程和搜索顺序,理解启发式搜索的原理。
在下拉框中选择演示“15数码难题”,点击“选择数码”确定选择;
运行15数码难题演示实例。
5算法流程的任一时刻的相关状态,以算法流程高亮、open表、close表、节点静态图、当前扩展节点移动图等5种形式在按钮上方同步显示,便于深入学习理解A*算法。
6根据程序运行过程画出A*算法框图。
其它可参考帮助文件。
五、实验报告要求:
1A*算法流程图和算法框图。
2试分析估价函数的值对搜索算法速度的影响。
根据A*算法分析启发式搜索的特点。
理解含有变量的子句如何使用消解规则,掌握子句消解的原理和规则,能熟练进行任意两个子句的消解,了解消解推理的某些常用规则。
对子句集进行消解推理,得到相应的结论。
为了对含有变量的子句使用消解规则,我们必须找到一个置换,作用于父辈子句使其含有互补文字。
消解两个子句时,可能有一个以上的消解式,不过,在任何情况下最多有有限个消解式。
三、实验条件
1子句消解推理演示程序。
四、实验内容:
1运行并观察演示实例。
2输入新的子句,检查消解结果。
3根据消解过程理解消解原理和常用规则。
五、实验步骤:
1.默认示例演示。
进入演示实例,点击“演示实例1”,然后点击“开始消解”,得到消解结果。
2.分别运行“演示实例2”和“演示实例3”,观察消解结果,理解常用消解规则的应用。
3.自定义消解子句。
点击“系统重置”按钮,再通过键盘与两个按钮“~”与“∨”输入合法的子句,点击“加入子句集”加入子句集,点击“开始消解”,观察消解结果。
4.重复步骤3,多次输入不同子句进行消解,熟悉消解过程。
六、实验结论:
1熟悉消解过程,理解子句消解规则。
2给出自己输入的待消解子句、消解结果和详细过程。
理解和掌握消解原理,熟悉谓词公式化为子句集的九个步骤,理解消解推理规则,能把任意谓词公式转换成子句集。
二、实验原理
消解是可用于一定的子句公式的重要推理规则,任一谓词演算公式可以化成一个子句集。
通过九步法消解可以从这两个父辈子句推导出一个新子句。
九步法消解包括消去蕴涵符号、减否定符辖域、对变量标准化、消去存在量词、化为前束型、化为合取范式、消去全程量词、消去合取符、更换变量名,依次变换即可得到子句集。
1子句集转换演示程序。
理解消解原理,熟悉谓词公式转换成子句集的步骤。
1对默认谓词公式进行转换。
进入演示程序,点击“语法检查”,再依次点击消解过程的九个步骤按钮,得到消解结果。
2自定义消解目标。
点击“清除”删除默认公式,利用界面键盘输入新的消解目标,用“大写字母”、“小写字母”按键进行输入中的字母变换。
3语法检查。
点击“语法检查”检查输入谓词公式的语法错误。
如无错误,则依次点击步骤按钮进行消解。
4重复运行2、3步,熟悉消解原理和消解过程。
六、实验报告要求:
1了解每一步消解的规则和原则。
2给出一个谓词公式消解的详细过程和结果。
3分析消解原理的特点和原理。
(4学时)
理解反向传播网络的结构和原理,掌握反向传播算法对神经元的训练过程,了解反向传播公式。
通过构建BP网络实例,熟悉前馈网络的原理及结构。
反向传播(BP)算法是一种计算单个权值变化引起网络性能变化值的较为简单的方法。
BP算法过程从输出节点开始,反向地向第一隐含层(即最接近输入层的隐含层)传播由总误差引起的权值修正。
BP网络不仅含有输入节点和输出节点,而且含有一层或多层隐(层)节点。
输入信号先向前传递到隐节点,经过作用后,再把隐节点的输出信息传递到输出节点,最后给出输出结果。
1BP网络演示程序。
2IE5.0以上版本,能连通Internet。
1通过BP网络各项参数的不同设置,观察BP算法的学习效果。
2观察比较BP网络各项参数变化对于训练结果的影响。
1设置各层神经元个数设置。
用户点击下拉列表框选择输入、隐含、输出各层神经元个数,其中隐含层神经元个数自动设为输入层神经元个数(n)的2n+1个,然后再点击“确定”按钮,就可以看到所设置BP神经网络示意图以及系统随机生成默认的各层权值。
2学习参数设置,用户点击或拖动各滚动条分别设置样本误差、系统误差、学习速率、动量因子、迭代次数参数值。
3各层权值设置,如果用户使用系统随机生成默认的各层权值,则进行第4步。
用户或选中“自定义权”单选框自定义权各层权,在权值设置文本域设置权值后,单击其后“确定”按钮。
或双击下方列表框选项,相应权值会在权值设置文本域出现,则进行该权值修改后,单击其后“确定”按钮,修改后的权值会成功地列表框的原位修改。
后两种方式均会成功地激活“确定”按钮。
4学习样本设置,单文本域中出现“入层”字样表示在单文本域中设置输入层神经元信号向量。
单文本域中出现“出层”字样表示在单文本域中设置输出层神经元信号向量。
当输入已完成一个或一个以上模式对,“已设置完”单选框会成功地激活,如选中,则“校正网络”按钮会成功地激活。
样本列表框也具有如步3的双击修改功能。
5“校正网络”按钮成功地激活后,单击“校正网络”按钮,进行网络学习。
当学习完成后,“较正结果如下:
”列表框显示校正学习后的结果,用户可通过察看“学习”是否满意。
如满意,则设置测试样本,进行测试“学习”效果。
如不满意,则可(重新设置初始权值、或学习样本等方式)让网络重新“学习”。
1BP网络的基本结构及BP算法的训练过程。
2试述阈值函数和权值变化对BP网络推理结果的影响。
实验一状态空间搜索实验样例
八数码问题中,程序产生的随机排列转换成目标共有两种可能,而且这两种不可能同时成立,也就是奇数排列和偶数排列。
我们可以把一个随机排列的数组从左到右从上到下用一个数组表示,例如{8,7,1,5,2,6,3,4,0}其中0代表空格。
它在奇序列位置上。
在这个数组中我们首先计算它能够重排列出来的结果,公式就是:
∑(F(X))=Y,其中F(X),就是一个数他前面比这个数小的数的个数,Y为奇数和偶数个有一种解法。
那么上面的数组我们就可以解出它的结果。
九宫问题的求解方法就是交换空格(0)位置,直至到达目标位置为止。
图形表示就是:
因此可知:
九宫的所以排列有9!
种,也就是362880种排法,数据量是非常大的,我使用广度搜索,需要记住每一个结点的排列形式,要是用数组记录的话会占用很多的内存,我们把数据进行适当的压缩。
使用DWORD形式保存,压缩形式是每个数字用3位表示,这样就是3×
9=27个字节,由于8的二进制表示形式1000,不能用3位表示,我使用了一个小技巧就是将8表示位000,然后用多出来的5个字表示8所在的位置,就可以用DWORD表示了。
用移位和或操作将数据逐个移入,比乘法速度要快点。
定义了几个结果来存储遍历到了结果和搜索完成后保存最优路径。
个人计算机一台,
MicrosoftVisualC++6.0
(1)运行MicrosoftVisualC++6.0软件,新建工作空间,
得文档。
(2)输入源程序代码,进行编译,调试运行。
(3)运行结果,按提示要求输入1—8这八个数,进行程序测验。
#include<
stdio.h>
stdlib.h>
windows.h>
queue>
stack>
usingnamespacestd;
#defineHashTableSize362881
#defineNOT!
#defineUP0
#defineDOWN1
#defineLEFT2
#defineRIGHT3
#defineBitchar
typedefstructmaps
{
Bitdetail[9];
intmyindex;
//记录自己节点在hash表中的位置
Bitposition;
//记录空格(0)在序列中的位置
}Map,*PMap;
Maporg;
//