scale.c

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

C
49
字号
#include "const.h"#include "type.h"#include "extern.h"#include "exfunc.h"void scalepop(pop)     IPTR pop;{   /* linearly scale the population */  IPTR pj;  int i;    find_coeffs(pop);  scaled_sumfitness = 0.0;  for(i = 0; i < popsize; i++){    pj = &pop[i];    pj->scaled_fitness = scale_constA * pj->fitness + scale_constB;    scaled_sumfitness += pj->scaled_fitness;  }}void find_coeffs(IPTR pop){  /* find coeffs scale_constA and scale_constB for linear scaling according to      f_scaled = scale_constA * f_raw + scale_constB */    double d;  if(min > (Cmult * avg - max)/(Cmult - 1.0)) { /* if nonnegative smin */    d = max - avg;    scale_constA = (Cmult - 1.0) * avg / d;    scale_constB = avg * (max - Cmult * avg)/d;  } else {  /* if smin becomes negative on scaling */    d = avg - min;    scale_constA = avg/d;    scale_constB = -min * avg/d;  }  if(d < 0.00001 && d > -0.00001) { /* if converged */    scale_constA = 1.0;    scale_constB = 0.0;  }}

⌨️ 快捷键说明

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