轮盘法, 用于遗传算法中的selection方法。
轮盘赌算法/** 按设定的概率,随机选中一个个体* P[i]表示第i个个体被选中的概率*/int RWS(){ m = 0; r =Random(0,1); //r为0至1的随机数 for(i=1;i<=N; i++) { /* 产生的随机数在m~m+P[i]间则认为选中了i * 因此i被选中的概率是P[i] */ m = m + P[i]; if(r<=m) return i; }}
有N个序列,经过计算每一个的fitness, fitness[0...N-1], 他们的和记做sum, P[i]=fitness[i]/sum.
基本遗传算法伪代码/** 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 )
转自: