// AO.cpp : 定义控制台应用程序的入口点。 #pragma once
#include
const double ALPHA=1.0; //启发因子,信息素的重要程度 const double BETA=2.0; //期望因子,城市间距离的重要程度 const double ROU=0.5; //信息素残留参数
const int N_ANT_COUNT=34; //蚂蚁数量 const int N_IT_COUNT=1000; //迭代次数 const int N_CITY_COUNT=51; //城市数量
const double DBQ=100.0; //总的信息素
const double DB_MAX=10e9; //一个标志数,10的9次方
double g_Trial[N_CITY_COUNT][N_CITY_COUNT]; //两两城市间信息素,就是环境信息素
double g_Distance[N_CITY_COUNT][N_CITY_COUNT]; //两两城市间距离
//eil51.tsp城市坐标数据 double x_Ary[N_CITY_COUNT]= {
37,49,52,20,40,21,17,31,52,51, 42,31,5,12,36,52,27,17,13,57,
62,42,16,8,7,27,30,43,58,58, 37,38,46,61,62,63,32,45,59,5, 10,21,5,30,39,32,25,25,48,56, 30 };
double y_Ary[N_CITY_COUNT]= {
52,49,64,26,30,47,63,62,33,21, 41,32,25,42,16,41,23,33,13,58, 42,57,57,52,38,68,48,67,48,27, 69,46,10,33,63,69,22,35,15,6, 17,10,64,15,10,39,32,55,28,37, 40 };
//返回指定范围内的随机整数 int rnd(int nLow,int nUpper) {
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)); }
//定义蚂蚁类 class CAnt { public: CAnt(void); ~CAnt(void); public:
int m_nPath[N_CITY_COUNT]; //蚂蚁走的路径 double m_dbPathLength; //蚂蚁走过的路径长度
int m_nAllowedCity[N_CITY_COUNT]; //没去过的城市 int m_nCurCityNo; //当前所在城市编号 int m_nMovedCityCount; //已经去过的城市数量 public:
int ChooseNextCity(); //选择下一个城市 void Init(); //初始化
void Move(); //蚂蚁在城市间移动
void Search(); //搜索路径
void CalPathLength(); //计算蚂蚁走过的路径长度 };
//构造函数 CAnt::CAnt(void) { }
//析构函数 CAnt::~CAnt(void) { }
//初始化函数,蚂蚁搜索前调用 void CAnt::Init() {
for (int i=0;i m_nAllowedCity[i]=1; //设置全部城市为没有去过 m_nPath[i]=0; //蚂蚁走的路径全部设置为0 } //蚂蚁走过的路径长度设置为0 m_dbPathLength=0.0;
相关推荐: