实践表明,遗传算法解最优化问题的计算效率比较高、适用范围相当广。为了解释这一现象,Holland给出了模式定理。所谓模式,就是某些码位取相同值的编码的集合。模式定理说明在进化过程的各代码中,属于适应度高、阶数低且长度短的图式的编码数量将随代数以指数形式增长[6]。最近的研究则表明,上述遗传算法经适当改进后对任意优化问题以概率1收敛于全局最优解[5]。
2.2 遗传算法的基本结构
在遗传算法中,将问题的求解的过程,看成一个在候选解空间寻找满足问题要求的解或近似解的搜索过程。遗传算法的重点在适应规划和适应度量方面。遗传算法的适应规划用于指导算法怎么样在空间进行搜索,一般采用遗传算子(或称遗传操作)诸如交配(Crossover)和变异(Mutation)等,以及模拟自然过程的选择机制,采用计算适应值的方法来评估一个候选解的优劣。
遗传算法求解问题的基本步骤可以描述如下:
1. 首先生成一组初始的候选解群体(假设为N个候选解个体),称为第0代;
2. 计算群体中各个候选解的适应值;
3. 如果有候选解满足算法终止条件, 算法终止,否则继续4;
4. 根据交配概率,将候选解群体中的个体随机两两配对,进行交配操作以生成新的候选解;
5. 根据变异概率,对4中生成的候选解群中的每个个体进行变异操作;
6. 使用选择机制形成新一代候选解;转2。
GA算法具有下述特点: GA是对问题参数的编码组进行,而不是直接对参数本身;GA的搜索是从问题解的编码组开始搜索,而不是从单个解开始;GA使用目标函数值(适应度)这一信息进行搜索,而不需导数等其他信息;GA算法使用的选择、交叉、变异这三个算子都是随机操作,而不是确定规则。
遗传算法通过编码和遗传操作,达到了处理的并行性,可以同时处理群体中的多个个体,即同时对搜索空间内的多个解进行评估,具有较好的全局搜索性能,减少了限于局部最优解的风险。
3. 遗传算法用于频率分配
3.1 算法的基本流程
采用遗传算法的FAP基本流程
3.2 遗传算子的选择
3.2.1 选择算子
选择算子在父代群体中选出父体和母体。生物界中,父母亲素质比较高的其后代素质高的概率也大。模拟这种现象,在FAP中选择算子采用轮赌算法实现。
轮赌算法流程如下:
sum=0; i=0;
wheelpos=rand()*sumfitness;
for(sum<wheelpos && i<pop-size)
{
i ;
if(i≥pop-size)
{
sum=0; i=0
wheelpos=rand()*sumfitness;
}
j=rand()*pop-size;
sum =fitness[j];
}
return j;
3.2.2 交叉算子
交叉算子让父体和母体互相交换某部分基因而产生下一代个体的雏形,起全局搜索的作用。交叉算子通常有单点交叉、双点交叉、多点交叉等等。在频率自动分配的算法中,为了不破坏基因段内部频点间的关系,采用单点交叉和双点交叉比较合适。此外,在生物界中并不是两个个体相遇了就一定会结合,模拟此现象,引入交叉因子pc。
其基本流程如下:
//flip函数中,产生一个0到1的随机数,若小于pc,则返回1,否则返回0
if(flip(pc))
crossover1(mother,father);
else if(flip(pc))
crossover2(mother,father);
else
copy(mother);
copy(father);
3.2.3 变异算子
变异算子对后代个体的某些基因进行变异,起局部搜索的作用.生物界中,父母的染色体交叉后产生后代个体的染色体雏形,这个雏形在成长过程中会发生基因的变异,正是这种变异使得下一代的群体中会出现各种特征的个体.另外,生物界中并非每个基因都会变异,模拟此现象,引入变异因子pm,使用方法与交叉因子类似。
其基本流程如下:
while(all frequentpoint)
{
if(flip(pm)) mutate(frequentpoint);}
4. 工程上需要注意的问题
4.1 初始候选种群
由于遗传算法和其它启发式算法一样,不对全部解空间进行穷举搜索,因此初始的候选解群体的选择会对得到最终解的速度和质量有。初始的候选解群体在解空间内分布得越均匀,它们拥有的遗传基因就越有代表性。实践中采用文献[7]的GECP得到以各个顶点为主顶点的可行解作为初始候选种群。
