利用C语言实现遗传编程1.pdf
维普资讯
周俊峰
遗传编程是一个与人工智能相关的、新的形式 ,它基于达 ·树形处理程序存在于一些高级语言中.也就是说 .现有
尔文的进化、遗传思想发展而来 。有关遗传编程最早的著作是 的一些高级语言可 以对树形结构进行操作 。
JohnKoza的((GeneticProgramming))--书.书中描述 了一套用于
1.2 遗传编程的操作符 (operator)
随机修改已有LISP字符串的LISP程序集合。本文试图向读者清楚
地介绍遗传编程的范例 ,及其在C语言中的实现。 遗传编程使用 四种通用的操作符来实现计算机程序 的进
化 ,它们是 :交叉 (Cr0SS0Ver)、再现 (rePr0duCti0n)、转变
1.遗传绾程
(mutation)、倒置 (inversion)。
1.1 什么是遗传编程? (1)交叉 (crossover)
Koza认为 ”交叉”以及沿续其后的”再现 ”是两个最重要的
遗传编程的许多理论与遗传算法是一样的.同样都是通过
遗传操作符。交叉保证了程序群体 的遗传多样性。与遗传算法
遗传操作符 (genetiC operators)应用了达尔文的”适者生存
中的交叉功能类似 .遗传编程 中的交叉行为是在两个程序 中进
(survival-of—the—fittest)”理论 :但是仍有许多不同之处。遗传编
行的,并会产生两个子程序。具体地说 .在每个程序中任意选取
程所使用的结构与遗传算法的编码字符串就大相径庭 。图1描
两个结点 ,将 以这两个结点为根的”子树 ”进行交换 .从而产生
述了一个遗传编程的简单结构 。
两个新的程序 。这些新程序将成为后代程序 的一部分并被评
对于这个树形结构 .其等价的LISP表达式为 (+ 12(IF(>
估 ,见图2。
TIME 10)34)。需要注意的是 :
(2)再现 (reproduction)
· 当前 .它采用了更为灵活、清晰的可变分层结构 .而不
”再现 ”是遗传编程 中第二个主要 的操作 .主要是将当前程
是一维字符结构;
序 中选定的成员拷贝到后代程序中。Koza对于使用交叉、再现操
· 该结构 由一些简单函数组成 .这些函数可以通过使用
作对群体收敛性的影响有一段说明:”……在遗传编程中.当个
一 种高级语言很容易的被编译出来 :
体复制它自身的时候 一般会产生两种不同的后代 ……这点与
达尔文的 再现 操作会导致一种收敛趋势相似 :但是 .不同的