1

我正在用 C++ 编写一个小型遗传算法框架。我的染色体被编码为位串,其中每个基因都有预定的大小。每条染色体在位串中一个接一个地存储它的基因。现在,我正在寻找实现交叉运算符。

My question is, when choosing a point after which to insert bits from the other chromosome, do I do this on a gene boundary or do I just treat the chromosome as a string of bits, and ignore the division into genes? 换句话说,我是将最小的可交换单元视为一个基因还是一个位元?

4

2 回答 2

2

当两条染色体一起繁殖时,存在基因交叉的随机概率。因此,您应该只交叉您认为的基因而不是较小的单位。

于 2013-12-05T20:17:34.113 回答
1

这个问题的答案最好通过查看 GA 所基于的生物学过程来理解。

假设您要寻找的是单点分频器,您需要的是如下图所示;交叉影响整个染色体,而不仅仅是“最小的可交换单元”。

在此处输入图像描述

有关更复杂的交叉场景(例如多点交叉或环形交叉)的详细信息,可以在此处的 Wikipedia 资源中找到。

于 2013-12-12T06:50:07.320 回答