1、人工智能实验报告实验三 基于人工神经网络算法解旅行商问题计算机系 20051302353 蔡佳佳【实验名称】基于人工神经网络算法解旅行商问题【实验内容】使用 HOPFILED网络模型求解对称旅行商问题,以获得旅行商问题的近似最优解。【实验原理】(一)人工神经网络算法的概念和原理人工神经网络简称”神经网络” ,是由大量简单的处理单元神经元(Neuron)相互连接组成的自适应非线性动态系统,用来模拟大脑神经网络的结构和功能。自上世纪八十年代开始,人工神经网络的研究再次出现热潮,其模型算法等基本理论已经有了深入的发展,并作为新一代神经计算模型广泛应用于各前沿科学领域。人工神经网络通过有效学习,可以完
2、成其它方法无法完成的特定任务,且具有自组织、自适应性以及较强的鲁棒性。人工神经网络总结人脑中神经元的一些基本特征,通过数学的描述和结构方法模拟消息传递、处理、学习的过程。神经网络模型有许多种,其中上世纪八十年代提出的 HOPFIELD模型影响比较深远。HOPFIELD模型属于反馈型神经网络,连续的 HOPFIELD神经网络可以用动力学方程描述,且具有性质:1 神经元是一个输入输出变换器,其传输函数有sigmoid函数特性;2 具有代表产生动作电位的神经元和代表按渐近方式工作的神经元的能力;3 细胞膜具有时空整合作用;4 神经元之间存在着兴奋型和抑制型连接。HNN 的能量函数是一个随时间增长而递
3、减的函数,网络的平稳点就是 E(t)的极小值点。该网络大但具有良好的收敛性,即网络可以从任意非平衡轨迹出发,最后收敛于某个平衡状态;而且有有限个平衡点,而且如果这些平衡点是稳定的,那么网络一定是渐近稳定的;此外,渐近网络平衡点是网络能量函数极小点,网络信息存储在神经元之间连接权中,网络以大规模非线性连续时间并行方式处理信息,其计算时间就是系统趋于平衡点的时间。Hopfield网络是单层对称全反馈网络,根据其激活函数的选取不同,可分为离散型的 Hopfield网络(Discrete Hopfield Neural Network,简称 DHNN)和连续型的 Hopfield网络(Continuo
4、us Hopfield Neural Network,简称 CHNN)。人工智能实验报告离散 Hopfield网络的激活函数为二值型的,其输入、输出为0,1的反馈网络,主要用于联想记忆。 连续 Hopfield网络的激活函数的输入与输出之间的关系为连续可微的单调上升函数,主要用于优化计算。Hopfield 网络是利用稳定吸引子来对信息进行储存的,利用从初始状态到稳定吸引子的运行过程来实 现对信息的联想 存取的。HOPFIELD模型中每个神经元是用运放电路实现的。由推导出:f()函数通常采用单调递增的 S型函数(二)TSP 问题及其目前发展情况TSP问题,即旅行商问题( Traveling Sa
5、lesman Problem ) ,其定义如下:已知在一幅地图上存在着 k个城市 N1,.N 2,N 3,N k,其中任意两个城市之间可能存在也可能不存在直接路径,若存在,则旅行商在该路径上的花费已知。旅行商从某一个城市出发,希望找到一条可以经过所有城市(每个城市只经过一次)并可以回到起点的路径来推销自己的商品,并以使行程途中总花费最少为目标。而 TSP问题又分为对称 TSP问题和非对称 TSP问题。若 Ni城和 Nj城之间存在着不经过其他城市的路径(0i,jk),而旅行商在该路径上的花费与旅行起点、终点的选择无关时,这种 TSP问题称为对称 TSP问题;反之,若该花费与起点、终点的选择有关,
6、即从 Ni到 Nj与从 Nj到 Ni的花费不同,则称为非对称 TSP问题。本实验的研究对象是对称 TSP问题,非对称 TSP问题的解决与对称 TSP问题的解决原理上是一样的,不过在计算量和存储空间的会比前者占用更多一些。下面从图论的角度来理解对称 TSP问题:假设有一个图 G=(V,E) ,其中 V是顶点集,E 是边集,设 d=(dij)是由顶点 i和顶点 j之间的距离 dij所组成的距离矩阵,旅行商问题就是求出一条通过人工智能实验报告所有顶点且每个顶点只通过一次的具有最短距离的回路。其中对称 TSP问题中总有 dij=dji(任意 i,j=1,2,3,,n)成立。而非对称 TSP问题中 di
7、jd ji(任意 i,j=1,2,3,,n) 。若对于城市 V=v1,v2,v3,vn的一个访问顺序为 T=(t1,t2,t3,ti,tn),其中 tiV(i=1,2,3,n),且记 tn+1= t1,则旅行商问题的数学模型为:min L =d(t(i),t(i+1)(i=1,n) 。旅行商问题是一个典型的组合优化问题,并且是一个 NP困难问题,其可能的路径数目与城市数目 n是成指数型增长的,所以一般很难精确地求出其最优解。TSP问题从被提出至今,已经有许许多多人用种种方法对其求解,以下是目前常见的几种求解方法:1启发式算法环路构造算法和环路改进算法:前者提出了在环路构造中成批加入顶点,同时在
8、构造过程对环路进行局部优化的思想。后者,在分析局部最优解与全局最优解之间关系的基础上,提出了另一个采用局部最优解的交集作为初始环路的新算法。2分支定界法(branch /* select city position */void sinit(); /* select initial neural states */void cstates() ; /* calculate neural states */void dstates(); /* display neural states */int recheck(); int m=15;int tm, aa;clock_t start0,fin
9、ish0;/计时double vNN, /* neuron output*/v114000, uNN, /* neurons input */ddNN, /* traverlling distance */ tNN,xxN, yyN, /* coordinate of cities */ e, /* energy */f, sub=0.00001;double a=0.5, b=0.500,c=0.200, d=0.5,u0=0.03, h=0.05,lNN, pi=3.1415926;int right=0;int wrong=0;double bestd;FILE *fp,*fopen()
10、;void main()int i; double f1;fp=fopen(“result.txt“,“w“); i=0;bestd=1000; /预置一批 S型激励函数值,以留作后面使用f1=0-0.07; do i+;f1+=sub; v1i=G(f1); while(v1i 13907) vi=v113907;if(i11 if(i11 / fprintf(fp,“distance = %f n“,dis);/ cout0.01) /* every column have and only have one 1*/ for(i=0;i0.1) return 0; return 1; /*end*/