专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 人工智能

轮盘赌选择解决思路

发布时间:2011-07-03 09:18:04 文章来源:www.iduyao.cn 采编人员:星星草
轮盘赌选择
重温轮盘赌选择  
(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.csdn.net/bookfiles/206/1002069949.shtml 
 


------解决方案--------------------
轮盘的总面积是m_dTotalFitnessScore,每一个染色体的适应性dFitness越大,它在这个轮盘面积中的比例也越大,
 fSlice = RandFloat()*m_dTotalFitnessScore; 
这句表示轮盘上的指针随机转到了一个位置,指针和起点的距离是fSlice,起点是从染色体数组的第一条算起,后面的那个循环就是
要发现指针指到了哪一条染色体的范围内。
因为每一个染色体的适应性dFitness越大,它在这个轮盘面积中的比例也越大,它被选中的机会也就越大。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: