资源简介
TSP问题即旅行商问题,目前还没有特别好的求解算法,我用基础的蚁群算法对该问题进行解决,蚁群算法具有很好的性能
代码片段和文件信息
#include
#include
#include
#include
#include
#define CITY_COUNT 51
#define AntCount 30
#define NCMAX 300
#define alfa 1.0 //启发因子,信息素的重要程度
#define beta 2.0 //期望因子,城市间距离的重要程度
#define rou 0.5 //信息素残留参数
#define Q 100.0 //总的信息素
double distance[CITY_COUNT][CITY_COUNT]; //两城市间距离矩阵//
double tao[CITY_COUNT][CITY_COUNT]; //两城市间信息素矩阵//
int bestTour[CITY_COUNT]; //存储最佳路径经过的城市//
int rnd(int nLowint nUpper)
{
return nLow+(nUpper-nLow)*rand()/(RAND_MAX+1);
}
double rnd_d(double Lowdouble Upper)
{
double Temp=rand()/((double)RAND_MAX+1.0);
return Low+Temp*(Upper-Low);
}
typedef struct
{
double x;
double y;
}Location;
typedef struct
{
Location *city;
}City;
typedef struct
{
int Path[CITY_COUNT];
double PathLength;
int AllowedCity[CITY_COUNT];
int CurCityN;
int MovedCityCount;
}Ant;
typedef struct
{
Ant * Ants;
double bestLength;
} TSP;
void Init_City(City *Ci)
{
Ci->city=(Location*)malloc(CITY_COUNT*sizeof(Location));
if(!Ci->city) exit(OVERFLOW);
}
void InitList_TSP(TSP *tsp)
{
tsp->Ants=(Ant*)malloc(AntCount*sizeof(Ant));
if(!tsp->Ants) exit(OVERFLOW);
tsp->bestLength=1000000000;
}
void Init_S()
{
int ij;
for(i=0;i for(j=0;j {
tao[i][j]=1.0; //设置为1//
}
}
void CreateAnts(TSP *tsp)
{
int ij;
for(i=0;i {
for(j=0;j {
tsp->Ants[i].AllowedCity[j]=1;
tsp->Ants[i].Path[j]=0;
}
tsp->Ants[i].PathLength=0.0;
tsp->Ants[i].CurCityN=rnd(0CITY_COUNT); //随机选择一个城市,编号0-50//
tsp->Ants[i].Path[0]=tsp->Ants[i].CurCityN;
tsp->Ants[i].AllowedCity[tsp->Ants[i].CurCityN]=0;
tsp->Ants[i].MovedCityCount=1;
}
}
void GetLoc(City *Ci)
{
int inumber;
FILE *fp;
fp=fopen(“tsp.txt““r“);
if(fp==NULL)
{
printf(“无法打开数据文件.\n“);
exit(0);
}
for(i=0;i {
fscanf(fp“%d%lf%lf“&number&Ci->city[i].x&Ci->city[i].y);
}
fclose(fp);
}
void GetDistance(City *Ci)
{
int ij;
double temp=0.0;
for(i=0;i {
for(j=0;j {
temp=(Ci->city[i].x-Ci->city[j].x)*(Ci->city[i].x-Ci->city[j].x)+(Ci->city[i].y-Ci->city[j].y)*(Ci->city[i].y-Ci->city[j].y);
temp=pow(temp0.5);
distance[i][j]=temp;
}
distance[i][i]=0.0000000001;
}
}
void updatetrial(TSP *tsp)
{
double Temptao[CITY_COUNT][CITY_COUNT];
int m=0;
int n=0ij;
memset(Temptao0sizeof(Temptao));
for(i=0;i {
for(j=1;j {
m=tsp->Ants[i].Path[j];
n=tsp->Ants[i].Path[j-1];
Temptao[n][m]=Temptao[n][m]+Q/tsp->Ants[i].PathLength;
Tempt
相关资源
- 蚁群算法C++版
- 遗传算法求解TSP旅行商问题C语言源代
- 分支限界法求旅行商问题
- 利用遗传算法解决TSP问题c++
- C++实现的遗传算法实现TSP问题
- MFC动态绘制曲线图-HightSpeedChart实现
- 蚂蚁算法MFC实现执行文件
- RTSP流媒体协议实现源代码 含客户端和
- RTSPRTP服务器+客户端 C++ 源代码
- TSP问题蚁群算法C++实现
- 蚁群算法解决TSP问题C源码
- DSS中的RTSPclientLib程序
- RTSPRTP C++ 源代码
- 将音视频文件转换为rtsp流(live555 媒
- 用opencv处理RTSP视频流,其中视频流的
- TSP问题遗传算法C/C++实现
-
超值QT5之mediapla
yer实现RTSP以及本地 - QT+opencv打开RTSP视频流多线程
- QT写成的远程视频监控系统 -RTSPTool
- ffmpeg获取RTSP视频流信息
- web 播放rtsp视频流(含服务端以及使用
- Visual C++写的 求解TSP问题的基本粒子群
- TSP问题matlab、c++代码、测试数据 数据
- 蚁群算法求解vrp问题
- 遗传算法解决TSP问题代码 C++
- Hopfield网络解决TSP问题算法源代码
- 蚁群算法解决CVRP问题的c/c++源码
- c语言实现蚁群算法 核心+注释
- 蚁群算法源代码——C++实现
- C++ RTSP/RTP流媒体服务器源码
评论
共有 条评论