32

我想简单解释一下遗传算法和遗传编程之间的区别(不用太多编程术语)。示例也将不胜感激。

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

4

6 回答 6

47

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

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

于 2010-09-29T12:56:00.237 回答
28

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

每一代,通过随机改变(突变)或交换其他候选者的部分(交叉)来找到新的候选者。从总体中删除最不“适合”的候选人。

结构差异

它们之间的主要区别在于算法/程序的表示。

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

1+x*3-5*6

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

function(x) { return 1 * x * 3 - 5 * 6; }

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

遗传程序表示为动作和值的树结构,通常是嵌套数据结构。这是相同的示例,显示为树:

      -
   /     \
  *       *
 / \     / \
1   *   5   6
   / \
  x   3

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

实际差异

遗传算法

  • 本质上具有固定长度,这意味着生成的函数具有有限的复杂性
  • 经常产生无效的状态,所以这些需要非破坏性的处理
  • 通常依赖于运算符优先级(例如,在我们的示例中,乘法发生在减法之前),这可能被视为一种限制

遗传程序

  • 本质上具有可变长度,这意味着它们更灵活,但通常会变得复杂
  • 很少产生无效状态,这些通常可以被丢弃
  • 使用显式结构来完全避免运算符优先级
于 2016-01-07T11:24:19.140 回答
1

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

于 2010-09-29T08:44:55.963 回答
0

实用答案:

GA 是在使用人口并将人口的世代进化到更好的状态时。(例如,人类是如何从动物进化为人类的,通过获取面包并获得更好的基因)

GP 是当通过已知的问题定义生成代码来更好地解决问题。(GP 通常会给出很多 if/else 语句,这将解释解决方案)

于 2010-09-29T08:42:42.033 回答
0

上面有很多好的部分答案。正如 Koza 在他关于该主题的开创性文本中所说,“[如果 GA 是解决问题的最佳解决方案,那么 GP 将进化出 GA 来解决它]。” 简单地说,GP 是一种遗传算法,它进化出由成本函数评估的程序。基因组是一个程序而不是成本函数恕我直言的输入集合这一事实是实质性的差异。

https://en.wikipedia.org/wiki/Genetic_programming

于 2019-04-09T17:01:30.210 回答
-3

遗传编程比遗传算法强大得多。遗传算法的输出是一个量,而遗传编程的输出是另一个计算机程序。

于 2013-12-03T02:24:52.587 回答