Roulette Wheel Selection
轮盘法, 用于遗传算法中的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 )
转自:http://www.cnblogs.com/heaad/archive/2010/12/23/1914725.html