轮盘赌选择解决思路

轮盘赌选择
重温轮盘赌选择  
(Roulette Whell Selection Revisited )  
    
   让我们从轮盘赌选择算法开始。请记住,这一个函数的功能是从群体中选择一个 基因组,选中的几率正比于基因组的适应性分数。  
    
   SGenome& CgaBob::RouletteWheelSelection()  
   {  
   double fSlice = RandFloat()*m_dTotalFitnessScore;  
    
   我们从零到整个适应分范围内随机选取了一实数fSlice 。我喜欢把此数看作整个  
   适应性分数饼图中的一块,如早先在图3.4中所示。 [但并不是其中一块,译注]  
    
   double cfTotal = O;  
   int SelectedGenome = 0;  
   for (int i=O; i <m_iPopSize; ++i)  
   {  
   cfTotal += m_vecGenomes[i].dFitness;  
   if (cfTotal > fSlice)  
   {  
   SelectedGenome = i;  
   break;  
   }  
   }  
   return m_vecGenomes[SelectedGenome];  
   }  
大家帮助看看这段代码,我怎么看不出这种选择方法中,适应度高的被选中的机率就高呢? 
 
这是《游戏开发中的人工智能技术》一书的一个章节,请高人指点。 
原文内容:
http://book.youkuaiyun.com/bookfiles/206/1002069949.shtml 
 


[解决办法]
轮盘的总面积是m_dTotalFitnessScore,每一个染色体的适应性dFitness越大,它在这个轮盘面积中的比例也越大,
 fSlice = RandFloat()*m_dTotalFitnessScore; 
这句表示轮盘上的指针随机转到了一个位置,指针和起点的距离是fSlice,起点是从染色体数组的第一条算起,后面的那个循环就是
要发现指针指到了哪一条染色体的范围内。
因为每一个染色体的适应性dFitness越大,它在这个轮盘面积中的比例也越大,它被选中的机会也就越大。
本文来自:读书人网(
http://www.reader8.cn/)原文链接:http://www.reader8.cn/jiaocheng/20120217/2005927.html

旅行商问题遗传算法的设计思路如下: 1. 初始化种群,随机生成一些路径作为初始种群。 2. 对每个个体(即路径),计算其适应度(即路径长度),并根据适应度进行选择。 3. 选择的过程中,通常使用轮盘赌选择法或者锦标赛选择法。轮盘赌选择法是将每个个体的适应度转化为概率,并根据概率进行选择;锦标赛选择法是将种群分成若干组,每组选择适应度最好的个体进行进化。 4. 对于选择出的个体,进行交叉和变异操作。交叉操作是将两个个体的染色体进行交叉,生成新的个体;变异操作是在个体的染色体中随机改变一些基因,生成新的个体。 5. 对新生成的个体进行适应度计算,并根据适应度进行选择。 6. 重复步骤 3 到步骤 5,直到达到预定的迭代次数或者满足终止条件。 7. 最终得到的个体中,适应度最好的个体即为最优解。 具体实现时,需要注意以下几点: 1. 选择合适的编码方式,将路径映射到染色体中,例如,可以使用二进制编码、序列编码等。 2. 设定适当的选择、交叉和变异概率,以及种群大小、迭代次数等参数。 3. 选择合适的适应度函数,例如,可以使用路径长度作为适应度函数。 4. 选择合适的选择方法和交叉、变异方法,可以根据实际情况进行调整。 遗传算法是一种常用的优化算法,可以解决旅行商问题等复杂的优化问题。但由于其运算量较大,需要一定的计算资源和时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值