遗传算法c ++最后阶段

时间:2015-10-26 20:56:28

标签: c++ algorithm genetic-algorithm

我编写了遗传算法的代码,并具有交叉功能,突变功能,父选择器功能和转移基因的功能。现在我想把它们放在一起,并想知道以下代码是否是良好的编程习惯。

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]);
    }
}

1 个答案:

答案 0 :(得分:0)

这是一种简单,清晰,标准的遗传算法实现。这对于许多应用来说已经足够了。

无论如何,你可以考虑一些观点:

  • 使用std::vector代替数组
    1. 这是一种在不损失速度的情况下获得灵活性的方法(例如,基本遗传算法的某些变体考虑了可变大小的群体)
    2. 它允许通过swap函数交换ChildrenParents(对于大群体来说更快)
  • 你可以改变chooseParent函数,在一个“步骤”中提取几个人(一般来说,n个人充当父母)。这对锦标赛的选择非常简单。
  • 你应该添加一些控制参数(突变概率,交叉......)。许多问题对这些参数非常敏感,您可以在进化过程中考虑不同的值。
  • 严格的C ++相关要点:
    1. 您应该avoid the postfix increment operatorgen++i++
    2. 100magic number