- // File: CgaTsp.h the head of class
- #ifndef GATSP_H
- #define GATSP_H
- #include <vector>
- #include <fstream>
- #include <algorithm>
- #include <iostream>
- using namespace std;
- // 变异概率
- #define MUTATION_RATE 0.2
- // 杂交概率
- #define CROSSOVER_RATE 0.75
- // 基因组数目
- #define POP_SIZE 40
- // 为2的倍数
- #define NUM_BEST_TO_ADD 2
- // 产生随机数
- inline int RandInt(int x,int y)
- {
- return rand()%(y-x+1)+x;
- }
- inline double RandFloat()
- {
- return (rand())/(RAND_MAX+1.0);
- }
- // 计算机坐标结构
- struct CoOrd
- {
- float x,y;
- CoOrd(){};
- CoOrd(float a, float b):x(a),y(b){};
- };
- // 基因组结构
- struct SGenome
- {
- // 连接计算机间的路径(基因组)
- vector<int> vecPC;
- // 适应分数
- double dFitness;
- // 构造函数
- SGenome():dFitness(0){}
- SGenome(int nc): dFitness(0)
- {
- vecPC = GrabPermutation(nc);
- }
- // 创建计算机间随机的一条路径
- vector<int> GrabPermutation(int &limit);
- // 在GrabPermutation函数中使用
- bool TestNumber(const vector<int> &vec, const int &number);
- };
- // 遗传算法类
- class CgaTSP
- {
- private:
- // 计算机坐标向量
- vector<CoOrd> m_vecPCCoOrds;
- vector<SGenome> m_vecPopulation;
- vector<int> m_savevecPC;
- double m_dMutationRate;
- double m_dCrossoverRate;
- // 整个种子群体的总适应性分
- double m_dTotalFitness;
- // 在此之前找到的最短路径
- double m_dShortestRoute;
- // 把所有代中的最短路径保存起来
- double m_saveShortestRoute;
- // 最长路径
- double m_dLongestRoute;
- // 种子群中的基因组数目
- int m_iPopSize;
- // 染色体数目
- int m_iChromoLength;
- // 新一代中适应分最高的成员
- int m_iFittestGenome;
- // 表明已经到了那一代
- int m_iGeneration;
遗传算法解决网络布线问题 tsp
最新推荐文章于 2020-08-14 15:12:25 发布
这个博客介绍了如何使用遗传算法解决旅行商问题(TSP),即网络布线问题。通过定义变异概率、杂交概率和基因组数目等参数,实现C++代码来生成和优化计算机间的连接路径。算法包括创建随机路径、轮盘赌选择法、交换变异操作和部分匹配杂交等步骤,最终找到最短路径并输出所需电缆长度。
摘要由CSDN通过智能技术生成