西电人工智能大作业(共14页).doc
精选优质文档-倾情为你奉上人工智能及其应用大作业邹旭苗王 欣 八数码难题一、 实验名称八数码难题的启发式搜索二、 实验目的八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。要求:1.熟悉人工智能系统中的问题求解过程;2.熟悉状态空间的启发式搜索算法的应用;3.熟悉对八数码问题的建模、求解及编程语言的应用。三、 实验设备及软件环境1. 实验编程工具:VC+ 6.02. 实验环境:Windows7 64位四、 实验方法:启发式搜索1.算法描述1. 将S放入open表,计算估价函数f(s)2. 判断open表是否为空,若为空则搜索失败,否则,将open表中的第一个元素加入close表并对其进行扩展(每次扩展后加入open表中的元素按照代价的大小从小到大排序,找到代价最小的节点进行扩展)注:代价的计算公式f(n)=d(n)+w(n).其中f(n)为总代价,d(n)为节点的度,w(n)用来计算节点中错放棋子的个数。判断i是否为目标节点,是则成功,否则拓展i,计算后续节点f(j),利用f(j)对open表重新排序2.算法流程图:3.程序源代码:# include<stdio.h># include<string.h># include<malloc.h># include<stdlib.h>typedef struct node int i,cost,degree,exp,father;int a33;struct node *bef,*late;struct node *son;treenode;int flag=0,count=1,num=0,i=0;void set(treenode *s);void cpynode(treenode *s1,treenode *s2);void add1(treenode *s,treenode *open);void adjust1(treenode *close);void jscost(treenode *s);void tiaozheng(treenode *open);void sortopen(treenode *open);int test(treenode *s1,treenode *s2);void position(treenode *s,treenode *open,treenode *close,treenode *s1);void printstr(treenode *open);int search(treenode *s1,treenode *s2);void input(treenode *s);int cmpnode(treenode *s1,treenode *s2);void print(treenode *s);void add(treenode *s,treenode *close);void xuhao(treenode *s);void extend(treenode *r1,treenode *s,treenode *s1,treenode *open,treenode *close);void main() treenode *s0,*s1,*s;treenode *open,*close,*opend,*closed;open=(treenode*)malloc(sizeof(treenode);close=(treenode*)malloc(sizeof(treenode); open->late=NULL;close->late=NULL;opend=open;closed=close;s0=(treenode*)malloc(sizeof(treenode);set (s0);s1=(treenode*)malloc(sizeof(treenode);set(s1);printf("请输入八数码的初始状态:(以空格为分隔)n");input (s0);printf("请输入八数码的目标状态 :(以空格为分隔)n");input(s1);xuhao(s0);add (s0,opend);while(open->late!=NULL && flag=0)s=(treenode*)malloc(sizeof(treenode); cpynode(s,open->late);open=open->late;add(s,close);if(test(s,s1)=0)flag=1;elseposition(s,open,close,s1);sortopen(open);if(open->late!=NULL) printf("搜索过程如下:n "); adjust1(close);printstr(close);printf("n%d 步,%d 个节点n",num,count);else printf("查找错误 ! n"); void set(treenode *s) s->i=i;s->father=0;s->degree=0;s->bef=NULL;s->son=NULL;s->late=NULL; ;void input(treenode *s) int j,k;for(j=0;j<3;j+)for(k=0;k<3;k+)scanf("%d",&s->ajk); ;int cmpnode(treenode *s1,treenode *s2)int j,k;for(j=0;j<3;j+)for(k=0;k<3;k+) if(s1->ajk!=s2->ajk)return 0; ;return 1; int test(treenode *s1,treenode *s2) int j,k,n=0;for(j=0;j<3;j+)for(k=0;k<3;k+) if(s1->ajk!=s2->ajk)n+; ;s1->exp=n;return n; ;void xuhao(treenode *s) i+;s->i=i; void cpynode(treenode *s1,treenode *s2) int j,k;for(j=0;j<3;j+)for(k=0;k<3;k+)s1->ajk=s2->ajk;s1->bef=s2->bef;s1->cost=s2->cost;s1->exp=s2->exp;s1->degree=s2->degree;s1->i=s2->i;s1->father=s2->father; ;void print(treenode *s) int j,k;for(j=0;j<3;j+) for(k=0;k<3;k+) printf("%2d",s->ajk); if(j=1) printf(" n=%2d d=%2d f=%2d",s->i,s->degree,s->father);printf("n"); printf("n"); void position(treenode *s,treenode *open,treenode *close,treenode *s1) int m,n,t,k;treenode *r1;for(m=0;m<3;m+) for(n=0;n<3;n+) k=s->amn;if(k=0)break; ;if(k=0) break; if(m+1<=2&&flag=0)r1=(treenode*)malloc(sizeof(treenode); cpynode(r1,s);t=r1->am+1n; r1->am+1n = r1->amn; r1->amn=t;extend(r1,s,s1,open,close); ;if(m-1>=0&&flag=0)r1=(treenode*)malloc(sizeof(treenode); cpynode(r1,s);t=r1->am-1n; r1->am-1n=r1->amn; r1->amn=t;extend(r1,s,s1,open,close);if(n-1>=0 && flag=0) r1=(treenode*)malloc(sizeof(treenode); cpynode(r1,s);t=r1->amn-1; r1->amn-1=r1->amn; r1->amn=t;extend(r1,s,s1,open,close); ;if(n+1<=2 && flag=0) r1=(treenode*)malloc(sizeof(treenode); cpynode(r1,s);t=r1->amn+1; r1->amn+1=r1->amn; r1->amn=t;extend(r1,s,s1,open,close); void printstr(treenode *s) treenode *t;t=s->late;while(t!=NULL) num+;print(t);t=t->son; ; void extend(treenode *r1,treenode *s,treenode *s1,treenode *open,treenode *close) r1->father=s->i;r1->degree=s->degree+1;if(test(r1,s1)!=0) jscost(r1);if(search(r1,close)=1 && search(r1,open)=1) xuhao(r1);add1(r1,open);r1->bef=s;count+; else free(r1); else xuhao(r1);jscost(r1);count+;add(r1,close);r1->bef=s;flag=1; int search(treenode *s1,treenode *close) treenode *r,*t;r=s1;t=close->late;while(t!=NULL) if(r->exp=t->exp) if(cmpnode(r,t)=1)return 0; ;t=t->late; ; return 1; void add(treenode *s,treenode *close) treenode *r,*t;t=s;r=close;while(r->late!=NULL)r=r->late;r->late=t;t->late=NULL; void add1(treenode *s,treenode *open)treenode *t;t=open;s->late=t->late;t->late=s; void adjust1(treenode *close) treenode *s,*t;s=close;s->late->bef=NULL;while(s->late!=NULL)s=s->late;s->son=NULL;while(s->bef!=NULL)t=s->bef;t->son=s;s=s->bef; ; void jscost(treenode *s) s->cost=(s->exp)+s->degree; void sortopen(treenode *open) treenode *t,*s,*r;int k;r=(treenode*)malloc(sizeof(treenode);t=open->late;while(t!=NULL && t->late!=NULL) s=t->late;k=t->cost;while(s!=NULL) if(k > s->cost) k=s->cost;cpynode(r,t);cpynode(t,s);cpynode(s,r); s=s->late; t=t->late; ; 五、 实验结果:1.程序截图2.搜索过程请输入八数码的初始状态:(以空格为分隔)2 8 31 0 47 6 5请输入八数码的目标状态 :(以空格为分隔)1 2 38 0 47 6 5搜索过程如下: 2 8 3 1 0 4 n= 1 d= 0 f= 0 7 6 5 2 0 3 1 8 4 n= 3 d= 1 f= 1 7 6 5 0 2 3 1 8 4 n= 8 d= 2 f= 3 7 6 5 1 2 3 0 8 4 n=10 d= 3 f= 8 7 6 5 1 2 3 8 0 4 n=12 d= 4 f=10 7 6 55 步,12 个节点Press any key to continue 六、 实验分析:在进行搜索的过程中,同时记录了扩展新节点的个数。启发式搜索仅扩展12个新节点。可见,在本实验中启发式搜索更优,效率更高。而在求解最短路径的问题上盲目搜索能更高效一点。在实际的应用中应根据具体情况灵活选择不同的策略,提高程序执行效率启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无谓的搜索路径,提高了效率。七、 结论此次实验用启发式搜索方法求解问题的使用,让我们明白了具体问题具体分析,更明白了算法的重要,好的算法能够极大的提高程序的运行效率。同时,通过此次实践,也对课本知识有了更深刻的认识和体会,真正将课本知识融于实践中是对我们的最大考验。这次试验让我更加深入了解了什么是人工智能,让我了解了人工智能的作用以及含义和人工智能的使用范围以及对于我们未来生活得作用的广大。用机器语言解决实际问题的,提高了动手能力。使用动态神经网络预测太阳能和风能数据架构的微电网 文摘- 鼓励使用可再生能源由于快速减少传统不可再生能源。然而,寻找新的安装网站发电和传输变得越来越困难。在电力系统需要更大的灵活性导致了发电的一个新概念微电网。微电网的定义是一个集成的动力输送系统组成的相互联系的加载,存储设施和分布式发电主要由可再生能源。介绍了微电网整体的动态模型在MATLAB仿真软件模拟和动态神经网络的适用性为太阳能和风力发电预测数据架构。总的来说,三种架构被提出,即集中时间延迟神经网络,分布式时间延迟神经网络和非线性自回归神经网络。实验结果表明,提出的网络实现一个可接受的预测的准确性。比较而言,预测的准确性最高达到分布式时间延迟神经网络。 关键词-分布式能源资源、分布式发电、动态神经网络,MATLAB,微电网仿真软件 一、介绍 分布式发电(DG)是一种新兴的趋势在本地发电配电电压水平通过使用天然气等可再生能源,沼气,风力发电,太阳能光伏电池,燃料电池,结合热力和电力(CHP)系统,micro-turbines,斯特林发动机和将它们集成到工具分销网络1。使用的能源是称为分布式能源资源(各级)或微型电源2。通常对产品进行模块化单位广为分布的小容量。这些通常是位于靠近加载3。各级微型电网是小规模的供应网络组成的可再生能源发电在配电电压集成在一起。确保灵活性操作作为一个聚合体系和维护指定的电能质量和能量输出是由电力电子接口(PEIs)和控制内置微型电源2。在过去的几年中,许多研究尝试了微电网建模和预测可再生发电数据。在4中,混合动力系统可以作为独立的系统或电网连接系统通过使用光伏系统结合高速微型涡轮进行了研究。在5,MATLAB仿真软件模型加州理工可持续电力电子资源(超级)系统设计。在6、光伏电池、微型涡轮风力涡轮机块建模和组合起来形成一个微型电网。这样一个系统的瞬态和稳态行为变化的输入进行了研究。在7,适用性提前24小时太阳能发电的人工神经网络预测20 kW的光伏系统适合一个可靠的微电网能量管理进行了研究。在8,提出了一种模型提前24小时预报的风速和风力发电机的输出功率使用人工神经网络(ANN)的反向传播算法。9,递归神经网络(RNN)提出了风速预测并与前馈神经网络(FNN)。其他一些模型用于短期预测是径向基函数、支持向量机、模糊模型和ARMA模型10。 六、结论 微电网在MATLAB仿真软件模拟模型及其动态行为进行了研究。动态神经网络结构被用于风速预测和太阳能电池板电压预测。分布式时间延迟神经网络给出了最好的预测的准确性对风能和太阳能系统由于动态反向传播。在风电系统中,所获得的最高精确度是99.84%单层有25个神经元在太阳系,所获得的最高精确度是99.97%单层有10个神经元。微电网模型模拟可以用来探索微型电网的各种操作模式,即坐落和电网连接。模型可以提供不同类型的用户和修改负载。广泛的载荷分析和成本可以应用于微型电网调度技术。总结神经网络可以分为动态和静态类别。静态(前馈)网络没有反馈元素和不包含延迟直接从输入输出计算通过前馈连接。然而,在动态网络,输出不仅取决于当前的输入网络,但也对当前或之前的输入、输出,或国家的网络。动态神经网络是指在应用过程中能够改变网络的权值和阈值也能改变网络的结构即输入层、隐含层和输出层的节点数。动态网络的训练非常类似于静态前馈网络的训练。集中时滞神经网络(FTDNN)由一个前馈网络在输入抽头延迟线。在这种类型的网络,动态仅出现在一个静态的输入层多层前馈网络。这个网络是适合时间序列预测。各级微电网是小规模的供应网络组成的可再生能源发电在配电电压集成在一起。确保灵活性操作作为一个聚合体系和维护指定的电能质量和能量输出是由电力电子接口(PEIs)和控制内置微电网。分布式时间延迟神经网络给出了最好的预测的准确性对风能和太阳能系统由于动态反向传播。人工智能是对人类智能的一种模拟和扩展,其核心是思维模拟人工智能致力于用计算机语言描述人的智能,并用计算机加以实现。人工智能试图且已经给计算机施加了一个模拟人类智能的程序,该程序包括知道这个系统本身的过程,然后给系统以一定任务,它就会产生行为,这说明人工智能是确实的、得到证实的。人工神经网络是在研究人脑的奥秘中得到启发,试图用大量的处理单元(人工神经元、处理元件、电子元件等)模仿人脑神经系统工程结构和工作机理。在人工神经网络中,信息的处理是由神经元之间的相互作用来实现的,知识与信息的存储表现为网络元件互连间分布式的物理联系,网络的学习和识别取决于和神经元连接权值的动态演化过程。专心-专注-专业