遗传算法和进化算法之间的真正区别是什么?
我正在阅读一些有关遗传算法的论文,他们经常以非常相似的方式提到进化算法。根据维基百科,GA 是 EA 的子集。然而,如果我们仔细观察,我们可以注意到两者都是基于自然选择(交叉、选择、变异)的元启发式优化算法,并且都没有固定的表示(这取决于要解决的问题,即使我们传统上使用二进制) GA 的表示)。他们非常相似。所以,我的问题是我们可以将每个进化算法视为遗传算法吗?它们之间真正的区别是什么?谢谢
I am reading some papers about Genetic Algorithms and often they mention Evolutionary Algorithms in a very similar way. According to Wikipedia, GAs are subset of EAs. However, if we look closer, we can notice that both are metaheuristic optimization algorithms based on natural selection (crossover, selection, mutation) and both don't have a fixed representation (it depends on the problem to solve, even we traditionaly use binary representations for GAs). They are very similar. So, my question is can we consider every evolutionary algorithm a genetic algorithm ? and what are the real differences between them ? Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这在某种程度上取决于你问的是谁。在此类事物存在的最初几十年里,每个人都认为存在不同的类别(通常被列为“遗传算法”、“遗传编程”、“进化策略”和“进化编程”。可以肯定的是,有重要的子领域之间存在差异,因此这种区别在某种程度上确实有意义
(大约在 90 年代末左右),人们开始将它们视为更通用的算法类别的实例,从而推动了统一。 。 这主要 GA 会议 (ICGA) 演变成 GECCO,统一术语变成了“进化计算”,涵盖上述所有内容,偶尔还包括其他一些内容(如果您是 因此,目前,我们通常将“进化计算”
(或“进化算法”)作为包罗万象的总括术语,遗传编程保持其自身的身份,即直接进化代码字符串和进化。策略在处理实值时还保持单独的身份,并且通常包括某种自我修改(例如,在运行时协方差矩阵自适应学习搜索方向)。进化编程仍然存在,但只是一个小得多的利基市场。 “遗传算法”一词的范围已经很广了。最初,人们认为它们是对二进制字符串进行操作,进行代选择等操作。随着时间的推移,严格性逐渐消失。此时,您几乎可以将“遗传算法”用作“进化计算”的同义词。你不应该这样做,因为你会失去术语中的微妙之处,但一般来说,如果你不直接进行代码生成,并且你没有以非常特别定义的方式演化实数,那么与人们所认为的进化策略相对应,那么你可以相当安全地将其称为“遗传算法”。
It sort of depends on who you ask. For the first few decades that such things existed, everyone considered there to be distinct categories (usually listed as "genetic algorithms", "genetic programming", "evolution strategies", and "evolutionary programming". There were, to be sure, significant differences between the subfields, so the distinction did make some degree of sense.
At some point (around the late 90s or thereabouts), there was a bigger push for unification, as people began to see them as instances of a more general class of algorithms. The major GA conference (ICGA) morphed into GECCO, and the unifying term became "evolutionary computation", encompassing all of the above, and occasionally a few others (you can view things like particle swarm optimization as evolutionary algorithms as well if you're a bit liberal with the definitions).
So currently, we would generally say "evolutionary computation" (or "evolutionary algorithms") as the catch-all umbrella term. Genetic programming maintains its own identity as evolving code strings directly, and evolution strategies also keep a separate identity as dealing with real-values and often including some sort of self-modification (e.g., covariance matrix adaptation learning search directions at runtime). Evolutionary programming still exists, but only as a much smaller niche. The term "genetic algorithms" has broaded quite a bit. Originally, people thought of them as operating on binary strings operating with generational selection, etc. Over time, one by one, the strictness has fallen away. At this point, you can almost use "genetic algorithm" as a synonym for "evolutionary computation". You shouldn't, because there is an understood subtlety in the terminology that you'd be losing, but in general, if you aren't doing code generation directly, and you aren't evolving real numbers in a very particularly defined way that corresponds with what people think of as evolution strategies, then you're reasonably safe in calling it a "genetic algorithm".
为了完成 deong 的精彩答案,这里引用了这本优秀书籍进化计算简介 由 AE Eiben 和 JE Smith 撰写。
To complete deong's great answer, here is a quote from the excellent book Introduction to Evolutionary Computing written by A. E. Eiben and J. E. Smith.