首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

轮盘赌取舍

2013-01-06 
轮盘赌选择重温轮盘赌选择(RouletteWhellSelectionRevisited)让我们从轮盘赌选择算法开始。请记住,这一个函

轮盘赌选择
重温轮盘赌选择       
(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越大,它在这个轮盘面积中的比例也越大,它被选中的机会也就越大。

热点排行