遗传算法和遗传编程有什么区别?

36

我希望能够简单解释一下遗传算法和遗传编程的区别(不要使用过多的编程术语)。最好能提供一些例子。

据说在遗传编程中,解决方案是计算机程序。而遗传算法则将解决方案表示为数字字符串。还有其他的区别吗?


1
这个问题应该在人工智能堆栈交换上提问,但不幸的是,它在10年前还不存在。 - nbro
6个回答

49

遗传算法(GA)是一种搜索算法,模拟自然进化的过程,其中每个个体都是候选解:通常情况下,个体是“原始数据”(以定义的任何编码格式为基础)。

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


“个体是原始数据”这句话的确切含义是什么?“原始数据”指的是什么?个体如何成为“原始数据”?此外,“算法搜索空间”又是什么意思? - nbro
1
@nbro 它们实际上是原始数据。如果没有程序来执行它们,它们只是数字或对象的序列。就像神经网络的权重一样。 - ozgur

27

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

每一代,新的候选人会通过随机改变(突变)或交换部分(交叉)其他候选人来发现。最不适合的候选人将从种群中被移除。

结构上的区别

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

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

1+x*3-5*6

需要编写一个解析器来理解如何将此编码转换成函数。生成的函数可能看起来像这样:

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

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

遗传程序表示为行为和值的树形结构,通常是嵌套的数据结构。下面是相同的示例,以树状图形式说明:

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

对于这种编码方式,也需要编写解析器,但是遗传编程通常不会产生无效状态,因为突变和交叉操作在树的结构内进行。

实际差异

遗传算法

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

遗传程序

  • 本质上具有可变长度,意味着它们更加灵活,但通常会增加复杂性
  • 很少产生无效状态,这些状态通常可以被丢弃
  • 使用明确的结构完全避免了运算符优先级

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

2
直观上看,遗传编程似乎是遗传算法的一个子集。但有趣的是,从形式上考虑,遗传编程比遗传算法更为通用,因为遗传编程(理论上)能够演化任何程序——包括遗传算法。 - Tom Castle
@Tom:这个观点不成立,因为遗传算法并不一定是一个程序。遗传算法可以在硅基或(显然)有机体中实现。而GP则不能创造这两者。 - Ben Voigt
1
遗传算法本质上是一种算法。遗传编程可以演化该算法的逻辑。但该逻辑的实现是一个不同的问题。 - Tom Castle
理论上,遗传编程可以演化出任何给定适当函数和终端的算法 - 包括遗传算法。现在先忽略演化出如此复杂算法的概率.. ;-) 但是当然,遗传编程本身就是遗传算法的一种应用。 - Jay

0
许多好的部分回答在上面。正如Koza在他关于这个主题的重要著作中所说的:“[如果GA是解决问题的最佳解决方案,那么GP将进化出一个GA来解决它]”。简单地说,GP是一种类型的GA,可以演变评估成本函数的程序。基因组是一个程序而不是成本函数输入的集合,这一事实在我看来就是实质性的区别。

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


0
实用答案:
GA 是使用种群并演化种群的代际以达到更好状态的过程。 (例如,人类是通过繁殖和获得更好的基因从动物进化而来的)
GP 是根据已知问题定义生成代码以更好地解决问题的过程。 (GP 通常会给出大量 if/else 语句,以解释解决方案)

2
抱歉,但那是错误的:在任何情况下,您都将使用一组解决方案以及一个适应度函数来评估个体的质量,以便(希望)选择它们并在未来的进化中创建更好的个体。 - Jay

-2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接