蚁群算法解决TSP问题(共8页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《蚁群算法解决TSP问题(共8页).doc》由会员分享,可在线阅读,更多相关《蚁群算法解决TSP问题(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上蚁群算法解决TSP问题一、论述1、算法来源蚁群算法的基本原理来源于自然界蚂蚁觅食的最短路径原理,根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发生变化(如原有路径上有了障碍物)后,自适应地搜索新的最佳路径。2、单个蚂蚁寻找路径正反馈:单个的蚂蚁为了避免自己迷路,它在爬行时,同时也会释放一种特殊的分泌物信息素(Pheromone),而且它也能觉察到一定范围内的其它蚂蚁所分泌的信息素,并由此影响它自己的行为。当一条路上的信息素越来越多(当然,随着时间的推移会逐渐减弱),后来的蚂蚁选择这条路径的概
2、率也就越来越大,从而进一步增加了该路径的信息素浓度,这种选择过程称为蚂蚁的自催化过程。多样性:同时为了保证蚂蚁在觅食的时候不至走进死胡同而无限循环,蚂蚁在寻找路径的过程中,需要有一定的随机性,虽然在觅食的过程中会根据信息素的浓度去觅食,但是有时候也有判断不准,环境影响等其他很多种情况,还有最终要的一点就是当前信息素浓度大的路径并不一定是最短的路径,需要不断的去修正,多样性保证了系统的创新能力。正是这两点小心翼翼的巧妙结合才使得蚁群的智能行为涌现出来。3、具体实现需要解决的两个首要问题(1)如何实现单个蚂蚁寻路的过程(2)如何实现信息素浓度的更新二、具体实现代码如下所示:cpp view pla
3、in copy 在CODE上查看代码片派生到我的代码片#include #include #include #include #include #include #include #include using namespace std; /* int CityPos102= 87,7,91,38,83,46,71,44,64,60,68,58,83,69, 87,76,74,78,71,71 ; /10个城市的坐标*/ unsigned seed=(unsigned)time(0);/原型:void srand(unsigned seed); /30个城市的坐标 int CityPos302
4、=87,7,91,38,83,46,71,44,64,60,68,58,83,69,87,76,74,78,71,71,58,69,54,62,51,67,37,84,41,94,2,99,7,64,22,60,25,62,18,54,4,50,13,40,18,40,24,42,25,38,41,26,45,21,44,35,58,35,62,32; #define CITY_NUM 30 /城市数量 #define ANT_NUM 30 /蚁群数量 #define TMAC 1000 /迭代最大次数 #define ROU 0.5 /误差大小 #define ALPHA 1 / 信息素重要
5、程度的参数 #define BETA 4 / 启发式因子重要程度的参数 #define Q 100 /信息素残留参数 const int maxn = 100; double dismaxnmaxn; /距离 double infomaxnmaxn; /信息素矩阵 double ECITY_NUMCITY_NUM; /启发因子矩阵 int visCITY_NUMCITY_NUM; double Bestlength; double ansCITY_NUM; const double mmax = 10e9; /返回指定范围内的随机整数 int rnd(int nLow,int nUpper)
6、return nLow+(nUpper-nLow)*rand()/(RAND_MAX+1); /返回指定范围内的随机浮点数 double rnd(double dbLow,double dbUpper) double dbTemp=rand()/(double)RAND_MAX+1.0); return dbLow+dbTemp*(dbUpper-dbLow); /返回浮点数四舍五入取整后的浮点数 double ROUND(double dbA) return (double)(int)(dbA+0.5); struct Ant int PathCITY_NUM; /蚂蚁走的路径 double
7、 length; /路径总长度 int visCITY_NUM; /走过城市标记 int cur_cityno; /当前城市 int moved_cnt; /已走的数量 /初始化 void Init() memset(vis, 0, sizeof(vis); length = 0; cur_cityno = rnd(0, CITY_NUM);/随机选择一个出发城市 Path0 = cur_cityno; viscur_cityno = 1; moved_cnt = 1; /printf(Init %d n, cur_cityno); /选择下一个城市 /返回值 为城市编号 int choose
8、NextCity() int nSelectedCity=-1; /返回结果,先暂时把其设置为-1 /计算当前城市和没去过的城市之间的信息素总和 double dbTotal=0.0; double probCITY_NUM; /保存各个城市被选中的概率 for(int i = 0; i 0.0) /总的信息素值大于0 dbTemp = rnd(0.0, dbTotal); for (int i = 0; i CITY_NUM; i+) if (!visi) dbTemp -= probi; if (dbTemp 0.0) nSelectedCity = i; break; /如果城市间的信息
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 解决 TSP 问题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内