谁给我解释下遗传算法中的交叉概率,变异概率和代沟?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁给我解释下遗传算法中的交叉概率,变异概率和代沟?相关的知识,希望对你有一定的参考价值。

我以前以为这些事整个种群交叉和变异的概率。后来听别人说交叉概率和变异概率都是针对每个个体,我不懂每个个体交叉概率和变异概率是什么意思,是怎么执行的。被选择交叉的个体是如何进行交叉?是两两互相交叉?每个被选择的个体交叉几次

参考技术A 1、交叉概率用于判断两两个体是否需要交叉;变异概率用于判断任一个体是否需要变异。
2、在一次进化迭代中,交叉通常是采用两两互相不重复交叉的方式,即个体1和个体2,个体3和个体4...个体n-1和个体n,或者个体1和个体n/2,个体2和个体n/2+1...个体n/2-1和个体n。以第一种方式为例,对于个体1和个体2,产生一个[0,1]之间的随机数,如果该随机数小于交叉概率,则个体1和个体2进行交叉操作,否则继续产生随机数判断之后的两个个体。
当然也可以采用随机交叉的方式,这时的交叉次数不能确定。
3、两两个体之间的交叉操作有不同的交叉方式,即:如果采用十进制编码,会有不同的交叉公式;如果采用二进制编码,有单点交叉和多点交叉。

对图应用交叉和变异(遗传算法)

【中文标题】对图应用交叉和变异(遗传算法)【英文标题】:applying crossover and mutation to a graph (genetic algorithm) 【发布时间】:2011-03-10 18:59:25 【问题描述】:

我正在玩一种遗传算法,我想在其中进化图。 你知道当染色体是图时应用交叉和变异的方法吗?

或者我是否缺少让我在位串上应用“常规”交叉和突变的图形编码?

非常感谢! 感谢任何帮助,即使它与我的问题没有直接关系!

曼努埃尔

【问题讨论】:

【参考方案1】:

我喜欢 Sandor's suggestion 使用 Ken Stanley 的 NEAT algorithm。

NEAT 旨在发展具有任意拓扑的神经网络,但这些基本上只是有向图。在 NEAT 之前有很多方法可以进化神经网络,但 NEAT 最重要的贡献之一是它提供了一种方法来在具有不同拓扑的两个网络之间执行有意义的交叉

为了实现这一点,NEAT 使用连接到每个基因的historical markings 在交叉过程中“排列”两个基因组的基因(生物学家称之为synapsis)。例如:

(来源:natekohl.net)

(在这个例子中,每个基因都是一个盒子,代表两个节点之间的连接。每个基因顶部的数字是该基因的历史标记。)

总结:根据历史标记排列基因是一种无需昂贵的拓扑分析即可在两个网络之间执行交叉的原则方法。

【讨论】:

NEAT 允许网络中包含循环/重复。在评估过程中如何处理? @iliacholy 通常取决于您要解决的问题。对于控制任务(如极平衡机器人),循环连接可能很有用,因为它们可以提供一种计算值随时间导数的方法。在评估网络时,您可以在每个时间步执行一次值传播,或者继续传播值直到输出稳定......我不确定是否有任何单一的“正确”答案。 :)【参考方案2】:

你不妨试试Genetic Programming。图将是最接近树的东西,而 GP 使用树……如果您仍想使用 GA 而不是 GP,那么看看如何在 GP 上执行交叉,这可能会让您了解如何执行它在您的 GA 图表上:

(来源:geneticprogramming.com)

以下是树(和图)交叉的工作原理:

    您选择 2 个样本进行交配。 您从一个父节点中选择一个随机节点并将其与另一个父节点中的随机节点交换。 生成的树就是后代。

【讨论】:

【参考方案3】:

我不确定使用位串是否是最好的主意,我宁愿至少用真实值表示权重。不过位串也可以工作。

如果你有一个固定的拓扑,那么交叉和变异都很容易(假设你只进化网络的权重):

Crossover:从一个父级获取一些权重,其余的从另一个父级获取,如果您将权重表示为数组或列表,则可以很容易地完成。有关更多详细信息或替代方案,请参阅http://en.wikipedia.org/wiki/Crossover_%28genetic_algorithm%29。

变异:只需选择一些权重并稍微调整它们。

发展其他一些东西(例如激活函数)与这些非常相似。

如果您还想发展拓扑,那么事情会变得更加有趣。有很多额外的变异可能性,比如添加一个节点(很可能连接到两个已经存在的节点),拆分一个连接(而不是 A->B 有 A->C->B),添加一个连接,或者相反其中。

但是交叉不会太容易(至少在节点数量不固定的情况下),因为您可能想要找到“匹配”节点(匹配可以是任何东西,但可能与类似的“角色",或网络中的类似位置)。如果您也想这样做,我强烈建议您学习现有的技术。我认识和喜欢的一个叫做 NEAT。您可以在http://en.wikipedia.org/wiki/Neuroevolution_of_augmenting_topologieshttp://nn.cs.utexas.edu/?neat找到有关它的一些信息 和http://www.cs.ucf.edu/~kstanley/neat.html

【讨论】:

【参考方案4】:

正如其他人所提到的,在 GA 中交叉图(或树)的一种常见方法是交换子图(子树)。对于突变,只需随机更改一些节点(概率很小)。

或者,如果您将图表示为邻接矩阵,那么您可以交换/改变矩阵中的元素(有点像使用二维位串)。

【讨论】:

我试图理解:从技术上讲,如何使用邻接矩阵交换子图?【参考方案5】:

好吧,我从来没有玩过这样的实现,但最终对于交叉,您可以选择其中一个图的一个分支并将其与另一个图的一个分支交换。 对于突变,您可以随机更改图中的一个节点,概率很小。

【讨论】:

以上是关于谁给我解释下遗传算法中的交叉概率,变异概率和代沟?的主要内容,如果未能解决你的问题,请参考以下文章

有关遗传算法的疑问:“以一定概率进行交叉和变异”的含义?

遗传算法,交叉概率,和变异概率,选择,通常在多少值,合适?

用遗传算法求解配送路线优化问题时,交叉率和变异率怎么设定?

ga遗传算法如何提高精度

多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c

遗传算法中保证和不变的交叉方法