我目前正在尝试实现一个非常简单的遗传算法示例。
在某一点上,您必须使用两个数字(父母)进行“交叉”(生物学),以获得一个“孩子”。
您可以在此处找到Cross-Over的解释:
如何“交叉”两个字符串(1234和abcd-> 12cd和ab34)
(第二个插图,更容易的“单点”Cross-Over是我正在尝试的。)
染色体(父母和孩子)是数字,但“Cross-Over”将是一个位运算。
我为其中一个“染色体”找到了解决方案,如下所示:
- 将X位向右移动(
>>>
运算符) - 然后再次将位移X个位置,但这次是向左移动(
<<
运算符)
因此,这将保留一个染色体的末尾,并用0填充开头。
但我不知道如何解决另一个染色体的问题,然后进行交叉。
(可能是一次异或,我保留了染色体的开头/结尾,并用0填充其余部分。)
还是应该从另一个角度来解决这个问题?