我正在用C语言编写一个小型遗传算法框架。我的染色体编码为位串,每个基因都有预定的大小。每个染色体将其基因一个接一个地存储在位串中。现在,我正在寻找实现交叉运算符。
我的问题是,当选择从另一条染色体插入位的点时,我是在基因边界上这样做,还是仅仅将染色体作为一串位来处理,而忽略对基因的分割?换句话说,我是把最小的可交换单元当作基因还是比特?
当两条染色体同时复制时,存在基因交叉的随机概率。因此,你只应该跨越你所考虑的基因而不是更小的单位。
这个问题的答案最好通过观察遗传算法所基于的生物过程来理解。
假设您正在寻找的是单点交叉,您需要的如下所示;交叉影响整个染色体,而不仅仅是“最小的可交换单元”。
有关更复杂的交叉方案的详细信息,如多点交叉或环形交叉,可以在此处的维基百科资源中找到。