蛙跳算法 解决tsp 问题 #include #include #include #include #include #define CITY_NUM 50 //城市编号是0~CITY_NUM-1 #define All_Frog 10*CITY_NUM //青蛙总数 #define MEM_NUM 10 //每个族群的青蛙个数 #define SUB_NUM CITY_NUM //族群数 #define ITER 1000 //迭代次数 //#define LOC_ITER MEM_NUM//局部搜索迭代次数 #define BEST_DIS 427//已知最优解 #define ER_LIM 1 //#define ITER_MAX 500 class City //城市类 { public: City(int x=0, int y=0) { this->x=x; this->y=y; } public: //城市坐标 int x; int y; };City CityPos[CITY_NUM]; class Frog //每只Frog代表一个可行解 { public: // Forg(const Frog &f) ; //复制构造函数 double caldistance(); //计算可行解旅行长度 void Init(); void GuoTao(); //初始化Frog bool Study(Frog best); //每个青蛙向 best 学习 逼近 public: int trace[CITY_NUM]; //表示一个可行解 (旅行方案 ) double distance; //可行解长度 }; class Fswarm //蛙群 { public: Frog f[All_Frog]; //蛙群中所有青蛙 Frog subgroup[MEM_NUM][SUB_NUM]; //将蛙群分为SUB_NUM个子族群 //每个子族群有MEM_NUM个青蛙 Frog gBest; //蛙群中位置最好的青蛙 public: void InitPop(); //初始化蛙群 void Sort(); //将青蛙按适应度排序 void Partition(); //将蛙群分组 放在数组中,共有SUB_NUM组 每组MEM_NUM个青蛙 void Gather(); //全局信息交换 double Get_gBest(); //返回蛙群中全局最好值gBest的路经长度 void show(); //显示蛙群内所有青蛙 void subshow(); //显示 分组后的 每组青蛙 }; /* class Subswarm //子族群 { public: Frog s[]; Frog pb,pw; //子族群内最好解与最差解 int num; //子群内青蛙个数 public: void ssort(); // }; */