輪盤賭算法及其實現


參考:http://blog.sina.com.cn/s/blog_67c17d1c01017hyt.html

1、基本思想:個體被選中的概率與其適應度函數值成正比

設群體大小為n,個體i的適應度為Fi,則個體i被選中遺傳到下一代群體的概率為:

2、工作過程:

設想群體全部個體的適當性分數由一張餅圖來代表 (見圖)。

群體中每一染色體指定餅圖中一個小塊。塊的大小與染色體的適應性分數成比例,適應性分數愈高,它在餅圖中對應的小塊所占面積也愈大。為了選取一個染色體,要做的就是旋轉這個輪子,直到輪盤停止時,看指針停止在哪一塊上,就選中與它對應的那個染色體。

若產生的隨機數是0.81,則6號個體被選中。

 

由此可以看出:

1、輪盤賭算法與個體的排列順序有關;

 

c++實現:

int RouletteWheelSelection() { srand(0);//定義rand觸發隨機值得初始值
    double m=rand()/double(RAND_MAX); //產生一個[0,1)的隨機值;
    int Probability_Total=0; int Selection=0
    for(int i=0;i<SIZE;i++//SIZE是個體數量的大小  { Probability_Total=Probability_Total+Probability[i]; if(Probability_Total>=m) { Selection=i; break; } return Selection; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM