我希望能够简单解释一下遗传算法和遗传编程的区别(不要使用过多的编程术语)。最好能提供一些例子。
据说在遗传编程中,解决方案是计算机程序。而遗传算法则将解决方案表示为数字字符串。还有其他的区别吗?
我希望能够简单解释一下遗传算法和遗传编程的区别(不要使用过多的编程术语)。最好能提供一些例子。
据说在遗传编程中,解决方案是计算机程序。而遗传算法则将解决方案表示为数字字符串。还有其他的区别吗?
遗传算法(GA)是一种搜索算法,模拟自然进化的过程,其中每个个体都是候选解:通常情况下,个体是“原始数据”(以定义的任何编码格式为基础)。
遗传编程(GP)被认为是GA的一个特例,其中每个个体都是计算机程序(不仅仅是“原始数据”)。GP探索算法搜索空间并演化计算机程序以执行定义的任务。
遗传编程和遗传算法非常相似。它们都用于通过比较潜在候选人群体中每个候选人的适应度来进化问题的答案。
每一代,新的候选人会通过随机改变(突变)或交换部分(交叉)其他候选人来发现。最不适合的候选人将从种群中被移除。
它们之间的主要区别在于算法/程序的表示方式。
遗传算法以操作和值的列表形式表示,通常是一个字符串。例如:
1+x*3-5*6
需要编写一个解析器来理解如何将此编码转换成函数。生成的函数可能看起来像这样:
function(x) { return 1 * x * 3 - 5 * 6; }
解析器还需要知道如何处理无效状态,因为变异和交叉操作不关心算法的语义,例如以下字符串可能会被生成:1+/3-2*
。需要决定一个方法来处理这些无效状态。
遗传程序表示为行为和值的树形结构,通常是嵌套的数据结构。下面是相同的示例,以树状图形式说明:
-
/ \
* *
/ \ / \
1 * 5 6
/ \
x 3
对于这种编码方式,也需要编写解析器,但是遗传编程通常不会产生无效状态,因为突变和交叉操作在树的结构内进行。
遗传算法
遗传程序
遗传编程比遗传算法更强大。遗传算法的输出是一个数量,而遗传编程的输出是另一个计算机程序。