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

bjr*_*rnt 25 terminology genetic-programming genetic-algorithm

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

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

Joh*_*dol 41

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

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


pet*_*est 21

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

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

结构差异

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

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

1+x*3-5*6
Run Code Online (Sandbox Code Playgroud)

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

function(x) { return 1 * x * 3 - 5 * 6; }
Run Code Online (Sandbox Code Playgroud)

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

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

      -
   /     \
  *       *
 / \     / \
1   *   5   6
   / \
  x   3
Run Code Online (Sandbox Code Playgroud)

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

实际差异

遗传算法

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

遗传计划

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