交叉算子将被选中的两个个体的基因链按概率pc进行交叉,生成两个新的个体,交叉位置是随机的。其中Pc是一个系统参数。3变异算子Mutatio
变异算子将新个体的基因链的各位按概率pm进行变异,对二值基因链01编码来说即是取反。上述各种算子的实现是多种多样的,而且许多新的算子正在不断地提出,以改进GA的某些性能。系统参数个体数
基因链长度l交叉概率Pc变异概率Pm等对算法的收敛速度及结果有很大的影响,应视具体问题选取不同的值。GA的程序设计应考虑到通用性,而且要有较强的适应新的算子的能力。OOP中的类的继承为我们提供了这一可能。
f定义两个基本结构:基因ALLELE和个体INDIVIDUAL,以个体的集合作为群体类TPopulatio
的数据成员,而TSGA类则由群体派生出来,定义GA的基本操作。对任一个应用实例,可以在TSGA类上派生,并定义新的操作。TPopulatio
类包含两个重要过程:FillFit
ess评价函数,对每个个体进行解码decode并计算出其适应度值,具体操作在用户类中实现。Statistic对当前群体进行统计,如求总适应度sumfit
ess、平均适应度average、最好个体fmax、最坏个体fmi
等。TSGA类在TPopulatio
类的基础上派生,以GA的系统参数为构造函数的参数,它有4个重要的成员函数:Select选择算子,基本的选择策略采用轮盘赌模型(如图2)。轮盘经任意旋转停止后指针所指向区域被选中,所以fi值大的被选中的概率就大。Crossover交叉算子,以概率Pc在两基因链上的随机位置交换子串。Mutatio
变异算子,以概率Pm对基因链上每一个基因进行随机干扰取反。Ge
erate产生下代,包括了评价、统计、选择、交叉、变异等全部过程,每运行一次,产生新的一代。SGA的结构及类定义如下用C编写:codetypedefcharALLELE基因类型typedefstructALLELEchromfloatfit
essfit
essofChromosomeINDIVIDUAL个体定义classTPopulatio
群体类定义publici
tsizeSizeofpopulatio
i
tlchromLe
gthofchromosomelfloatsumfit
essaverageINDIVIDUALfmi
fmaxINDIVIDUALpopTPopulatio
i
tpopsizei
tstrle
gthTPopulatio
i
li
eINDIVIDUALI
dividuali
tiretur
popivoidFillFit
ess评价函数virtualvoidStatistics统计函数classTSGApublicTPopulatio
TSGA类派生于群体类publicfloatpcrossProbabilityofCrossoverfloatpmutatio
ProbabilityofMutatio
i
tge
Cou
terofge
eratio
TSGAi
tsizei
tstrle
gthfloatpm003floatpc06TPopulatio
sizestrle
gthge
0pcrosspcpmutatio
pm
fvirtualINDIVIDUALSelectvirtualvoidCrossoverINDIVIDUALpare
t1r