【发布时间】:2014-08-27 20:22:56
【问题描述】:
我正在用 C 语言从头开始编写遗传算法,我陷入了轮盘赌实现中,这里是我的编码方式:
void selection(Chromosome * chromosome){
double totalFitness=0;
double totalProbability=0;
double probability=0;
double rndNumber;
double min,max;
int i;
min=0.0;
max=1.0;
for(i=0;i<POPULATION_SIZE;i++){
totalFitness += chromosome[i].fitness;
}
for(i=0;i<POPULATION_SIZE;i++){
chromosome[i].probability = (chromosome[i].fitness)/totalFitness;
printf("Chromosome %d with probability %f\n",i, chromosome[i].probability);
}
srand((unsigned)time(NULL));
for(i=0;i<POPULATION_SIZE;i++){
rndNumber = ((double)rand()/(double)RAND_MAX);
if(chromosome[i].probability >= rndNumber){
printf("Chromosome %d selected \n",i);
}}}
输出返回一个或没有选择的染色体,这不是预期的结果。我想知道这是否是正确的点缀方式??
提前致谢。
【问题讨论】:
-
你的输入数据是什么?在您的方法中实际考虑的唯一值是每个染色体的适应度。
-
Chromosome 是我定义的一个结构体,它包含:基因数组、适应度和概率。
标签: c genetic-algorithm roulette-wheel-selection