蚁群算法c语言_第1页
蚁群算法c语言_第2页
蚁群算法c语言_第3页
蚁群算法c语言_第4页
蚁群算法c语言_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

蚁群算法(C语言实现).en/s/blog6bblb4b001016pt0.html'这是我2012年第一个学期的期末大作业。不得不说这段代码参考了网络上的一些代码,以及书本上的一些相关数据。但是无论是网络上还是书上难免总是有很多C++的影子,这是我自己理解之后用C编写的蚁群算法的代码。这几个城市的相关测试数据在CSDN上可以找到。//蚁群算法关于简单的TSP问题求解//#include〈stdio.h〉#include〈stdlib.h〉#include〈string.h〉#include〈math.h〉#include〈time.h>#defineM13//蚂蚁的数量#defineN144//城市的数量#defineR1000//迭代次数#defineIN1 //初始化的信息素的量#defineMAX0x7fffffff//定义最大值structcoordinate{charcity[15]; //城市名intx; //城市相对横坐标inty; //城市相对纵坐标}coords[N];doublegraph[N][N]; //储存城市之间的距离的邻接矩阵自己到自己记作MAXdoublephe[N][N];//每条路径上的信息素的量doubleadd[N][N];//代表相应路径上的信息素的增量doubleyita[N][N];//启发函数,yita[i][j]=l/graph[i][j]intvis[M][N];//标记已经走过的城市intmap[M][N];//map[K][N]记录第K只蚂蚁走的路线doublesolution[M];//记录某次循环中每只蚂蚁走的路线的距离intbestway[N];//记录最近的那条路线doublebestsolution二MAX;intNcMax;//代表迭代次数,理论上迭代次数越多所求的解更接近最优解,最具有说服力doublealpha,betra,rou,Q;voidInitialize();//信息初始化voidInputcoords(FILE*fp);//将文件中的坐标信息读入voidGreateGraph();//根据坐标信息建图doubleDistance(int*p);//计算蚂蚁所走的路线的总长度voidResult();//将结果保存到out.txt中voidInitialize(){

{d+二graph[*(p+i)][*(p+i+l)];}d+=graph[*(p+i)][*(p)];returnd;}voidResult(){FILE*fl;inti;fl=fopen("out.txt","a"); //将结果保存在out.txt这个文件里面fprintf(fl,"%s\n","本次算法中的各参数如下:");fprintf(fl,"alpha=%.3lf,betra=%.3lf,rou=%.3lf,Q=%.3lf\n",alpha,betra,rou,Q);fprintf(fl,"%s%d\n","本次算法迭代次数为:",NcMax);fprintf(fl,"%s%.4lf\n","本算法得出的最短路径长度为:",bestsolution);fprintf(fl,"%s\n","本算法求得的最短路径为:");for(i=0;i<N;++i)fprintf(fl,"%sf",coords[bestway[i]].city);fprintf(fl,"%s",coords[bestway[0]].city);fprintf(fl,"\n\n\n");fclose(fl);return;

memset(map,T,sizeof(map));//把蚂蚁走的路线置空memset(vis,0,sizeof(vis));//O表示未访问,1表示已访问srand(time(NULL));while(NC++〈二NcMax){for(k=0;k〈M;++k){map[k][O]=(k+NC)%N;//给每只蚂蚁分配一个起点,并且保证起点在N个城市里vis[k][map[k][O]]=1;//将起点标记为已经访问}s=1;while(s<N){for(k=0;k〈M;++k){psum=O;for(j=0;j〈N;++j){if(vis[k][j]==O){psum+二pow(phe[map[k][sT]][j],alpha)*pow(yita[map[k][sT]][j],betra);}}drand=(double)(rand()POO);drand/=5000.0; //生成一个小于1的随机数pro=0;for(j=0;j〈N;++j){if(vis[k][j]==O)pro+二pow(phe[map[k][sT]][j],alpha)*pow(yita[map[k][sT]][j],betra)/psum;if(pro〉drand)break;}vis[k][j]=1; //将走过的城市标记起来map[k][s]=j;//记录城市的顺序}s++;}memset(add,0,sizeof(add));for(k=0;k<M;++k) //计算本次中的最短路径//{solution[k]二Distance(map[k]);//蚂蚁k所走的路线的总长度if(solution[k]〈bestsolution){bestsolution=sol

温馨提示

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

评论

0/150

提交评论