gen.c

来自「遗传算法的一个源代码」· C语言 代码 · 共 145 行

C
145
字号
#include "const.h"#include "type.h"#include "extern.h"#include "exfunc.h"int gen0(IPTR oldpop, IPTR newpop, int t){  int i, p1, p2, c;  IPTR pj, pjplus1, om1, om2;  for(i = 0; i < popsize; i += 2){    p1 = seltor[seller](oldpop, SUMfitness, popsize);    p2 = seltor[seller](oldpop, SUMfitness, popsize);    pj = &(newpop[i]);    pjplus1 = &(newpop[i+1]);    om1 = &(oldpop[p1]);    om2 = &(oldpop[p2]);    cross(om1, om2, pj, pjplus1);    pj->fitness = eval_org(pj);     pj->parent1 = p1;    pj->parent2 = p2;        pjplus1->fitness = eval_org(pjplus1);     pjplus1->parent1 = p2;    pjplus1->parent2 = p1;  }}int gen1(IPTR oldpop, IPTR newpop, int t){  int i, p1, p2, c;  IPTR pj, pjplus1, om1, om2;  for(i = popsize; i < 2*popsize; i += 2){    p1 = seltor[seller](oldpop, SUMfitness, popsize);    p2 = seltor[seller](oldpop, SUMfitness, popsize);    /**    fprintf(stderr, "selecting mates %d %d\n", p1, p2);    **/    pj = &(oldpop[i]);    pjplus1 = &(oldpop[i+1]);    om1 = &(oldpop[p1]);    om2 = &(oldpop[p2]);    cross(om1, om2, pj, pjplus1);    pj->fitness = eval_org(pj);     pj->parent1 = p1;    pj->parent2 = p2;    pjplus1->fitness = eval_org(pjplus1);     pjplus1->parent1 = p2;    pjplus1->parent2 = p1;      }  halve(oldpop, newpop);}int gen0_scaled(IPTR oldpop, IPTR newpop, int t){  int i, p1, p2, c;  IPTR pj, pjplus1, om1, om2;  scalepop(oldpop);  for(i = 0; i < popsize; i += 2){    p1 = seltor[seller](oldpop, scaled_sumfitness, popsize);    p2 = seltor[seller](oldpop, scaled_sumfitness, popsize);    pj = &(newpop[i]);    pjplus1 = &(newpop[i+1]);    om1 = &(oldpop[p1]);    om2 = &(oldpop[p2]);    cross(om1, om2, pj, pjplus1);    pj->fitness = eval_org(pj);     pj->parent1 = p1;    pj->parent2 = p2;        pjplus1->fitness = eval_org(pjplus1);     pjplus1->parent1 = p2;    pjplus1->parent2 = p1;  }}int gen1_scaled(IPTR oldpop, IPTR newpop, int t){  int i, p1, p2, c;  IPTR pj, pjplus1, om1, om2;  scalepop(oldpop);  for(i = popsize; i < 2*popsize; i += 2){    p1 = seltor[seller](oldpop, scaled_sumfitness, popsize);    p2 = seltor[seller](oldpop, scaled_sumfitness, popsize);    /**    fprintf(stderr, "selecting mates %d %d\n", p1, p2);    **/    pj = &(oldpop[i]);    pjplus1 = &(oldpop[i+1]);    om1 = &(oldpop[p1]);    om2 = &(oldpop[p2]);    cross(om1, om2, pj, pjplus1);    pj->fitness = eval_org(pj);     pj->parent1 = p1;    pj->parent2 = p2;    pjplus1->fitness = eval_org(pjplus1);     pjplus1->parent1 = p2;    pjplus1->parent2 = p1;      }  halve(oldpop, newpop);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?