遗传算法
简介
遗传算法(GA),是一种元启发式自然选择的过程,属于进化算法(EA)大类。遗传算法通常是利用生物启发算子,如变异、交叉和选择来生成高质量的优化和搜索问题的解决方案。
遗传算法借鉴了生物进化理论,将问题模拟成一个生物进化的过程,通过遗传、交叉、突变、自然选择等操作产生下一代的解,并逐步淘汰适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。
遗传算法本质上是一种搜索算法,搜索算法的共同特征为:
1.首先组成一组候选解
2.依据某些适应性条件测算这些解的适应度
3.根据适应度保留某些候选解,放弃其它候选解
4.对保留的候选解进行某些操作,生成新的候选解
交叉(Crossover):2条染色体交换部分基因,来构造下一代的2条新的染色体。
交叉前:
00000|011100000000|10000
11100|000001111110|00101
交叉后:
00000|000001111110|10000
11100|011100000000|00101
染色体交叉是以一定的概率发生的,这个概率记为Pc 。
变异(Mutation):在繁殖过程,新产生的染色体中的基因会以一定的概率出错,称为变异。变异发生的概率记为Pm 。
变异前:
000001110000000010000
变异后:
000001110000100010000
适应度函数 ( Fitness Function ):用于评价某个染色体的适应度,用f(x)表示。有时需要区分染色体的适应度函数与问题的目标函数。例如:0-1背包问题的目标函数是所取得物品价值,但将物品价值作为染色体的适应度函数可能并不一定适合。适应度函数与目标函数是正相关的,可对目标函数作一些变形来得到适应度函数。
遗传算法伪代码
/*
-
Pc:交叉发生的概率
-
Pm:变异发生的概率
-
M:种群规模
-
G:终止进化的代数
-
Tf:进化产生的任何一个个体的适应度函数超过Tf,则可以终止进化过程
*/
初始化Pm,Pc,M,G,Tf等参数。随机产生第一代种群Pop
do
{
计算种群Pop中每一个体的适应度F(i)。
初始化空种群newPop
do
{
根据适应度以比例选择算法从种群Pop中选出2个个体
if ( random ( 0 , 1 ) < Pc )
{
对2个个体按交叉概率Pc执行交叉操作
}
if ( random ( 0 , 1 ) < Pm )
{
对2个个体按变异概率Pm执行变异操作
}
将2个新个体加入种群newPop中
} until ( M个子代被创建 )
用newPop取代Pop
}until (任何染色体得分超过Tf, 或繁殖代数超过G)
遗传算法优化
(1)精英主义选择:是基本遗传算法的一种优化。为了防止进化过程中产生的最优解被交叉和变异所破坏,可将每一代中的最优解原封不动地复制到下一代中。
(2)插入操作:可在3个基本操作的基础上增加一个插入操作。插入操作将染色体的某个随机片段移位到另一个随机的位置。