📄 srselect.c
字号:
/*----------------------------------------------------------------------------*//* srselect.c - contains select_memory, select_free, /* preselect, and select, stochastic remainder method *//*----------------------------------------------------------------------------*/#include "external.h"static int *choices, nremain;static float *fraction;select_memory(){ /* allocates auxiliary memory for stochastic remainder selection */ unsigned nbytes; char *malloc(); int j; nbytes = popsize*sizeof(int); if((choices = (int *) malloc(nbytes)) == NULL) nomemory(stderr,"choices"); nbytes = popsize*sizeof(float); if((fraction = (float *) malloc(nbytes)) == NULL) nomemory(stderr,"fraction");} select_free(){ /* frees auxiliary memory for stochastic remainder selection */ free(choices); free(fraction);}preselect()/* preselection for stochastic remainder method */{ int j, jassign, k; float expected; if(avg == 0) { for(j = 0; j < popsize; j++) choices[j] = j; } else { j = 0; k = 0; /* Assign whole numbers */ do { expected = ((oldpop[j].fitness)/avg); jassign = expected; /* note that expected is automatically truncated */ fraction[j] = expected - jassign; while(jassign > 0) { jassign--; choices[k] = j; k++; } j++; } while(j < popsize); j = 0; /* Assign fractional parts */ while(k < popsize) { if(j >= popsize) j = 0; if(fraction[j] > 0.0) { /* A winner if true */ if(flip(fraction[j])) { choices[k] = j; fraction[j] = fraction[j] - 1.0; k++; } } j++; } } nremain = popsize - 1;}int select()/* selection using remainder method */{ int jpick, slect; jpick = rnd(0, nremain); slect = choices[jpick]; choices[jpick] = choices[nremain]; nremain--; return(slect);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -