• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-06
  • 语言: C/C++
  • 标签: 遗传算法  TSP  

资源简介

本程序是采用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

评论

共有 条评论