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

问题描述 投票:22回答:6

我想对遗传算法和遗传编程之间的差异做一个简单的解释(没有太多的编程术语)。例子也将不胜感激。

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

terminology genetic-algorithm genetic-programming
6个回答
20
投票

遗传编程和遗传算法非常相似。通过比较多代中潜在候选人群中每个候选人的适应性,他们都习惯于发展问题的答案。

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

Structural differences

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

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

1+x*3-5*6

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

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

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

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

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

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

Practical differences

遗传算法

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

遗传计划

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

40
投票

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

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


0
投票

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


0
投票

实际答案:

GA是在使用人口并将人口世代发展为更好的状态时。 (例如人类如何通过种子和更好的基因从动物进化到人类)

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


0
投票

上面有很多好的部分答案。正如Koza在关于这一主题的开创性文本中所说的那样,“[如果GA是解决问题的最佳解决方案,那么GP将发展GA来解决它]。”简而言之,GP是一种GA,可以演变由成本函数评估的程序。基因组是一个程序而不是成本函数恕我直言的输入集合的事实是物质差异。

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


-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.