资源简介
本程序是采用C++实现的遗传算法实现TSP问题,城市数不多,但是思想很清楚,有用的就下吧。
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
#define N 5 //群体规模N数字0~9对应A~J
#define Pc 0.75 //交配概率Pc
#define Pw 0.01 //变异概率Pw
#define MAX 200 //没有直接连接设为MAX,值200与计算概率有关
int small=1000;
int t=0; //代数
int F(int *a); //适应函数
void mating(); //交配函数
void change(); //变异函数
int sol[N]; //最优解
int chrom[N]; //染色体
int chromnew[N]; //交配后获得的新染色体
int group[N][N+1]; //初始群体
float group_p[N][1]; //群体中染色体被选中概率
int race[N][N+1]; //种群
float race_p[N][1]; //种群中染色体被选中概率
int variation_count=0; //计算变异次数
//构造城市图0~4对应A~E
//最短路径 0 1 3 4 2 F()=9
// 0 1 3 2 4,F()=10
int array[N][N]=
{
{MAX1MAXMAXMAX}
{1MAXMAX2MAX}
{MAXMAXMAX34}
{MAX23MAX2}
{MAXMAX42MAX}
};
void show_sol()
{
cout< }
//显示group[N][N+1]的内容
void show_group(int **group)
{
int ij;
int y=0;
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
{
cout<<*((int*)group+6*i+j)<<“ “;
}
cout< }
}
//显示race[N][N+1]的内容
void show_race(int **race)
{
int ij;
int y=0;
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
{
cout<<*((int*)race+6*i+j)<<“ “;
}
cout< }
}
//生成单个染色体函数,存于chrom[N]中
void create_chrom()
{
srand(time(0)%rand()^rand());
for(int i=0;i {
chrom[i]=rand()%N;
}
while(chrom[0]==chrom[1]) chrom[1]=rand()%N;
while(chrom[0]==chrom[2]||chrom[1]==chrom[2]) chrom[2]=rand()%N;
while(chrom[0]==chrom[3]||chrom[1]==chrom[3]||chrom[2]==chrom[3]) chrom[3]=rand()%N;
while(chrom[0]==chrom[4]||chrom[1]==chrom[4]||chrom[2]==chrom[4]||chrom[3]==chrom[4]) chrom[4]=rand()%N;
}
//计算适应值函数
int F(int *a)
{
int temp=0;
for(int i=0;i {
temp=array[a[i]][a[i+1]]+temp;
}
return temp;
}
//随机生成N个染色体作为初始群体
//用函数F()计算每个染色体的适应值并存在group[i][5]中
void create_group()
{
for(int i=0;i {
create_chrom();
group[i][5]=F(chrom);
for(int j=0;j {
group[i][j]=chrom[j];
}
}
}
//计算概率函数
void prob_group(int **group)
{
int i;
int y=0;
int temp=0;
float P=0;
for(i=0;i<5;i++)
{
temp=temp+1000-*((int*)group+6*i+5);
}
cout< for(i=0;i<5;i++)
{
P=float(1000-*((int*)group+6*i+5))/temp;
group_p[i][0]=P;
}
}
//计算概率函数
void prob_race(int **race)
{
int i;
int y=0;
int temp=0;
float P=0;
for(i=0;i<5;i++)
{
temp=temp+1000-*((int*)race+6*i+5);
}
//cout< for(i=0;i<5;i++)
{
P=float(1000-*((int*)race+6*i+5))/temp;
race_p[i][0]=P;
}
}
//选择函数
void choose()
{
int i=0
- 上一篇:GPS卫星位置的计算
- 下一篇:Effective C++简体中文 完整书签
相关资源
- 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问题算法源代码
- 遗传算法实现N皇后问题
- C++ RTSP/RTP流媒体服务器源码
评论
共有 条评论