【问题标题】:Choosing parents to crossover in genetic algorithms?在遗传算法中选择父母进行交叉?
【发布时间】:2012-12-10 07:33:32
【问题描述】:
首先,这是作业的一部分。
我正在尝试实现一种遗传算法。我对选择父母进行交叉感到困惑。
在我的笔记中(显然有问题)这是作为示例所做的;
- Pc(交叉的可能性)* 种群大小 = 估计的交叉染色体数(如果不是偶数,则四舍五入到最接近的偶数之一)
- 为每个染色体选择 [0,1] 范围内的随机数,如果该数字小于 Pc,则选择该染色体作为交叉对。
但是当应用第二步时,选择的染色体数等于第一步找到的结果。由于随机性,这并不总是得到保证。
所以这没有任何意义。我搜索了选择父母进行交叉,但我发现的只是交叉技术(一点,切割和切片等)以及如何在所选父母之间进行交叉(我对这些没有问题)。我只是不知道应该选择哪个染色体进行交叉。有什么建议或简单的例子吗?
【问题讨论】:
标签:
genetic-algorithm
genetic-programming
【解决方案1】:
你可以这样实现:
对于每个新的孩子,你决定它是否会由随机概率交叉产生。如果是,那么您选择两个父母,例如。通过轮盘赌选择或锦标赛选择。两个父母生了一个孩子,然后你用变异概率对其进行变异并将其添加到下一代。如果不是,那么您只选择一个“父代”克隆它,以概率对其进行变异并将其添加到下一个种群中。
我注意到的其他一些观察结果,我想发表评论。当它应该是个体时,我经常读到“染色体”这个词。你几乎从不选择染色体,而是选择完整的个体。染色体只是解决方案的一部分。这可能是吹毛求疵,但解决方案不是染色体。解决方案是由几个染色体组成的个体,这些染色体由以等位基因形式显示其表达的基因组成。通常一个人只有一个染色体,但仍然不能混合术语。
我还注意到您标记了遗传编程,它基本上只是一种特殊类型的遗传算法。在 GP 中,您将树视为可以表示数学公式或计算机程序的染色体。不过,您的问题似乎与 GP 无关。
【解决方案2】:
这是一个很晚的答案,但希望它对将来的某人有所帮助。即使两条染色体没有配对(并且产生了孩子),它们也会进入下一代(没有交叉),但经过一些突变(再次受概率影响)。另一方面,如果两条染色体配对,那么它们会为下一代产生两个孩子(取代原来的两个父母)。所以,这就是为什么两代人的染色体数目保持不变的原因。