术语 – 遗传算法与遗传编程有什么区别? - 代码日志

术语 – 遗传算法与遗传编程有什么区别?

我唯一可以想出的是这个微小的解释:“遗传规划和遗传算法之间的主要区别是解决方案的表达,遗传编程创建了lisp或计划计算机语言的计算机程序作为解决方案,遗传算法创建一个代表解决方案的数字串。“

所以我非常喜欢的是对差异的简单解释(即没有太多的编程术语)。

编辑:一个例子将不胜感激。

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

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

结构差异

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

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

1+x*3-5*6

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

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

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

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

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

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

实际差异

遗传算法

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

遗传计划

>固有地具有可变长度,意味着它们更加灵活,但往往复杂化
>很少产生无效状态,通常可以丢弃
>使用显式结构来完全避免运算符优先

http://stackoverflow.com/questions/3819977/what-are-the-differences-between-genetic-algorithms-and-genetic-programming

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:术语 – 遗传算法与遗传编程有什么区别?