我编写了遗传算法的代码,并具有交叉功能,突变功能,父选择器功能和转移基因的功能。现在我想把它们放在一起,并想知道以下代码是否是良好的编程习惯。
Species Parents[popSize];
Species Children[popSize];
for(int gen = 0 ; gen < 100 ; gen++)
{
for(int i = 0; i < popSize ; i ++)
{
int parentA = chooseParent(Parents);
int parentB = chooseParent(Parents);
crossOver(Parents[parentA] , Parents[parentB] , Children[i]);
Children[i].mutate();
}
for(int i = 0; i < popSize ; i ++)
{
transfereGenes(Children[i], Parents[i]);
}
}
答案 0 :(得分:0)
这是一种简单,清晰,标准的遗传算法实现。这对于许多应用来说已经足够了。
无论如何,你可以考虑一些观点:std::vector
代替数组
swap
函数交换Children
和Parents
(对于大群体来说更快)chooseParent
函数,在一个“步骤”中提取几个人(一般来说,n
个人充当父母)。这对锦标赛的选择非常简单。gen++
,i++
)100
是magic number