我想对遗传算法和遗传编程之间的差异做一个简单的解释(没有太多的编程术语)。例子也将不胜感激。
显然,在遗传编程中,解决方案是计算机程序。另一方面,遗传算法将解决方案表示为一串数字。还有其他差异吗?
遗传编程和遗传算法非常相似。通过比较多代中潜在候选人群中每个候选人的适应性,他们都习惯于发展问题的答案。
通过随机改变(突变)或交换其他候选者的部分(交叉)来找到每一代新候选者。最不合适的候选人将从人口中删除。
它们之间的主要区别在于算法/程序的表示。
遗传算法表示为动作和值的列表,通常是字符串。例如:
1+x*3-5*6
必须为此编码编写解析器,以了解如何将其转换为函数。结果函数可能如下所示:
function(x) { return 1 * x * 3 - 5 * 6; }
解析器还需要知道如何处理无效状态,因为变异和交叉操作不关心算法的语义,例如可以生成以下字符串:1+/3-2*
。需要决定处理这些无效状态的方法。
遗传程序表示为动作和值的树结构,通常是嵌套的数据结构。这是一个相同的例子,如图所示:
-
/ \
* *
/ \ / \
1 * 5 6
/ \
x 3
还必须为此编码编写解析器,但遗传编程不会(通常)产生无效状态,因为突变和交叉操作在树的结构内工作。
遗传算法
遗传计划
遗传算法(GA)是模拟自然进化过程的搜索算法,其中每个个体都是候选解决方案:个体通常是“原始数据”(无论以何种编码格式定义)。
遗传编程(GP)被认为是GA的一个特例,其中每个人都是计算机程序(不仅仅是“原始数据”)。 GP探索算法搜索空间并演化计算机程序以执行定义的任务。
为了简单起见,(在我看来的过程中)遗传编程是遗传算法的一种应用。遗传算法用于通过计算机程序创建另一种解决方案。
实际答案:
GA是在使用人口并将人口世代发展为更好的状态时。 (例如人类如何通过种子和更好的基因从动物进化到人类)
GP是通过已知的问题定义生成代码以更好地解决问题。 (GP通常会给出很多if / else语句,这将解释解决方案)
上面有很多好的部分答案。正如Koza在关于这一主题的开创性文本中所说的那样,“[如果GA是解决问题的最佳解决方案,那么GP将发展GA来解决它]。”简而言之,GP是一种GA,可以演变由成本函数评估的程序。基因组是一个程序而不是成本函数恕我直言的输入集合的事实是物质差异。
遗传编程比遗传算法更强大。遗传算法的输出是一个数量,而遗传编程的输出是另一个计算机程序。