我需要遗传算法的排名选择方法的代码。我已经创建了轮盘赌和锦标赛选择方法,但现在我需要排名并且我被卡住了。
我的轮盘赌代码在这里(我将 atom struct 用于遗传原子):
const int roulette (const atom *f)
{
int i;
double sum, sumrnd;
sum = 0;
for (i = 0; i < N; i++)
sum += f[i].fitness + OFFSET;
sumrnd = rnd () * sum;
sum = 0;
for (i = 0; i < N; i++) {
sum += f[i].fitness + OFFSET;
if (sum > sumrnd)
break;
}
return i;
}
其中原子:
typedef struct atom
{
int geno[VARS];
double pheno[VARS];
double fitness;
} atom;