资源简介
遗传算法求解TSP旅行商问题,C语言源代码。人工智能经典算法
代码片段和文件信息
// TSPGA.cpp : Defines the entry point for the console application.
//用遗传算法求解TSP问题的程序模板
#include
#include
#include
#include “math.h“
#include “time.h“
#define CITY_NUM 30 //城市编号是0~CITY_NUM-1
#define POPSIZE 100
#define MAXVALUE 10000 //路径越短越好
#define N 10000//需要根据实际求得的路径值修正
unsigned seed=(unsigned)time(0);
int Hash[CITY_NUM+1];
typedef struct CityPosition
{
int x;
int y;
}CityPosition;
// CityPosition CityPos[10]={{877}{9138}{8346}{7144}{6460}{6858}{8369}{8776}{7478}{7171}};
CityPosition CityPos[30]={{877}{9138}{8346}{7144}{6460}{6858}{8369}{8776}{7478}{7171}
{5869}{5462}{5167}{3784}{4194}{299}{764}{2260}{2562}{1854}{450}{1340}{1840}
{2442}{2538}{4126}{4521}{4435}{5835}{6232}};
double CityDistance[CITY_NUM][CITY_NUM];
typedef struct{
int colony[POPSIZE][CITY_NUM+1];//城市种群默认出发城市编号为0,则城市编号的最后一个城市还应该为0
double fitness[POPSIZE];// 路径适应值
double Distance[POPSIZE];//路径实际长度
int BestRooting[CITY_NUM+1];//最优城市路径序列
double BestFitness;//最优路径适应值
double BestValue;//最优路径长度
int BestNum;
}TSP*PTSP;
void CalculatDist()
{
int ij;
int temp1temp2;
for(i=0;i for(j=0;j<=CITY_NUM;j++){//最后一个城市还应该返回到出发节点
temp1=CityPos[j].x-CityPos[i].x;
temp2=CityPos[j].y-CityPos[i].y;
CityDistance[i][j]=sqrt(temp1*temp1+temp2*temp2);
}
}
}
void copy(int a[]int b[])
{
int i=0;
for(i=0;i {
a[i]=b[i];
}
}
bool check(TSP &cityint popint numint k)
{//用来检查新生成的节点是否在当前群体中,0号节点是默认出发节点和终止节点
int i;
for(i=0;i<=num;i++){
if(k==city.colony[pop][i])
return true;//新生成节点存在于已经生成的路径中
}
return false;//新生成节点没有存在于已经生成的路径中
}
void InitColony(TSP &city)
{
int ijr;
for(i=0;i city.colony[i][0]=0;
city.colony[i][CITY_NUM]=0;
city.BestValue=MAXVALUE;
city.BestFitness=0;//适应值越大越好
}
for(i=0;i {
for(j=1;j {
r=rand()%(CITY_NUM-1)+1;//产生1~CITY_NUM-1之间的随机数
while(check(cityijr))
{
r=rand()%(CITY_NUM-1)+1;
}
city.colony[i][j]=r;
}
}
}
void CalFitness(TSP &city)
{
int ij;
int startend;
int Best=0;
for(i=0;i city.Distance[i]=0;
for(j=1;j<=CITY_NUM;j++){
start=city.colony[i][j-1];end=city.colony[i][j];
city.Distance[i]=city.Distance[i]+CityDistance[start][end];
}
// city.fitness[i]=pow(1.1N/city.Distance[i]);
city.fitness[i]=N/city.Distance[i];
if(city.fitness[i]>city.fitness[Best])
Best=i;
}
copy(city.BestRootingcity.colony[Best]);
city.BestFitness=city.fitness[Best];
city.BestValue=city.Distance[Best];
city.BestNum=Best;
}
void Select(TSP &city)
{//选择算子
int TempColony[POPSIZE][CITY_NUM+1];
int ijst;
double GaiLv[POPSIZE];
int SelectP[POPSIZE+1];
double avg;
double sum=0;
for(i=0;i {
sum+=city.fitness[i];
}
fo
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 66560 2011-03-07 15:24 TSP\Debug\TSP.bsc
文件 217144 2011-03-07 15:24 TSP\Debug\TSP.exe
文件 255244 2011-03-07 15:24 TSP\Debug\TSP.ilk
文件 15656 2010-12-16 16:31 TSP\Debug\TSP.obj
文件 239716 2011-03-07 15:23 TSP\Debug\TSP.pch
文件 525312 2011-03-07 15:24 TSP\Debug\TSP.pdb
文件 0 2010-12-16 16:31 TSP\Debug\TSP.sbr
文件 16318 2011-03-07 15:24 TSP\Debug\TSP2.obj
文件 0 2011-03-07 15:24 TSP\Debug\TSP2.sbr
文件 41984 2011-03-07 15:24 TSP\Debug\vc60.idb
文件 53248 2011-03-07 15:24 TSP\Debug\vc60.pdb
文件 6461 2010-12-16 16:31 TSP\TSP.CPP
文件 4253 2010-12-16 18:28 TSP\TSP.dsp
文件 514 2010-12-16 11:37 TSP\TSP.dsw
文件 41984 2011-03-07 15:24 TSP\TSP.ncb
文件 54784 2011-03-07 15:24 TSP\TSP.opt
文件 1821 2011-03-07 15:24 TSP\TSP.plg
文件 7393 2011-03-07 15:24 TSP\TSP2.cpp
目录 0 2011-03-07 15:24 TSP\Debug
目录 0 2011-03-07 15:24 TSP
----------- --------- ---------- ----- ----
1548392 20
- 上一篇:C++矩阵计算类
- 下一篇:数据结构中用栈实现迷宫问题的c++代码
相关资源
- 遗传算法、免疫算法源码C
- 遗传算法求解10城市的旅行商问题的
- 利用遗传算法解决TSP问题c++
- GA遗传算法C++实现,控制台演示
- C++实现的遗传算法实现TSP问题
- 斗地主AI源代码
- 遗传算法C语言版已运行
- C++ 基于遗传算法的矩形排样 具有可视
- 遗传算法和BP人工神经网络算法C++实现
- TSP问题遗传算法C/C++实现
- C++遗传算法
- 排样遗传算法(c++)
- 人工智能象棋博弈 含悔棋记录功能
- 《人工智能游戏编程真言》.pdf
- 一个简单的遗传算法的模板
- 简单的极大极小算法实现的井字棋程
- 基于概率模型的wumpus程序
- 人工智能专家系统C语言
- C++实现遗传算法
- 人工智能八数码问题解答c++代码及报
- 八数码问题C语言代码
- 爬山法、模拟退火法、遗传算法实现
- 遗传算法解决TSP问题代码 C++
- 遗传算法c++实现模板
- 野人与传教士C语言程序实现
- 遗传算法实现N皇后问题
- C++实现拼图人工智能
- 人工智能八数码问题求解
- 旅行商问题tsp 三种解决算法
- 重排九宫广度优先
评论
共有 条评论