首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遗传算法和遗传编程有什么不同?

遗传算法和遗传编程有什么不同?
EN

Stack Overflow用户
提问于 2010-09-29 16:37:37
回答 6查看 28.3K关注 0票数 31

我想简单解释一下遗传算法和遗传编程之间的区别(没有太多的编程术语)。举个例子也会受到欢迎。

显然,在遗传编程中,解决方案是计算机程序。另一方面,遗传算法将解决方案表示为一串数字。还有其他区别吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-01-07 19:24:19

遗传编程和遗传算法非常相似。它们都用于通过比较潜在候选者群体中每个候选者在许多代中的适应度来进化出问题的答案。

每一代,通过随机改变(变异)或交换其他候选者的部分(交叉)来发现新的候选者。最不“适合”的候选人被从群体中剔除。

结构差异

它们之间的主要区别是算法/程序的表示形式。

遗传算法表示为动作和值的列表,通常是一个字符串。例如:

代码语言:javascript
复制
1+x*3-5*6

必须为这种编码编写一个解析器,以了解如何将其转换为函数。生成的函数可能如下所示:

代码语言:javascript
复制
function(x) { return 1 * x * 3 - 5 * 6; }

解析器还需要知道如何处理无效状态,因为变异和交叉操作并不关心算法的语义,例如,可以生成以下字符串:1+/3-2*。需要决定一种方法来处理这些无效状态。

遗传程序被表示为动作和值的树形结构,通常是嵌套数据结构。下面是相同的示例,如一棵树所示:

代码语言:javascript
复制
      -
   /     \
  *       *
 / \     / \
1   *   5   6
   / \
  x   3

还必须为这种编码编写解析器,但遗传编程(通常)不会产生无效状态,因为变异和交叉操作在树的结构中工作。

实际差异

遗传算法

减法本身具有固定的长度,这意味着结果函数具有有界的无效状态( complexity

  • Often non-destructively

  • Often
  • ),因此需要根据运算符优先级(例如,在我们的示例中,乘法发生在减法之前)来处理这些状态,这可以被视为限制

Genetic programs

状态本身具有可变的长度,这意味着它们更灵活,但在complexity

  • Rarely中增长通常会产生无效的状态,这些状态通常可以是显式的结构,以避免运算符的优先级完全优先于
票数 28
EN

Stack Overflow用户

发布于 2010-09-29 20:56:00

遗传算法( Genetic algorithms,GA)是模拟自然进化过程的搜索算法,其中每个个体都是一个候选解决方案:个体通常是“原始数据”(以任何已定义的编码格式)。

遗传程序设计( Genetic programming,GP)被认为是GA的一个特例,其中每个个体都是一个计算机程序(而不仅仅是“原始数据”)。GP探索算法搜索空间,并发展计算机程序来执行指定的任务。

票数 46
EN

Stack Overflow用户

发布于 2010-09-29 16:44:56

简单地说,(在我看来)遗传编程是遗传算法的一种应用。遗传算法用于通过计算机程序创建另一个解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3819977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档