遗传算法到底是什么?它们有什么优点?


16

我注意到这个网站上的几个问题都提到了遗传算法,这让我意识到我对这些知识并不了解。

我以前听过这个词,但是我从来没有用过,所以我对它们的工作原理和优点没有太多的了解。我所知道的是,它们涉及某种进化和随机变化的价值。

您能给我一个简短的解释,最好包括一些说明基本原理的实际例子吗?

Answers:


11

进化算法是基于达尔文自然选择原理的一系列优化算法。作为自然选择的一部分,给定的环境中有一群争夺生存和繁殖的个体。每个人实现这些目标的能力决定了他们生育孩子的机会,换句话说,将他们的基因传给下一代个体,由于遗传原因,他们在实现这些目标方面有更大的机会做得更好甚至更好。两个目标。

进化算法采用代代相传的不断改进的原理来优化问题的解决方案。在最初的一代中,随机或通过其他方法生成由不同个体组成的种群。一个人或多或少是一个解决问题的方法:关于问题的个人素质称为适应性,它反映了解决方案对于待解决问题的充分性。一个人的适应性越高,就越有可能将其部分或全部基因型传递给下一代。

个体被编码为基因型,可以具有任何形状,例如位向量(遗传算法)或实向量(进化策略)。在评估个体时,即在计算其适应性时,每种基因型都会转化为表型。在某些情况下,表型与基因型相同:称为直接 编码。否则,编码称为间接编码。例如,假设您要优化由矩形长方体的长度,高度和宽度定义的尺寸。为了简化示例,假设这三个数量是0到15之间的整数。我们可以使用4位二进制数来描述每个数量。潜在解决方案的示例可能是基因型0001 011101010。对应的表型是长1,高7和宽10的平行六面体。

在从旧到新的过渡过程中,称为变异 算子,其目的是操纵个体。变异运算符有两种不同的类型:

  • 所述突变 运营商,这是用于将同一个体内引入的变化,如基因突变;
  • 交叉 运营商,这是用来从育种杂交的至少两个不同的基因型,如遗传杂交。

进化算法已经在各种领域证明了自己,例如运筹学,机器人技术,生物学,细微差别或密码学。此外,它们可以同时优化多个目标,并且可以用作黑匣子,因为它们在数学模型中不具有任何要优化的属性。它们唯一真正的限制是计算复杂度。

在此处输入图片说明


感谢您在这里回答!尽管我个人认为这是AI SE的理想问题,因为它是基础知识和“高级”知识,但不要害羞地指导OP和读者通过Cross Validated获得关于该主题的更高级问题,适合该课程。
杜克大学(DukeZhou

8

遗传算法是一种随机生成问题的许多尝试解决方案的算法。这组尝试的解决方案称为“人口”。

然后尝试使用给定的适应度函数来查看这些解决方案解决问题的能力。具有最佳适应性值的已尝试解决方案用于生成新种群。这可以通过对尝试的解决方案(变异)进行小的更改或通过组合现有的尝试的解决方案(交叉)来完成。

这个想法是,随着时间的流逝,将出现一种具有足够高的适用性值来解决问题的尝试解决方案。

灵感来自进化论。优胜劣汰的解决方案可以生存和繁殖。

例子1

假设您正在寻找最有效的方法来从一块木头上切出许多形状。您想浪费尽可能少的木材。

您尝试的解决方案是将这些形状随机排列在一块木头上。适应性将由按照这种布置切割形状后剩余的木材量来确定。
剩余的木材越少,尝试的解决方案越好。

例子2

假设您试图找到一个通过多个点的多项式。您尝试的解决方案将是随机多项式。
要确定这些多项式的适用性,请确定它们对给定点的拟合程度。(在这种特殊情况下,您可能会使用最小二乘法来确定多项式对点的拟合程度)。在许多试验中,您将获得更适合这些点的多项式,直到您拥有一个足够接近这些点的多项式。


但是,解决方案是什么意思?您能举一个具体问题的实际例子,这样我可以更好地想象一下它看起来像什么吗?
潜伏者

@InquisitiveLurker我添加了示例。让我知道它们是否不够清晰;我很高兴更新我的答案。
SL Barth-恢复莫妮卡

6

此答案要求一个实际示例,说明如何使用它,除了其他答案之外,我还将尝试提供该示例。他们似乎应该很好地解释遗传算法是什么。因此,这将举一个例子。

假设您有一个神经网络(尽管它们不是唯一的应用程序),它从某些给定的输入中会产生一些输出。遗传算法可以创建这些种群,并通过查看哪个输出最佳来繁殖并杀死种群成员。最终,如果足够复杂的话,这应该优化神经网络。

这是我进行的演示,尽管编码不正确,也可能有助于您理解。http://khrabanas.github.io/projects/evo/evo.html 按下“进化”按钮并破坏目标。

它使用一种简单的遗传算法来繁殖,变异和决定哪个种群幸存。取决于输入变量的设置方式,网络将能够与之接近某种程度。以这种方式,总体可能最终成为同质群体,其输出类似于目标。

遗传算法正在尝试创建各种“神经网络”,通过引入RGB可以产生输出颜色。首先,它产生一个随机种群。然后通过从总体中抽取3个随机成员,选择适应性最低的成员并将其从总体中删除。适应度等于最高目标平方的差值+最低目标平方的差值。然后,它将剩下的两个繁殖在一起,并将孩子与死去的成员一起添加到人口中的同一位置。发生交配时,有可能发生突变。此突变将随机更改其中一个值。

附带说明一下,由于它的设置方式,尽管它会相对接近,但在很多情况下不可能完全正确。


6

这里有许多很好的答案,解释什么是遗传算法,并给出示例应用。我会针对它们的优点添加一些通用建议,但也建议您不要使用它们。如果我的语气看起来很刺耳,那是因为在不适当部分的任何情况下使用GA都会导致您的论文被任何顶级期刊立即拒绝。

首先,您的问题必须是优化问题。您需要定义要尝试优化的“健身功能”,并且需要一种方法来对其进行度量。

好:

  • 交叉功能易于定义且自然:处理某些类型的数据时,交叉/变异功能可能易于定义。例如,字符串(例如DNA或基因序列)可以通过拼接两个候选字符串以轻松获得一个新的字符串来进行突变(这就是自然界使用遗传算法的原因!)。通过将一棵树的树枝替换为另一棵树的树枝,也可以拼接树木(例如系统发育树或解析树)。形状(如飞机机翼或船形)可以通过在形状上绘制网格并组合来自父母的不同网格部分来获取孩子的方式轻松进行更改。通常,这意味着您的问题由不同部分组成,将来自不同解决方案的部分放在一起是一个有效的候选解决方案。
    • 这意味着,如果您的问题是在没有任何特殊含义的向量空间中定义的,则GA不是一个很好的选择。如果很难将您的问题描述为通用航空,那是不值得的。
  • 黑匣子评估:如果对候选人来说,您的适应度功能是在计算机外部评估的,则GA是个好主意。例如,如果要在空气隧道中测试机翼形状,则遗传算法将帮助您生成可以尝试的良好候选形状。
    • 例外:模拟。如果您的适应性功能正在衡量喷嘴设计的性能,并且需要模拟每种喷嘴形状的流体动力学,则GA可能对您来说效果很好。如果您通过时间模拟物理系统,并且对您的设计在整个操作过程中的性能表现感兴趣,它们也可能会起作用。模拟运动模式。然而,在文献中正在开发使用偏微分方程作为约束的方法。PDE限制了优化,因此将来可能会改变。

不适当:

  • 您可以为函数计算梯度:如果可以使用函数的梯度,则可以进行梯度下降,这通常比GA效率高得多。梯度下降可能与局部极小值有关(与GA一样),但是已经研究了许多方法来缓解这种情况。
  • 您知道健身函数的闭合形式:然后,您可能可以计算梯度。许多语言都有支持自动区分的库,因此您甚至不需要手动进行区分。如果您的函数不可微,则可以使用次梯度下降
  • 您的优化问题采用已知形式,例如线性程序或二次程序:GA(通常是黑盒优化方法)在需要评估的候选对象数量方面效率很低,如果可能,最好避免使用。
  • 您的解决方案空间很小:如果您可以有效地对搜索空间进行网格化,则可以保证找到最佳解决方案,并且可以对解决方案空间进行等高线图绘制,以查看是否存在需要进一步探索的区域。

最后,如果您考虑采用通用遗传算法,请考虑“进化策略”中的最新工作。我偏向于CMA-ES,我认为CMA-ES是一种很好的简单算法,它以传统GA无法捕获的方式捕获了健身环境中的梯度概念。


CMA-ES适用于解决方案可以表示为实值向量的问题。
NietzscheanAI

5

正如在另一个答案中观察到的那样,应用遗传算法(GA)所需要做的只是以易于交叉和变异的形式表示问题的潜在解决方案。理想情况下,适应度函数将提供有关解决方案质量的某种平滑反馈,而不是简单地成为“干草堆中的针”。

以下是遗传算法(以及实际上通常是元启发法)可解决的问题的一些特征:

  • NP完全-问题的可能解决方案数量是指数级的,但是检查解决方案的适用性相对便宜(从技术上讲,在输入大小中使用时间多项式)。
  • 黑匣子-即使您对要解决的问题没有特别了解的模型,GA也可以正常工作。这意味着这些方法也可用作解决问题的“快速原型”方法。

但是,尽管已将它们广泛用于此目的,但请注意,GA实际上并不是 GA GA功能优化器 -GA机制倾向于不探索搜索空间的“外围”区域,以期找到一些遥远的高质量解决方案,而是将其聚类在“健身景观”中容易达到的高峰。

有关遗传算法的适用性的更多详细信息,请参见著名的早期论文“是什么使遗传算法难以解决问题?”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.