资源简介
利用遗传算法解决TSP问题(c++)其中包括了50个城市。算法明了,简单易懂。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#define PMX
#define PC 0.70 //杂交率
#define PM 0.04 //变异率
#define CITY_SIZE 50 //城市数
#define POP_SIZE 1000 //种群规模
#define NEW_SIZE (POP_SIZE/2) //用于重组的个体数
#define GEN_TOTAL 10000 //总遗传代数
void Initialize(int Pop[][CITY_SIZE] int Count);
void Evaluate(int Pop[][CITY_SIZE] int EvalVal[] int Count);
void ParentSelect(int Pop[][CITY_SIZE] int EvalVal[] int Count);
void Recombine(int Pop[][CITY_SIZE] int Count);
void Mutate(int Pop[][CITY_SIZE] int Count);
int GetBestPathIndex(int EvalVal[] int Count);
void ShowBestResult(int Path[] int Len int Gen);
void ShowPath(int Path[][CITY_SIZE] int Count);
void TSPProc();
int main(int argc char *argv[])
{
void TSPProc();
TSPProc();
printf(“\nFinish searching!“);
getch();
return 0;
}
void TSPProc()
{
//使用一个整型数组表示每条路径
int Pop[POP_SIZE][CITY_SIZE];
int BestEval BestPath[CITY_SIZE];
//对路径的评估使用整型数表示,忽略小数部分
int EvalVal[POP_SIZE];
Initialize(Pop POP_SIZE);
Evaluate(Pop EvalVal POP_SIZE);
int t = GetBestPathIndex(EvalVal POP_SIZE);
memmove(BestPath Pop[t] sizeof(int) * CITY_SIZE);
BestEval = EvalVal[t];
ShowBestResult(BestPath BestEval 0);
t = 1;
while(t < GEN_TOTAL)
{
ParentSelect(Pop EvalVal POP_SIZE);
Recombine(Pop POP_SIZE);
Mutate(Pop POP_SIZE);
Evaluate(Pop EvalVal POP_SIZE);
printf(“\rCurrent generation:%d“ t);
int Index = GetBestPathIndex(EvalVal POP_SIZE);
if(EvalVal[Index] < BestEval)
{
BestEval = EvalVal[Index];
memmove(BestPath Pop[Index] sizeof(int) * CITY_SIZE);
printf(“\r“);
ShowBestResult(BestPath BestEval t);
}
t++;
}
}
//初始化种群
void Initialize(int Pop[][CITY_SIZE] int Count)
{
int i j;
int Seed[CITY_SIZE];
srand(time(NULL));
for(i = 0; i < Count; i++)
{
for(j = 0; j < CITY_SIZE; j++)
Seed[j] = j;
//随机产生一条路径
for(j = 0; j < CITY_SIZE; j++)
{
int RandIdx = rand() % (CITY_SIZE - j);
Pop[i][j] = Seed[RandIdx];
Seed[RandIdx] = Seed[CITY_SIZE - j - 1];
}
}
}
//评估路径Pop,结果放入EvalVal
void Evaluate(int Pop[][CITY_SIZE] int EvalVal[] int Count)
{
static int Matrix[CITY_SIZE][CITY_SIZE];
static bool bInitMatrix;
int i j;
char Str[256];
//先检查邻接矩阵是否已初始化
if(!bInitMatrix)
{
bool bInit = false;
FILE *pFile = fopen(“d:\\tsp.txt“ “r“);
if(pFile)
{
bInit = true;
for(i = 0; i < CITY_SIZE; i++)
{
for(j = 0; j < CITY_SIZE; j++)
{
if(!fgets(Str 64 pFile))
{
bInit = false;
break;
}
Matrix[i][j] = atoi(Str);//将字符串转换
相关资源
- GA遗传算法C++实现,控制台演示
- C++实现的遗传算法实现TSP问题
- MFC动态绘制曲线图-HightSpeedChart实现
- RTSP流媒体协议实现源代码 含客户端和
- RTSPRTP服务器+客户端 C++ 源代码
- 遗传算法C语言版已运行
- TSP问题蚁群算法C++实现
- C++ 基于遗传算法的矩形排样 具有可视
- 蚁群算法解决TSP问题C源码
- 遗传算法和BP人工神经网络算法C++实现
- DSS中的RTSPclientLib程序
- RTSPRTP C++ 源代码
- 将音视频文件转换为rtsp流(live555 媒
- 用opencv处理RTSP视频流,其中视频流的
- TSP问题遗传算法C/C++实现
-
超值QT5之mediapla
yer实现RTSP以及本地 - QT+opencv打开RTSP视频流多线程
- QT写成的远程视频监控系统 -RTSPTool
- ffmpeg获取RTSP视频流信息
- C++遗传算法
- 排样遗传算法(c++)
- web 播放rtsp视频流(含服务端以及使用
- 一个简单的遗传算法的模板
- Visual C++写的 求解TSP问题的基本粒子群
- C++实现遗传算法
- TSP问题matlab、c++代码、测试数据 数据
- 爬山法、模拟退火法、遗传算法实现
- 遗传算法解决TSP问题代码 C++
- 遗传算法c++实现模板
- Hopfield网络解决TSP问题算法源代码
评论
共有 条评论