资源简介
本程序是采用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++简体中文 完整书签
相关资源
- 基于遗传算法的机器人路径规划
- C++ 通过FFmpeg将rtsp视频流到本地mp4文件
- 禁忌搜索算法30城市TSP问题C++源代码
- C++实现的改进遗传算法
- 遗传算法解决车辆调度问题
- 蚁群算法在TSP中的运用c++版
- 最短路径的篇论文及必经节点的遗传
- c语言实现的遗传算法
- 利用Hopfield神经网络解决TSP问题-论文
- 旅行商问题TSP三种解决算法 基于C++的
- 遗传算法代码NSGA-II
- TSP 蚁群算法 MFC实现
- Hopfield求解TSP源程序及结果C++
- C++遗传算法解决柔性作业车间调度附
- 用c语言实现的遗传算法单目标优化
- live555&RTSP;源码解析笔记
- 旅行售货员问题的C++实现
- C++实现用Hopfiled网络解决TSP问题
- 遗传算法c++源程序
- 遗传算法解决背包问题(C++版本)
- 用遗传算法实现语音识别--基于mfcc参
- 用遗传算法解决车辆优化调度问题
- C++蚁群算法求解TSP问题
- 遗传算法解八数码问题
- 遗传算法解决0-1背包问题
- C/C++使用遗传算法解决车辆路径问题
- MFC读取RTSP视频流
- RTMP/RTSP推流组件推送AAC到EasyDarwin
- MFC实现rtsp视频流的播放
- 基于回溯法的TSP问题解决方案
评论
共有 条评论