我正在用C ++编写一个小型遗传算法框架。我的染色体被编码为位串,其中每个基因具有预定的大小。每个染色体在比特串中一个接一个地存储它们的基因。现在,我正在寻找实现交叉运算符。
我的问题是,当选择从另一条染色体插入位的点后,我是否在基因边界上这样做,或者我只是将染色体视为一串位,并忽略基因划分?换句话说,我是否将最小的可交换单元视为基因或位?
答案 0 :(得分:2)
当两条染色体一起繁殖时,基因交叉存在随机概率。因此,你应该只考虑你认为的基因而不是较小的单位。
答案 1 :(得分:1)
通过查看GA所依据的生物过程,可以最好地理解这个问题的答案。
假设您正在寻找的是单点交叉,您需要的是如下图所示;交叉影响整个染色体而不仅仅是“最小的可交换单元”。
有关更复杂的交叉场景的详细信息,例如多点交叉或环形交叉,可以在Wikipedia资源here找到。