我正在用C ++编程遗传算法,在搜索了GA'a运算符(选择,交叉,变异)的各种方法后,我想出了一个疑问。假设我的初始人口为500人。我的选择将包括获得前20%(基于最佳健身状况)。所以我有100个人交配。当我进行交叉时,我会得到两个孩子,两个孩子都有50%的幸存者。到现在为止还挺好。我开始变异,一切都没问题。现在,当我开始选择下一代时,我看到我有很多孩子(在这种情况下,如果你想知道,则为4950)。现在的问题是,每次我运行GA,如果我将所有孩子送到下一代,每代的人数将呈指数级增长。因此,必须有一种方法可以选择孩子来完成新一代,而不会超出这一初始人口范围。
我在这里问的是,无论如何选择孩子来填补新一代或我应该选择某种方式(并且可能会减少)父母交配所以我没有得到最后这么多孩子。
谢谢:)
答案 0 :(得分:2)
通常对于GA,您可以选择您的交配算法,以便人口规模保持不变。因此,对于人口规模为500的示例,您将选择250对适合的个体进行交配,每对有2个后代,或者选择500对并拥有1个后代。
在你的例子中,听起来你只想把每个世代的前20%(100)个人视为“适合”,所以他们是唯一会生产任何孩子的人。另一种方法是仅对父母对的随机选择进行加权,以便更有可能选择更适合的个体(因此最终会有更多的配偶)。