交叉在遗传算法中如何工作?

人工智能 遗传算法 定义 交叉运营商
2021-11-18 04:52:24

如果我有一定数量的想要杂交的“父母”的权重,并且我使用任何方法来挑选“最好的父母”(我使用轮盘赌选项,如果这有任何相关性),我会做这正确吗?

例如,假设我选择了以下两个父母。

P1=[0.5,0.02,0.4,0.1,0.9]P2=[0.42,0.55,0.18,0.3,0.12]

当我遍历父母的每个指数(或基因)时,我只选择一个父母的权重。我将此比率称为“交叉比率”,在我的情况下是0.2(即与20% 的机会,我会改用其他父母的体重)。

所以,使用我们上面的例子,会发生这样的事情:

P1=[0.5,0.02,0.4,0.1,0.9]P2=[0.42,0.55,0.18,0.3,0.12]

所以孩子会

C=[0.5,0.02,0.18,0.3,0.9]

我会选0.5P1,但每次我从P1, 有 20% 的机会我实际上从中选择了相应的基因P2. 但是,对于第一个重量,我最终没有落在那 20% 的机会上。所以我转向第二个重量,0.02. 这一次,我们达到了 20% 的机会,所以现在我们交换。我们的下一个重量现在来自P2,即0.18. 以此类推,直到我们再次达到 20% 的机会。

我们一直这样做,直到我们到达索引的末尾(P1P2当然,具有相同数量的索引)。

这是从2个父母组成孩子的正确方法吗?在遗传算法方面,这是正确的“杂交”方法吗?

1个回答

据我所知,没有“指定的正确方法”。整个想法是,您希望总体收敛并在那个看起来更理想的地方增加采样率。最有效的方法完全取决于您的健身状况。

你也可以通过做类似的事情来交叉

crossover_point = random_number_size_genome
child[:] = parent_a[:crossover_point] + parent_b[crossover_point:]

或者有多个交叉点或更奇特的交叉类型。据我所知,由于不同的交叉算法对您的算法的影响应该不会那么不同。

健身功能以及如何选择最适合的人会产生更大的影响。查看您的示例,您已经正确理解了交叉步骤。