不知道现在是否还有人在研究蚁群算法?应该有吧。当初为了找C或C++源代码而不可得,在阅读了多份"杂七杂八"的代码的基础,总算写出来了。运行了三个TSP经典用例,基本符合要求。2008年3月份写的,现在贴出来大家共享一下,注释加的应该算齐全。仅仅是一份按照蚁群算法的原理写的代码,没有做任何优化。至于我做优化后的代码,就不发出来了吧,呵呵。环境为:Windows XP SP2 + VC 6.0.
- /*********************************
- *作者:陈杰
- *单位:四川大学计算机学院
- *邮件地址:scucj@126.com
- *完成时间:2008年3月
- *********************************/
- #include<iostream>
- #include<math.h>
- #include<time.h>
- using namespace std;
- //该程序是以蚁群系统为模型写的蚁群算法程序(强调:非蚂蚁周模型),以三个著名的TSP问题为测试对象
- //通过微调参数,都可以获得较好的解
- /*
- //----------(1)问题一:Oliver 30 城市 TSP 问题 best_length = 423.7406; ------------------------
- //该程序最好的结果是423.741,可运行多次获得
- //城市节点数目
- #define N 30
- //城市坐标
- double C[N][2]={
- {2,99},{4,50},{7,64},{13,40},{18,54},{18,40},{22,60},{24,42},{25,62},{25,38},
- {37,84},{41,94},{41,26},{44,35},{45,21},{54,67},{54,62},{58,35},{58,69},{62,32},
- {64,60},{68,58},{71,44},{71,71},{74,78},{82,7},{83,46},{83,69},{87,76},{91,38}
- };
- //----------上面参数是固定的,下面的参数是可变的-----------
- //蚂蚁数量
- #define M 30
- //最大循环次数NcMax
- int NcMax = 500;
- //信息启发因子,期望启发式因子,全局信息素挥发参数,局部信息素挥发参数, 状态转移公式中的q0
- double alpha = 2, beta = 3, rou = 0.1, alpha1 = 0.1, qzero = 0.01;
- //-----------问题一结束------------------------------------------------------------------------
- */
- /*
- //----------(2)问题二:Elion50 城市 TSP 问题 best_length = 427.96; ----------------------------
- //该程序最好的结果是428.468,可运行多次获得
- //城市节点数目
- #define N 50