【问题标题】:Efficiency of crossover in genetic algorithms遗传算法中的交叉效率
【发布时间】:2011-10-11 03:05:23
【问题描述】:

我已经实现了许多遗传算法来解决各种问题。但是我仍然对交叉/重组的有用性持怀疑态度。

我通常在实现交叉之前先实现突变。在我实施交叉后,与简单地使用突变并在每一代中引入一些随机个体以确保遗传相比,我通常不会看到生成良好候选解决方案的速度有显着提高。

当然,这可能归因于对交叉函数和/或概率的错误选择,但我想获得一些具体的解释/证据来说明交叉为什么/是否会改善 GA。有没有这方面的研究?

我理解其背后的原因:交叉允许将两个人的优势结合为一个人。但对我来说,这就像说我们可以将科学家和美洲虎交配,从而获得聪明而快速的混合体。

编辑:在 mcdowella 的回答中,他提到如何找到一个可以改善从多个起点爬山的交叉点的案例并非易事。有人可以详细说明这一点吗?

【问题讨论】:

  • 这种问题可能会在cstheory.SE得到更好的答案。
  • 1) 你用的是什么分频器?随机的?一点?两点? 2)你到底在找什么?参考一篇讨论交叉对解决方案质量影响的文章?
  • “对文章的引用”会很好。我并不是特别想改进我的交叉功能(我已经使用了各种),而是为了一个具体的原因/证据,它可以提高 GA 的效率。
  • 它总是依赖于问题,并且可以证明是这样。没有通用的技术。任何有效的搜索算法只有在其偏差在某种意义上与搜索空间的显着特征一致时才有效。当您的大山丘相对较少时,爬山效果最佳。当最优值之间的大多数障碍很浅时,模拟退火效果最好。在某些情况下,特定的交叉运算符运行良好,而在某些情况下则不行。
  • @deong:是的,但我正在寻找交叉工作良好的示例/案例。

标签: algorithm genetic-algorithm


【解决方案1】:

强烈取决于您的搜索空间的流畅度。如果每个“基因组”在用于生成“现象组”之前都经过哈希处理,那么您将只是在进行随机搜索。

不太极端的情况,这就是为什么我们经常在 GA 中对整数进行格雷码。

您需要根据编码调整交叉和变异函数。如果你对它们进行无情的计算,GAs 很容易衰减。如果 A 和 B 的交叉不能产生既像 A 又像 B 的东西,那么它就没有用了。

示例:

基因组长 3 位,位 0 决定它是陆栖还是海栖。第 1-2 位描述了陆栖生物的消化功能和海栖生物的视觉能力。

考虑两个陆生生物。

    | bit 0 | bit 1 | bit 2
----+-------+-------+-------
Mum | 0     | 0     | 1
Dad | 0     | 1     | 0

它们可能会在第 1 位和第 2 位之间交叉产生一个消化功能在妈妈和爸爸之间有所妥协的孩子。太好了。

这种交叉似乎是明智的只要位 0 没有改变。如果是这样,那么您的交叉功能已经将某种胆量变成了某种眼睛。呃……呜?也可能是随机突变。

提出了 DNA 如何解决这个问题的问题。嗯,它既是模态的,也是层次结构的。有很大的部分可以改变很多而没有太大的影响,在其他部分中,单个突变可能会产生巨大的影响(如上面的第 0 位)。有时 X 的值会影响 Y 触发的行为,并且 X 的所有值都是合法的并且可以探索,而对 Y 的修改会使动物出现段错误。

GA 的理论分析经常使用非常粗略的编码,并且它们比语义问题更容易受到数字问题的影响。

【讨论】:

  • 在您的示例中,每个位都是相互独立的。但是,我发现通常个人的质量还取决于其编码的每个“部分”之间的关系。在我看来,鉴于这些错综复杂的关系,跨界创造一个更好的个体的可能性非常低。但是,您当然是对的,它在很大程度上取决于搜索空间和特定的交叉功能(正如您还提到的,它应该针对手头的问题进行定制)。
【解决方案2】:

我的印象是,从多个随机起点爬山是非常有效的,但试图找到一个可以改善这一点的跨界案例并非易事。一个参考文献是 David Icl˘anzan 的“Crossover: The Divine Afflatus in Search”,其中指出

传统的 GA 理论建立在 Building Block Hypothesis 的基础之上 (BBH) 指出遗传算法 (GA) 通过发现来工作, 在高质量中强调和重新组合低阶图式 字符串,以一种强并行的方式。从历史上看,试图 捕捉拓扑适应度景观特征 这个直观直接的过程,主要是 不成功。基于群体的重组方法 在特殊设计的抽象测试套件上多次表现出色, 通过基于变异的算法的不同变体。

一篇相关论文是“通过爬山克服分层困难” 由 David Iclănzan 和 Dan Dumitrescu 撰写的“积木结构”,其中指出

构建模块假设表明遗传算法 (GA) 非常适合层次问题,其中有效解决 需要适当的问题分解和解决方案的组装 具有强非线性相互依赖性的子解。论文 建议在积木 (BB) 空间上运行爬山器 可以有效地解决分层问题。

【讨论】:

  • 没错!对我来说,爬山似乎比交叉更有可能产生更好的结果,所以我想知道我们为什么要费心使用 CPU 周期来进行交叉。我会看看这些参考资料,因为我想了解更多关于如何有效使用交叉的信息。
  • @tskuzzy 好吧,我们至少有一个存在证明表明交叉在某些环境中效果更好。 ;)
【解决方案3】:

John Holland 的两部开创性著作“自然和人工系统中的适应”和“隐藏秩序”(不太正式)深入讨论了交叉理论。 IMO,Goldberg 的“搜索、优化和机器学习中的遗传算法”有一个关于数学基础的非常平易近人的章节,其中包括以下结论:

通过交叉和复制......那些具有高于平均水平的性能和较短的定义长度的模式将以指数级增长的速率进行采样。

另一个很好的参考可能是 Ankenbrandt 的“收敛理论的扩展和遗传算法时间复杂性的证明”(在 Rawlins 的“遗传算法基础”中)。

我很惊讶交叉的力量在你的工作中没有表现出来。当我开始使用遗传算法并看到“定向”交叉似乎有多么强大时,我觉得我对进化有了深刻的认识,它颠覆了我在学校所学的东西。所有关于“突变如何导致这个和那个”的问题。而“嗯,经过这么多代人……”似乎从根本上被误导了。

【讨论】:

  • 谢谢!我看看能不能弄到这些书。
  • 这两本书都是开创性的参考书,现在已经非常过时了。已经有理论研究表明交叉是可以证明是有益的,但与大多数 GA 理论一样,为了使数学易于处理所需的现实假设的削减使得结果是否适用于现实问题非常值得怀疑。
  • @deong 您能否澄清一下——您是说 GA 的理论优势随着理论的发展而减弱,还是 GA 的实用性(仍然)具有挑战性?跨度>
  • 最常见的情况是,那些早期作品中提倡的模式定理被认为是 GA 工作方式(包括交叉的好处)的理由过于简单化。替代理论更准确,但目前在大多数情况下不承认可以根据它们做出实际预测,而且通常不能告诉您算法在给定现实问题上的性能。我们大多回到“它在某些问题上效果很好,但我们不能说什么时候或为什么。”
  • 大多数启发式设计指南只是经验性的——人们报告对他们有用的参数。这可以作为一个起点,但我们真的不知道如何在深层基本层面上描述交叉的影响。这对于元启发式的几乎所有东西都是正确的。 “哪种算法最能解决我的问题”的问题仍然悬而未决,将其称为“P=NP?”可能并不太合理。该领域的问题。
【解决方案4】:

您对交叉操作持怀疑态度是正确的。有一种纸叫 “关于交叉在模拟进化优化中的有效性”(Fogel 和 Stayton,Biosystems 1994)。可通过1 免费获取。

顺便说一句,如果您还没有,我建议您研究一种称为“差分进化”的技术。它可以很好地解决许多优化问题。

【讨论】:

    【解决方案5】:

    这主要取决于搜索空间和您使用的交叉类型。对于一些问题,我发现在开始使用交叉然后突变,它会加快寻找解决方案的过程,但这不是很好的方法,因为我最终会找到类似的解决方案。如果我们同时使用交叉和变异,我通常会得到更好的优化解决方案。然而,对于某些问题,交叉可能非常具有破坏性。

    单独的遗传算子也不足以解决大型/复杂的问题。当您的运营商没有改进您的解决方案时(因此当他们没有增加适应度值时),您应该开始考虑其他解决方案,例如增量进化等。

    【讨论】:

      【解决方案6】:

      交叉与突变!!其实两者都是必要的。 交叉是一种探索性算子,但变异是一种剥削性算子。考虑到解决方案的结构、问题和优化率的可能性,选择正确的 Pc 和 Pm 值(交叉和变异的概率)非常重要。

      检查这个GA-TSP-Solver,它使用了许多交叉和变异方法。您可以在给定概率的突变旁边测试任何交叉。

      【讨论】:

        猜你喜欢
        • 2016-09-05
        • 2014-08-12
        • 2016-08-31
        • 1970-01-01
        • 2014-12-21
        • 2012-06-02
        • 2019-05-26
        • 2011-02-22
        相关资源
        最近更新 更多