int n=0;
for (int i=0;i for (int j=1;j m=m_cAntAry[i].m_nPath[j]; n=m_cAntAry[i].m_nPath[j-1]; dbTempAry[n][m]=dbTempAry[n][m]+DBQ/m_cAntAry[i].m_dbPathLength; dbTempAry[m][n]=dbTempAry[n][m]; } //最后城市和开始城市之间的信息素 n=m_cAntAry[i].m_nPath[0]; dbTempAry[n][m]=dbTempAry[n][m]+DBQ/m_cAntAry[i].m_dbPathLength; dbTempAry[m][n]=dbTempAry[n][m]; } //================================================================== //更新环境信息素 for (int i=0;i for (int j=0;j g_Trial[i][j]=g_Trial[i][j]*ROU+dbTempAry[i][j]; //最新的环境信息素 = 留存的信息素 + 新留下的信息素 } } } void CTsp::Search() { char cBuf[256]; //打印信息用 //在迭代次数内进行循环 for (int i=0;i //每只蚂蚁搜索一遍 for (int j=0;j m_cAntAry[j].Search(); } //保存最佳结果 for (int j=0;j if (m_cAntAry[j].m_dbPathLength < m_cBestAnt.m_dbPathLength) { m_cBestAnt=m_cAntAry[j]; } } //更新环境信息素 UpdateTrial(); //输出目前为止找到的最优路径的长度 sprintf(cBuf,\ printf(cBuf); } } int main() { //用当前时间点初始化随机种子,防止每次运行的结果都相同 time_t tm; time(&tm); unsigned int nSeed=(unsigned int)tm; srand(nSeed); //开始搜索 CTsp tsp; tsp.InitData(); //初始化 tsp.Search(); //开始搜索 //输出结果 printf(\ char cBuf[128]; for (int i=0;i sprintf(cBuf,\ if (i % 20 == 0) { printf(\ } printf(cBuf); } printf(\ getchar(); return 0; }
相关推荐: