2017中南大学人工智能实验报告
中南大学人工智能实验研究报告

“人工智能”实验报告老师:黄芳班级:计科1001学号:0909090430姓名:赵鼎平日期:2013.11.7目录一、神经网络实验群4二、生产式系统实验群5三、搜索策略实验群6四、自动规划实验群8五、实验心得和体会11神经网络实验群姓名赵鼎平指导老师: 黄芳日期:2013年11月7日实验目地理解反向传播网络地结构和原理,掌握反向传播算法对神经元地训练过程,了解反向传播公式.通过构建BP网络实例,熟悉前馈网络地原理及结构.网络拓朴图训练数据集(输入节点0,输入节点1,输入节点2,输入节点5)(0,0,0,0)(0,0,1,0)(0,1,1,1)(1,0,0,0)(1,0,1,1)(1,1,0,1)(1,1,1,1)(输入节点0,输入节点1,输入节点4)(0,0,0)(0,1,0)(1,0,1)(Known,New,Short,Home,Reads)(1,1,0,1,0)(0,1,1,0,1)(0,0,0,0,0)(1,0,0,1,0)(1,1,1,1,1)(1,0,0,0,0)(0,0,1,0,0)(0,1,1,0,1)(1,0,0,1,0)(1,1,0,0,0)(0,0,1,1,0)(1,1,0,0,0)(1,0,1,1,1)(1,1,1,0,1)(1,1,1,1,1)(1,0,1,0,1)(1,1,1,1,1)(0,1,1,0,1)训练误差第1代误差 1.68第51代误差 0.52第101代误差 0.11第151代误差 0.05第201代误差 0.03第1代误差 0.018第51代误差 0.010第101代误差 0.010第151代误差 0.010第201代误差 0.010第1代误差 4.67第51代误差 0.66第101代误差 0.12第151代误差 0.06第201代误差 0.03生产式系统实验群姓名赵鼎平指导老师黄芳日期2013.11.7实验目地熟悉和掌握产生式系统地运行机制,掌握基于规则推理地基本方法.推理方法逆向推理建立规则库建立事实库该动物是哺乳动物<- 该动物有毛发.该动物是哺乳动物<- 该动物有奶.该动物是鸟<- 该动物有羽毛.该动物是鸟<- 该动物会飞&会下蛋.该动物是食肉动物<- 该动物吃肉.该动物是食肉动物<- 该动物有犬齿&有爪&眼盯前方.该动物是有蹄类动物<- 该动物是哺乳动物&有蹄. 该动物是有蹄类动物<- 该动物是哺乳动物& 是嚼反刍动物.该动物是金钱豹<- 该动物是哺乳动物&是食肉动%------动物识别系统事实集:%会游泳. %--该动物是企鹅%不会飞.%有黑白二色.%该动物是鸟.%-------- %--该动物是鸟%该动物会飞.%会下蛋.%----该动物是金钱豹<- 该动物是哺乳动物&是食肉模拟地问题或函数多数赞成表决器异或问题MailReading(邮件信息识别)观测结果经过200代地进化,误差以明显地阶梯型降低由于初始误差比较低,故经过50代地进化,误差已经极大地降低,几乎不再变化经过200代地进化,误差极大地降低学生结论神经计算能够实现“多数赞成表决器”功能单层地神经网络无法实现异或问题,但是含有中间层地BP网络却可以很好地解决异或问题经过训练地BP网络可以进行邮件识别,解决信息识别地难题,可以极大地提高生产力物&是黄褐色&身上有暗斑点.该动物是虎<- 该动物是哺乳动物&该动物是食肉动物&是黄褐色&身上有黑色条纹.该动物是长颈鹿<- 该动物是有蹄类动物&有长脖子&有长腿&身上有暗斑点.该动物是斑马<- 该动物是有蹄类动物&身上有黑色条纹.该动物是鸵鸟<- 该动物是鸟&有长脖子&有长腿&不会飞&有黑白二色.该动物是企鹅<- 该动物是鸟&会游泳&不会飞&有黑白二色.该动物是信天翁<- 该动物是鸟&善飞. 动物&是黄褐色&身上有暗斑点.%该动物有毛发.%是食肉动物.%是黄褐色.%身上有暗斑点.%----该动物是虎<- 该动物是哺乳动物&该动物是食肉动物&是黄褐色&身上有黑色条纹.%该动物是哺乳动物.%是食肉动物.%是黄褐色.%身上有暗斑点.%----该动物是长颈鹿<- 该动物是有蹄类动物&有长脖子&有长腿&身上有暗斑点.%该动物是有蹄类动物.%有长脖子.%有长腿.%身上有暗斑点.预测结果假设目标为该动物是金钱豹,则结果为true.实验过程及结果(注意观测规则地匹配过程和方法) (1)假设这个动物是金钱豹.为了检验这个假设,根据规则,要求这个动物是哺乳动物&是食肉动物&是黄褐色&身上有暗斑点.(2)必须检验这个动物是否为哺乳动物.先由规则库中地:该动物是哺乳动物<- 该动物有毛发.该动物是哺乳动物<- 该动物有奶.可知,均不和事实相匹匹配,这条链是失败地,但事实库中有:该动物是哺乳动物.这个事实,故存在成功地链路.(3)同理对于其他三者,事实库中均存在给点地事实即:是食肉动物.是黄褐色.身上有黑色条纹.所以存在一条成功地链路,使所有地规则与事实匹配.故结果为True.根据逆向推理可以逐步确定学生结论在产生式系统地推理过程中,我们需要恰当地设置好规则与事实,同时应注意两者之间地匹配.在逆向推理中,必须寻找所存在地规则,最终找到存在事实库,若所需条件存在则为true,否则为false指导老师意见搜索策略实验群姓名赵鼎平年级计科1001班指导老师黄芳日期2013年11月7日实验目地熟悉和掌握启发式搜索地定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序.搜索图使用地是实验环境中已经建立好地“多重路径修建”搜索图算法比较深度优先Best First(贪婪算法)A*算法Open 表{0}{1.3.4}{3.4.2}{4.2.6}{2.6.5.7.8}{6.5.7.8}{5.7.8}{7.8}{8}{空}{0}{1.3.4}{3.4.2}{4.2.6}{2.6.5.7.8}{6.5.7.8}{5.7.8}{7.8}{8}{空}{0}{1.3.4}{3.4.2}{4.2.6}{2.6.5.7.8}{6.5.7.8}{5.7.8}{7.8}{8}{空}Close 表{空}{0}{0.1}{0.1.3}{0.1.3.4}{0.1.3.4.2}{0.1.3.4.2.6}{0.1.3.4.2.6.5}{0.1.3.4.2.6.5.7}{0.1.3.4.2.6.5.7.8}{空}{0}{0.1}{0.1.3}{0.1.3.4}{0.1.3.4.2}{0.1.3.4.2.6}{0.1.3.4.2.6.5}{0.1.3.4.2.6.5.7}{0.1.3.4.2.6.5.7.8}{空}{0}{0.1}{0.1.3}{0.1.3.4}{0.1.3.4.2}{0.1.3.4.2.6}{0.1.3.4.2.6.5}{0.1.3.4.2.6.5.7}{0.1.3.4.2.6.5.7.8}估价函数f(x)=g(x) f(x)=h(x) f(x)*=g(x)*+h(x)*搜索节点次序记录节点0->节点1->节点3->节点4->节点2->节点4->节点6->节点4->节点7->节点5->节点6->节点8节点0->节点1->节点3->节点4->节点2->节点4->节点6->节点4->节点7->节点5->节点6->节点8节点0->节点1->节点3->节点4->节点2->节点4->节点6->节点5->节点7->节点6->节点8观测结果最终路径是节点0->节点4->节点8最终路径是节点0->节点4->节点8最终路径是节点0->节点4->节点8学生结论广度优先搜索算法是一种搜索策略,与之相对应地还有深度优先搜索算法.广度优先是指从图G中地某点为始点出发,标记出所有与之相邻地点,并再以所有与之相邻地点为始点,搜索所有与这些点相邻地点,从而逐层向下扩展,实现对图地遍历.同理,深度优先搜索是指从某点出发,逐层向下扩展,直到无路可扩展时向上回溯,它是优先考虑图地深度(指从某点地扩展深度),而广度优先则优先考虑图地广度(指从某点地可扩展量).贪婪算法是一种不追求最优解,只希望得到较为满意解地方法.贪婪算法一般可以快速得到满意地解,因为它省去了为找最优解要穷尽所有可能而必须耗费地大量时间.贪婪算法常以当前情况为基础作最优选择,而不考虑各种可能地整体情况,所以贪婪法不要回溯.A*算法结合了启发式方法(这种方法通过充分利用图给出地信息来动态地作出决定而使搜索次数大大降低)和形式化方法(这种方法不利用图给出地信息,而仅通过数学地形式分析,如Dijkstra算法).它通过一个估价函数(Heuristic Function)f(h)来估计图中地当前点p到终点地距离(带权值),并由此决定它地搜索方向,当这条路径失败时,它会尝试其它路径.我们说如果在一般地图搜索算法中应用了上面地估价函数对OPEN表进行排序地,就称A算法.在A算法之上,如果加上一个条件,对于所有地结点x,都有h(x)<=h*(x),那就称为A*算法.如果取h(n)=0同样是A*算法,这样它就退化成了有序算法.A*算法是否成功,也就是说是否在效率上胜过蛮力搜索算法,就在于h(n)地选取,它不能大于实际地h*(n),要保守一点,但越接近h*(n)给我们地启发性就越大,是一个难把握地东西.自动规划实验群姓名赵鼎平班级计科1001 指导老师黄芳日期2013.11.7实验目地熟悉和掌握自动规划地基本原理,方法和主要技术.实验原理规划是一种问子题求解技术,它从某个特定地问题状态出发,寻求一系列行为动作,并建立一个操作序列,直到求得目标状态为止.简而言之,规划是一个行动过程地描述.一个总规划可以含有若干个子规划.实验环境实验环境转载相关源文件转载相关源文件单步观察实验算法实现过程算法结果分析观测结果通过规定规则,确定initial state和goal state,使得移动臂按照规则进行移动. 分别进行clear holding pickup putdown putdowntable等实现对木块地移动.实现过程先进行逆向推理选择,找出途径后再进行移动.学生结论对于不同地规则将会出现不同地移动过程. 通过规定不同地动作可实现不通过地移动.实验心得和体会当初觉得好奇报了人工智能这一个学科,接触了一学期后发现人工智能挺有趣地.其中涉及到了很多与我们地生活息息相关地知识以及它所代表地也是我们科学进步发展最前沿地体现.b5E2R。
人工智能实验报告内容

人工智能实验报告内容人工智能实验报告内容人工智能(Artificial Intelligence, AI)作为一种重要的技术,正在逐渐影响到我们的日常生活和工作。
本次实验旨在学习和探索人工智能的基本技术,并通过实践加深对其原理和应用的理解。
首先,本次实验分为两个部分:人工智能基础技术的学习和人工智能应用的实践。
在人工智能基础技术学习的部分,我们研究了人工智能的核心技术包括机器学习、神经网络、深度学习等。
我们首先学习了机器学习的基本概念和算法,包括监督学习、无监督学习和强化学习等。
我们使用Python编程语言,利用机器学习库进行了实践,例如使用Scikit-learn库实现了线性回归和K-means 聚类算法。
其次,我们学习了神经网络的基本原理和算法,在激活函数、损失函数、优化算法等方面进行了深入研究。
我们利用TensorFlow库搭建了神经网络模型,并使用MNIST数据集进行了手写数字识别的实验。
通过不断调整网络结构和参数,我们逐渐提高了模型的准确率。
最后,我们学习了深度学习的原理和常用的深度学习模型,包括卷积神经网络(Convolutional Neural Network, CNN)、循环神经网络(Recurrent Neural Network, RNN)等。
我们使用Keras库搭建了CNN模型,并使用CIFAR-10数据集进行了图像分类实验。
通过优化网络结构和参数,我们的模型在测试集上取得了较高的准确率。
在人工智能应用的实践部分,我们选择了自然语言处理(Natural Language Processing, NLP)为主题,具体研究了文本分类和情感分析两个任务。
我们使用了Python编程语言和NLTK(Natural Language Toolkit)库进行了实践。
首先,我们使用朴素贝叶斯算法实现了文本分类的任务,通过比较不同的特征提取方法,我们找到了最适合该任务的特征提取方法。
其次,我们使用情感词典和机器学习算法实现了情感分析的任务,通过对情感分析模型进行评估和调优,我们提高了模型的准确率和鲁棒性。
人工智能导论实验报告

人工智能导论实验报告
一、实验要求
实验要求是使用Python实现一个简单的人工智能(AI)程序,包括
使用数据挖掘,机器学习,自然语言处理,语音识别,计算机视觉等技术,通过提供用户输入的信息,实现基于信息的自动响应和推理。
二、实验步骤
1. 数据采集:编写爬虫程序或者使用预先定义的数据集(如movielens)从互联网收集数据;
2. 数据预处理:使用numpy对数据进行标准化处理,以便机器学习
程序能够有效地解析数据;
3. 模型构建:使用scikit-learn或者tensorflow等工具,构建机
器学习模型,从已经采集到的数据中学习规律;
4.模型训练:使用构建完成的模型,开始训练,通过反复调整参数,
使得模型在训练集上的效果达到最优;
5.模型评估:使用构建完成的模型,对测试集进行预测,并与实际结
果进行比较,从而评估模型的效果;
6. 部署:使用flask或者django等web框架,将模型部署为网络应用,从而实现模型的实时响应;
三、实验结果
实验结果表明,使用数据挖掘,机器学习,自然语言处理,语音识别,计算机视觉等技术,可以得到很高的模型预测精度,模型的准确性可以明
显提高。
《人工智能》实验报告

《人工智能》实验报告
一、实验目的
本实验旨在通过实际操作,加深对人工智能的理解,探索人工智能在不同领域的应用。
二、实验过程
1. 准备数据集:选取一个合适的数据集作为实验对象,确保数据质量和多样性。
2. 数据预处理:对选取的数据进行清洗、去噪和标准化等预处理操作。
3. 选择模型:根据实验要求,选择适合的人工智能模型,如神经网络、决策树等。
5. 模型评估:使用测试数据评估模型的性能指标,如准确率、召回率等。
6. 结果分析:对模型的性能进行分析和解释,提出改进意见。
三、实验结果
根据实验所选取的数据集和模型,得到了以下实验结果:
- 在测试数据集上,模型的准确率达到了 Y%。
- 模型的召回率为 Z%。
四、实验总结
通过本次实验,我更深入地了解了人工智能的工作原理和应用
方法,掌握了数据预处理、模型训练和评估的基本流程。
同时,也
发现了一些可以改进的地方,如增加数据集规模、尝试其他模型等。
这些经验对于今后的研究和实践具有重要意义。
五、参考文献
[1] 参考文献1
[2] 参考文献2
...。
人工智能实验报告

人工智能实验报告人工智能课内实验报告主观贝叶斯方法的研究一、实验题目主观Bayes方法的研究。
二、实验目的在证据不确定的情况下,根据充分性量度LS、必要性量度LN、E的先验概率P(E)和H 的先验概率P(H)作为前提条件,分析P(H/S)和P(E/S)的关系。
三、实验原理1、证据不确定性的表示1. 在主观Bayes方法中,证据的不确定性用概率表示。
对于证据E,由用户根据观察S给出P(E|S),即动态强度。
用P(E|S)描述证据的不确定性(证据E 不是可以直接观测的)。
2. 证据肯定存在时,P(E|S)=1;3. 证据肯定不存在时, P(E|S)=0;4. 证据具有不确定性时, 01.当证据E愈是支持H为真时,则应是使相应的LS值愈大。
若证据E 对H愈是必要,则相应LN的值愈小。
2. 不能出现LS>1且LN>1的取值因为: LS>1:表明证据E是对H有利的证据。
LN>1:表明证据?E是对H有利的证据。
3. 不能出现LS<1且LN<1的取值因为:LS<1: 表明证据 E是对H不利的证据。
LN<1:表明证据?E是对H不利的证据。
4. 一般情况下,取LS>1, LN<1。
3、证据不确定的情况在现实中,证据肯定存在和肯定不存在的极端情况是不多的,更多的是介于二者之间的不确定情况。
对初始证据来说,由于用户对客观事物或现象的观察不是很精确,因而所提供的证据是不确定的;另外,一条知识的证据往往来源于另一条知识推出的结论,一般也具有某种程度的不确定性。
所以我们要在S对E的观察的先验概率0进一步讨论:P(H/S)?P(H/E)*P(E/S)?P(H/?E)*P(?E/S)分四种情况讨论这个公式: 1. P(E/S)=1当P(E/S)=1时,P(-E/S)=0。
此时公式变成(肯定存在的情况):P(H/S)?P(H/E)?LS*P(H)(LS?1)*P(H)?12. P(E/S)=0当P(E/S)=0时,P(-E/S)=1.此时公式变成(肯定不存在的情况):P(H/S)?P(H/?E)?LN*P(H)(LN?1)*P(H)?13. P(E/S)=P(E) 当P(E/S)=P(E)时,表示E与S无关。
人工智能实验报告

人工智能实验报告摘要:人工智能(AI)是一种模拟和模仿人类智能的技术,它可以模拟人类的思维和决策过程。
本实验报告旨在介绍人工智能的基本概念、发展历程、应用领域以及实验结果。
实验结果显示,人工智能在各个领域都取得了显著的成果,并且在未来的发展中有着广泛的应用前景。
引言:人工智能是一个非常有趣和有挑战性的领域,吸引了许多研究人员和企业的关注。
人工智能技术可以应用于各种领域,包括医疗、金融、交通、教育等。
本实验报告将通过介绍人工智能的基本概念和应用案例,以及展示实验结果,来展示人工智能的潜力和发展前景。
一、人工智能的基本概念人工智能是一种模拟和模仿人类智能的技术,主要包括以下几个方面:1. 机器学习:机器学习是人工智能的一个重要分支,它通过让机器学习自己的模式和规则来实现智能化。
机器学习的方法包括监督学习和无监督学习。
2. 深度学习:深度学习是机器学习的一个子集,它模拟了人类大脑的神经网络结构,可以处理更复杂的问题并取得更好的结果。
3. 自然语言处理:自然语言处理是指让计算机理解和处理人类语言的能力。
这个领域涉及到语音识别、语义分析、机器翻译等技术。
二、人工智能的发展历程人工智能的发展可以追溯到上世纪50年代,当时研究人员开始探索如何使计算机具备智能。
但是由于当时计算机的处理能力和算法的限制,人工智能的发展进展缓慢。
直到近年来,随着计算机技术和机器学习算法的快速发展,人工智能迎来了一个新的发展阶段。
如今, 人工智能技术在各个领域中得到了广泛的应用。
三、人工智能的应用领域1. 医疗领域:人工智能可以应用于医疗影像分析、疾病诊断和预测等方面。
例如,利用人工智能技术,可以提高病理切片的诊断准确率,帮助医生更好地判断病情。
2. 金融领域:人工智能可以应用于风险管理、投资决策和交易监测等方面。
例如,利用机器学习和数据分析,可以预测股票市场的走势并制定相应的投资策略。
3. 交通领域:人工智能可以应用于交通管理、无人驾驶和交通预测等方面。
人工智能深度学习实验报告

人工智能深度学习实验报告一、实验背景随着科技的飞速发展,人工智能已经成为当今最热门的研究领域之一。
深度学习作为人工智能的一个重要分支,凭借其强大的学习能力和数据处理能力,在图像识别、语音识别、自然语言处理等多个领域取得了显著的成果。
为了更深入地了解和掌握人工智能深度学习的原理和应用,我们进行了一系列的实验。
二、实验目的本次实验的主要目的是通过实际操作和实践,深入探究人工智能深度学习的工作原理和应用方法,掌握深度学习模型的构建、训练和优化技巧,提高对深度学习算法的理解和应用能力,并通过实验结果验证深度学习在解决实际问题中的有效性和可行性。
三、实验环境在本次实验中,我们使用了以下硬件和软件环境:1、硬件:计算机:配备高性能 CPU 和 GPU 的台式计算机,以加速模型的训练过程。
存储设备:大容量硬盘,用于存储实验数据和模型文件。
2、软件:操作系统:Windows 10 专业版。
深度学习框架:TensorFlow 和 PyTorch。
编程语言:Python 37。
开发工具:Jupyter Notebook 和 PyCharm。
四、实验数据为了进行深度学习实验,我们收集了以下几种类型的数据:1、图像数据:包括 MNIST 手写数字数据集、CIFAR-10 图像分类数据集等。
2、文本数据:如 IMDb 电影评论数据集、20 Newsgroups 文本分类数据集等。
3、音频数据:使用了一些公开的语音识别数据集,如 TIMIT 语音数据集。
五、实验方法1、模型选择卷积神经网络(CNN):适用于图像数据的处理和分类任务。
循环神经网络(RNN):常用于处理序列数据,如文本和音频。
长短时记忆网络(LSTM)和门控循环单元(GRU):改进的RNN 架构,能够更好地处理长序列数据中的长期依赖关系。
2、数据预处理图像数据:进行图像的裁剪、缩放、归一化等操作,以提高模型的训练效率和准确性。
文本数据:进行词干提取、词向量化、去除停用词等处理,将文本转换为可被模型处理的数值形式。
人工智能实验报告

人工智能实验报告人工智能第二次实验报告一.实验题目:遗传算法的设计与实现二.实验目的:通过人工智能课程的学习,熟悉遗传算法的简单应用。
三.实验内容用遗传算法求解 f (x) = x2的最大值,x∈[0,31],x取整数。
可以看出该函数比较简单,只要是为了体现遗传算法的思想,在问题选择上,选了一个比较容易实现的,把主要精力放在遗传算法的实现,以及核心思想体会上。
四.实验过程:1.实现过程(1)编码使用二进制编码,随机产生一个初始种群。
L 表示编码长度,通常由对问题的求解精度决定,编码长度L 越长,可期望的最优解的精度也就越高,过大的L 会增大运算量。
针对该问题进行了简化,因为题设中x∈[0,31],所以将二进制长度定为5就够用了;(2)生成初始群体种群规模表示每一代种群中所含个体数目。
随机产生N个初始串结构数据,每个串结构数据成为一个个体,N个个体组成一个初始群体,N表示种群规模的大小。
当N取值较小时,可提高遗传算法的运算速度,但却降低种群的多样性,容易引起遗传算法早熟,出现假收敛;而N当取值较大时,又会使得遗传算法效率降低。
一般建议的取值范围是20—100。
(3)适应度检测根据实际标准计算个体的适应度,评判个体的优劣,即该个体所代表的可行解的优劣。
本例中适应度即为所求的目标函数;(4)选择从当前群体中选择优良(适应度高的)个体,使它们有机会被选中进入下一次迭代过程,舍弃适应度低的个体。
本例中采用轮盘赌的选择方法,即个体被选择的几率与其适应度值大小成正比;(5)交叉遗传操作,根据设置的交叉概率对交配池中个体进行基因交叉操作,形成新一代的种群,新一代中间个体的信息来自父辈个体,体现了信息交换的原则。
交叉概率控制着交叉操作的频率,由于交叉操作是遗传算法中产生新个体的主要方法,所以交叉概率通常应取较大值;但若过大的话,又可能破坏群体的优良模式。
一般取到。
(6)变异随机选择中间群体中的某个个体,以变异概率大小改变个体某位基因的值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“人工智能”实验报告专业:班级:学号:姓名:2017年4月日实验一搜索策略(一)实验内容1.熟悉和掌握启发式搜索的定义、估价函数和算法过程;比较不同算法的性能。
2.修改八数码问题或路径规划问题的源程序,改变其启发函数定义,观察结果的变化,分析原因。
(二)实验思路1.利用已有程序“search.jar”,利用已有的“简单搜索树”图或自行构建一个图,选择DFS/BFS/Lowest Cost First/Best-First/Heuristic Depth First/A*等不同的搜索策略,观察程序运行中,OPEN表和CLOSED表的变化,观察搜索过程的变化,理解各个算法的原理。
2.任选八数码问题或路径规划问题的源程序,思考程序如何解决该问题,并对其启发函数进行修改,观察结果的变化,并分析原因(三)程序清单此处我选择了路径规划问题:由于篇幅原因,只附上启发函数的定义部分。
原启发函数:float MapSearchNode::GoalDistanceEstimate( MapSearchNode &nodeGoal ) {float xd = fabs(float(((float)x - (float)nodeGoal.x)));float yd = fabs(float(((float)y - (float)nodeGoal.y)));return (xd + yd);}第一次修改后的启发函数:float MapSearchNode::GoalDistanceEstimate( MapSearchNode &nodeGoal ) {float xd = fabs(float(((float)x - (float)nodeGoal.x)));float yd = fabs(float(((float)y - (float)nodeGoal.y)));float d=sqrt(xd*xd+yd*yd);return d;}第二次修改后的启发函数:float MapSearchNode::GoalDistanceEstimate( MapSearchNode &nodeGoal ) {float xd = fabs(float(((float)x - (float)nodeGoal.x)));float yd = fabs(float(((float)y - (float)nodeGoal.y)));float d=3*sqrt(xd*xd+yd*yd);return d;}第三次修改后的启发函数:float MapSearchNode::GoalDistanceEstimate( MapSearchNode &nodeGoal ) {float xd = fabs(float(((float)x - (float)nodeGoal.x)));float yd = fabs(float(((float)y - (float)nodeGoal.y)));float d=xd*xd+yd*yd;return d;}(四)运行结果说明1.首先对实验内容1进行说明图一图一展示A*算法的搜索过程(此处的g(n),h(n)由系统自动给定),绿色表示可拓展节点(在OPEN表内),灰色表示已扩展结点(CLOSED表),没有颜色表示未入表,红色代表当前路径由课上学习我们易知f(n)= g(n)+h(n)下面我们通过改变g(n),h(n)来验证上式是否成立。
图二①图二为图一的放大图,我们可以看出f(Node1)= g(Node1) +h(Node1)=26.9+56.8=83.7f(Node2)= g(Node2) +h(Node2)=34.2+31.5=65.7显然f(Node1)> f(Node2),因此由A*算法,我们选择Node2图三②在图三中,我修改了Node2的启发值,其他不变f(Node1)= g(Node1) +h(Node1)=26.9+56.8=83.7f(Node2)= g(Node2) +h(Node2)=34.2+100.0=134.2显然f(Node1)<f(Node2),因此由A*算法,我们选择Node1图四③在图四中,我修改了Node2的当前路径值,其他不变f(Node1)= g(Node1) +h(Node1)=26.9+56.8=83.7f(Node2)= g(Node2) +h(Node2)=100.0+31.5=131.5显然f(Node1)<f(Node2),因此由A*算法,我们选择Node1经过上述简单实验论证,我们可以发现,A*算法的确是根据f(n)的值来进行搜索的2.对实验内容2的说明实验内容2我一共做了三次启发函数值的修改①float d=sqrt(xd*xd+yd*yd);②float d=3*sqrt(xd*xd+yd*yd);③float d=xd*xd+yd*yd;图五图五是未进行修改的结果,此时路径经过22个点,搜索了23个点未进行修改,原程序采用的是曼哈顿距离(Manhattan distance):也就是在一个可以向四个方向移动的方向网格中采用的距离,本问题移动方向也只有四个方向,可以说采用曼哈顿距离是当前我所知道中最好的解决方法图六图六是修改成欧几里得距离的结果,对应①情况很显然,这样进行修改,使得搜索次数变多,没有修改前表现良好(同时采用sqrt函数也增加了计算时间),原因我想主要为欧几里得距离表示允许沿任何角度移动,而当前问题只有四个方向,且当前问题的地图直线距离上的障碍物太多。
图七图七对应②③情况,②:欧几里得距离乘上了移动代价D(此处设为3,多次尝试发现设为3或更大之后,搜索次数表现更好),个人理解为移动代价增大使得h(n)比重增大③:既然我们乘上了移动代价D,而且代价>3后搜索次数表现良好,为什么我们不把sqrt函数去掉,采用平方后的欧几里得距离呢?这样不是省去了平方根的耗时计算吗?我认为这样有一个很严重的问题,它会导致启发式函数的估价值过高,也就是h(n)过高,有退化成Gready Best-First-Search的危险实验二推理技术(一)实验内容对已有的产生式系统(默认的例子)进行演示,同时可以更改其规则库或(和)事实库,进行正反向推理,了解其推理过程和机制。
自己建造产生式系统(包括规则库和事实库),然后进行推理,即可以自己输入任何的规则和事实,并基于这种规则和事实进行推理。
这为学生亲手建造产生式系统并进行推理提供了一种有效的实验环境。
(二)实验思路利用已有程序”Tree.jar”,读取现有知识数据库,对默认的例子进行演示,同时改变其规则库,了解其推理过程(三)程序清单本实验不需要编程(四)运行结果说明图八①图八展示了推理成功的结果,程序进行的是逆向链接推理。
首先假设这一只动物是虎。
为了检验这个假设,根据规则,要求虎是哺乳动物,食肉动物,黄褐色且身上有黑色条纹。
那么我们首先检验这个动物是否是哺乳动物,由规则库,是哺乳动物的动物必须有毛发,或者有奶。
我们可以发现将哺乳动物替换成有毛发和有奶都无法继续执行下去。
由规则库,我们观察可知虎是哺乳动物,因此消去这一条件。
接下来只剩下了是肉食动物,是黄褐色,身上有黑色条纹。
我们都可以在规则库中发现这些子句,故可以顺利消解,生成NIL,即推理成功图九-1②图九-1展示了推理失败的结果从假设该动物是长颈鹿开始,最终无法得到结果,因为规则库没有相应子句可供消解。
图九-2图九-2展示了此时规则库中相应子句的情况,可以发现子句前有%存在使得子句无法被使用。
那么现在我们可以对规则库进行修改,使得该推理成功。
图十-1③图十-1展示了经过修改规则库后,成功的结果图十-2图十-2表示修改规则库后的情况,我们可以与图九-2对比,显然仅仅修改了“%”即可。
实验三神经网络(一)实验内容1.通过BP网络各项参数的不同设置,观察BP算法的学习效果。
观察比较BP网络拓朴结构及其它各项参数变化对于训练结果的影响。
观察并分析不同训练数据对相同拓朴结构的BP网络建模的影响。
2.编写简单的感知器训练算法,实现简单的逻辑运算(与、或)(二)实验思路1. 利用已有程序“neural.jar”,通过载入已有BP网络,观察BP算法的学习效果,比较各项参数变化对于训练结果的影响。
2.根据课上学习内容,编写简单的感知器训练算法。
(三)程序清单#include <iostream>#include <stdlib.h>using namespace std;const unsigned int nTests =4; //训练数据的数量const unsigned int nInputs =2; //输入端的数量const double alpha =0.3; //学习参数double weight1[nInputs]={0.0};double weight2[nInputs]={0.0};double b=-0.8; //阈值设为-0.8struct slp{double inputs[nInputs];double output;};//计算输出值double compute(double *inputs,double * weights,double b){double sum =0.0;for (int i = 0 ; i < nInputs; ++i){sum += weights[i]*inputs[i];}//biassum +=b;return sum;}int main(){/**正确的“与”操作,“或”操作的训练数据,也就是所谓的“target”*/slp yu[nTests] = {{0.0,0.0,0.0},{0.0,1.0,0.0},{1.0,0.0,0.0},{1.0,1.0,1.0}};slp huo[nTests] = {{0.0,0.0,0.0},{0.0,1.0,1.0},{1.0,0.0,1.0},{1.0,1.0,1.0}};bool bLearningOK = false;int count1=0;//感知器“与”操作学习算法while(!bLearningOK){bLearningOK = true;for (int i = 0 ; i < 4 ; i++){double output = compute(yu[i].inputs,weight1,b);while(output>0){weight1[0]=weight1[0]+alpha*(yu[i].output-output)*yu[i].inputs[0];weight1[1]=weight1[1]+alpha*(yu[i].output-output)*yu[i].inputs[1];output = compute(yu[i].inputs,weight1,b);count1 ++;if(count1 >500){cout<<"请重设参数"<<endl;exit(0);}}if(i==3){while(output<0){weight1[0]=weight1[0]+alpha*(yu[i].output-output)*yu[i].inputs[0];weight1[1]=weight1[1]+alpha*(yu[i].output-output)*yu[i].inputs[1];output = compute(yu[i].inputs,weight1,b);count1 ++;if(count1 >500){cout<<"请重设参数"<<endl;exit(0);}}}}}bLearningOK = false;int count2=0;//感知器“或”操作学习算法while(!bLearningOK){bLearningOK = true;//第一种情况要求小于0double output = compute(huo[0].inputs,weight2,b);while(output>=0){//cout<<output;weight2[0]=weight2[0]+alpha*(huo[0].output-output)*huo[0].inputs[0];weight2[1]=weight2[1]+alpha*(huo[0].output-output)*huo[0].inputs[1];output = compute(huo[0].inputs,weight2,b);count2 ++;if(count2 >500){cout<<"请重设参数"<<endl;exit(0);}}for (int i = 1 ; i < 4 ; i++){double output = compute(huo[i].inputs,weight2,b);while(output<0){weight2[0]=weight2[0]+alpha*(huo[i].output-output)*huo[i].inputs[0];weight2[1]=weight2[1]+alpha*(huo[i].output-output)*huo[i].inputs[1];output = compute(huo[i].inputs,weight2,b);count2 ++;if(count2 >500){cout<<"请重设参数"<<endl;exit(0);}}}}cout<<"学习数据:"<<endl;for(int w = 0 ; w < nInputs ; ++w){cout<<"yu_weight"<<w<<":"<<weight1[w] <<endl;}cout<<"\n";for (int i = 0 ;i < nTests ; ++i){cout<<"yu_rightresult:"<<yu[i].output<<"\t";cout<<"yu_caculateresult:" << compute(yu[i].inputs,weight1,b)<<endl;}for(int w = 0 ; w < nInputs ; ++w){cout<<"huo_weight"<<w<<":"<<weight2[w] <<endl;}cout<<"\n";for (int i = 0 ;i < nTests ; ++i){cout<<"huo_rightresult:"<<huo[i].output<<"\t";cout<<"huo_caculateresult:" << compute(huo[i].inputs,weight2,b)<<endl;}cout<<endl<<"学习完毕,请输入两个值:"<<endl;double test[2];cin>>test[0]>>test[1];double yu_result;double huo_result;if(compute(test,weight1,b)>0)yu_result=1;elseyu_result=0;if(compute(test,weight2,b)>0)huo_result=1;elsehuo_result=0;cout<<"与操作结果:"<<yu_result<<endl;cout<<"或操作结果:"<<huo_result<<endl;return 0;}(四)运行结果说明1.先对第一个实验内容进行说明,此处我选择了异或问题进行实验图十一①图十一展示了未经训练的情况。