GAlib的使用
1 遗传算法类
遗传算法类(GAGeneticAlgorthm)是一个抽象类,给出了遗传算法通用的算子和数据结构,包含了变异概率,交叉概率,进化代数以及群体相关参数的统计信息,同时定义了最大或最小化目标函数、控制显示频率及设置相关参数的操作。算法内置的进化停止准则是最大进化代数准则和最佳个体收敛准则。
根据群体更新机制的不同,GAlib 提供的遗传算法可分为四种。
- 一是标准遗传算法(GASimpleGA),该算法仅保留父代最佳个体或不保留父代群体中任何个体,子代群体完全由交叉变异等遗传操作产生;
- 二是稳态遗传算法(GASteadyStateGA),子代群体由进化操作产生的部分新个体和父代群体中部分个体按一定比例共同组成;
- 三是增量遗传算法(GAIncremen talGA),每代进化操作只产生一个和两个新个体,新个体替换其父代群体中的某些个体;
- 四是种群遗传算法(GADemeGA),该算法同时控制数个群体进行演化,每个群体的进化采用稳态遗传算法,群体间进行交换个体操作。
2 染色体类
遗传算法不能直接处理问题空间的参数,当使用遗传算法解决优化问题时,必须把相关参数转换成遗传空间的“染色体”,染色体在本质上是一种表示问题解的数据结构。
染色体类(GAGenome)是一个抽象基类,定义了一些常量和函数原型、具体的染色体及其派生类的函数原型。
GAlib 为其提供了四个派生类:
- 链表型染色体(GAListGenome)
- 树型染色体(GATree Genome)
- 数组型染色体(GAArrayGenome
- 二进制串型染色体(GABinaryString)。
在实际应用中可根据问题特点选择染色体类型。遗传算法在运行过程中对染色体的操作主要有五种:初始化、变异、交叉、评估和比较操作,初始化操作随机确定群体中已存在个体的参数,变异和交叉操作随染色体种类的不同而不同。例如,链表型染色体的变异操作有次序交换、节点交换、节点删除和节点增加;交叉操作为单点交叉。 评估操作通过指向由用户定义的目标函数的指针来调用目标函数,用以评估基因组是否比其它同类更适宜生存,比较操作用于确定进化个体之间的 差别。
3 进化种群类
进化种群类(GAPopulation)是染色体的容器,包含种群内染色体目标分数的平均值、最大值、最小值等统计数据,定义了初始化算子和评估算子。
进化群体类(GA Populat ion) 是进化个体(基因组) 的容器。进化群体类有自己的初始化算子(缺省为直接调用群体所含每个个体的初始化算子) 和评估算子(缺省为直接调用群体所含每个个体的评估算子)。进化群体类跟踪记录群体中最佳个体、适应度平均值、以及表征群体偏差和多样性的参数。
此外进化种群类实现了选择方法(GASelectionScheme)以在进化中决定使用群体中的哪个染色体参与产生子代的交叉操作,而适应度定标方法(GAScalingScheme)用来决定染色体的适应度。
4 适应度定标方法类
