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

时间:2010-09-29 08:37:37

标签: terminology genetic-algorithm genetic-programming

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

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

6 个答案:

答案 0 :(得分:38)

遗传算法(GA)是模仿自然进化过程的搜索算法,每个人都是候选解决方案:个体通常是“原始数据”(无论编码格式是什么)

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

答案 1 :(得分:19)

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

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

结构差异

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

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

1+x*3-5*6

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

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

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

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

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

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

实际差异

遗传算法

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

遗传程序

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

答案 2 :(得分:0)

实际答案:

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:-2)

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