//如果蚂蚁去过的城市数量小于城市数量,就继续移动 while (m_nMovedCityCount < N_CITY_COUNT) {
Move(); }
//完成搜索后计算走过的路径长度 CalPathLength(); }
//计算蚂蚁走过的路径长度 void CAnt::CalPathLength() {
m_dbPathLength=0.0; //先把路径长度置0 int m=0; int n=0;
for (int i=1;i m=m_nPath[i]; n=m_nPath[i-1]; m_dbPathLength=m_dbPathLength+g_Distance[m][n]; } //加上从最后城市返回出发城市的距离 n=m_nPath[0]; m_dbPathLength=m_dbPathLength+g_Distance[m][n]; } //tsp类 class CTsp { public: CTsp(void); ~CTsp(void); public: CAnt m_cAntAry[N_ANT_COUNT]; //蚂蚁数组 CAnt m_cBestAnt; //定义一个蚂蚁变量,用来保存搜索过程中的最优结果 //该蚂蚁不参与搜索,只是用来保存最优结果 public: //初始化数据 void InitData(); //开始搜索 void Search(); //更新环境信息素 void UpdateTrial(); }; //构造函数 CTsp::CTsp(void) { } CTsp::~CTsp(void) { } //初始化数据 void CTsp::InitData() { //先把最优蚂蚁的路径长度设置成一个很大的值 m_cBestAnt.m_dbPathLength=DB_MAX; //计算两两城市间距离 double dbTemp=0.0; for (int i=0;i for (int j=0;j dbTemp=(x_Ary[i]-x_Ary[j])*(x_Ary[i]-x_Ary[j])+(y_Ary[i]-y_Ary[j])*(y_Ary[i]-y_Ary[j]); dbTemp=pow(dbTemp,0.5); g_Distance[i][j]=ROUND(dbTemp); } } //初始化环境信息素,先把城市间的信息素设置成一样 //这里设置成1.0,设置成多少对结果影响不是太大,对算法收敛速度有些影响 for (int i=0;i for (int j=0;j g_Trial[i][j]=1.0; } } } //更新环境信息素 void CTsp::UpdateTrial() { //临时数组,保存各只蚂蚁在两两城市间新留下的信息素 double dbTempAry[N_CITY_COUNT][N_CITY_COUNT]; memset(dbTempAry,0,sizeof(dbTempAry)); //先全部设置为0 //计算新增加的信息素,保存到临时数组里 int m=0;
相关推荐: