资源简介
遗传算法的求解的全部代码,带有大量的注释。可读性好,欢迎大家下载
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int DIMENSION=535; //城市个数
const int PERSONS=1000; //种群个数
const int crosspob=0.75; //决定是否交叉的概率
const double mute=0.03; //变异概率
const int iternum=100; //计划迭代次数
ofstream out(“optimal_solution.txt“);
int nmutations;
#define max(ab) a>b?a:b
#define min(ab) astruct chrom{
unsigned int gene[DIMENSION-1]; //固定第一个城市
int fitness; //该路径的长度
}; //表征每个染色体特征
struct Population{
struct chrom person[PERSONS]; //有这么多个染色体
double fitsum; //适应值之和
int minfit; //最小适应度的下标
}; //种群的一些属性
//function declare here*********************************
int select(Population* p);
bool Flip(float prob);
void Cross(unsigned int* table1unsigned int* table2);
void Mutation(unsigned int* table);
void crossover(Population* poldPopulation* pnewint parent1int parent2int i);
void UpdateGen(Population* poldPopulation* pnew);
void shuffle(unsigned int* table);
void ComputeFitness(Population* pint* distance);
void InitData(Population* pint* distance);
//function declare here*********************************
bool Flip(float pro)
{
float temp;
temp=(float)rand()/(float)RAND_MAX;
if(temp<=pro) return true;
else return false;
}
int find(unsigned int* tableunsigned int aint startint end) //返回a在数组table中的下标
{
for(int i=start;i<=end;i++)
{
if(a==table[i])
return i;
}
return -1;
}
void exchange(unsigned int* tableint index1int index2)
{
unsigned int temp=table[index1];
table[index1]=table[index2];
table[index2]=temp;
}
void Cross(unsigned int* table1unsigned int* table2) //对两个基因进行交叉操作,生成子代的两个基因
{
int rand1=rand()%(DIMENSION-101)+50; //assure rand1 range from 2 to DIMENSION-4left and right side reserve at least 50 elements
int rand2=rand1;
do
{
rand2=rand()%(DIMENSION-101)+50;
}while(rand1==rand2); //assure rand1 differ from rand2
const int start=min(rand1rand2);
const int end=max(rand1rand2);
for(int i=start;i<=end;i++)
{
unsigned int t1=table1[i];
unsigned int t2=table2[i];
if(t1!=t2)
{
int a1=find(table1t20DIMENSION-2);
exchange(table1a1i);
int b1=find(table2t10DIMENSION-2);
exchange(table2b1i);
}
}
}
void Mutation(unsigned int* table) //依据一定概率对基因进行变异,变异操作是2-opt的
{
bool mut=Flip(mute);
if(mut) //如果发生了变异
{
nmutations++;
int rand1=rand()/(DIMENSION-1);
int rand2;
do
{
rand2=rand()/(DIMENSION-1);
}while(rand1==rand2);
exchange(tablerand1rand2);
}
return;
}
void crossover(Population* poldPopulation* pnewint parent1int parent2int i) //对群体中的两个个体杂交,生成新的个体并将新个体保存进新的种群里
{
struct chrom* ch1=&(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8727 2012-11-19 16:11 TSPyichuan.cpp
----------- --------- ---------- ----- ----
8727 1
相关资源
- 基于QPSO方法优化求解TSP
- 遗传算法最优保留
- TSP数据大全!
- 改进的鱼群算法解决TSP问题
- TSPLIB数据
- 遗传算法 NSGA II
- 实值编码遗传算法源程序.txt
- 遗传算法用于机械臂运动规划
- 整数规划问题的遗传算法
- 粒子群优化算法解决旅行商TSP问题
- NSGA-III代码
- TSP的求解局部搜索,模拟退火和禁忌
- 基于遗传算法的控制系统的系统辨识
- 结合遗传算法优化BP神经网络的结构和
- 混合蛙跳算法求解TSP问题
- structspringhibernate.txt
- 基于遗传算法的机组组合
- 基于遗传算法的作业车间调度优化
- 遗传算法解决TSP问题全
- 基于遗传算法的小波神经网络交通流
- 三维装箱问题的模型与改进遗传算法
- 基于改进免疫遗传算法的矩形件排样
- 基于最短路算法和遗传算法的配电网
- unity_神经网络_遗传算法_简易框架
- 多目标遗传算法源代码
- 基于遗传算法的分支覆盖测试用例自
- 遗传算法优化bp神经网络.zip
- 回溯法、遗传算法、CSP最小冲突法解
- 遗传算法代码
- PSO-GA-RBF
评论
共有 条评论