2015-10-26 65 views
0

我已經編寫了遺傳算法的代碼,並具有交叉函數,變異函數,父親選擇函數和函數來傳遞基因。現在我想把它放在一起,並想知道下面的代碼是否是好的編程實踐。遺傳算法C++最後階段

Species Parents[popSize]; 
Species Children[popSize]; 

for(int gen = 0 ; gen < 100 ; gen++) 
{ 
    for(int i = 0; i < popSize ; i ++) 
    { 
     int parentA = chooseParent(Parents); 
     int parentB = chooseParent(Parents); 
     crossOver(Parents[parentA] , Parents[parentB] , Children[i]); 
     Children[i].mutate(); 
    } 
    for(int i = 0; i < popSize ; i ++) 
    { 
     transfereGenes(Children[i], Parents[i]); 
    } 
} 
+1

我想,這應該是對HTTPS://codereview.stackexchange .com/ – Thijser

+0

對不起,我不知道。它違反了這個堆棧交換嗎? – user5351703

+1

嗯,stackoverflow主要是針對「我該如何做X」的問題,而codereview更多的是關於「我寫這段代碼你覺得怎麼樣?」所以,如果你移動它,你更有可能獲得高質量的評論。 – Thijser

回答

0

這是一個簡單,清晰,標準的遺傳算法實現。對於許多應用程序來說已經足夠

反正你可以考慮一些要點:使用數組

  1. std::vector代替它,以獲得靈活性不失速度(方式

    • 例如有就是那個考慮的基本遺傳算法的一些變化可變大小的羣體)
    • 它允許通過swap函數(對於較大的種羣來說更快)來交換ChildrenParents
  • 您可以更改chooseParent函數以在單個「步驟」中提取幾個人(以及通常作爲父母的個人)。錦標賽的選擇很簡單。
  • 你應該添加一些控制參數(變異概率,交叉...)。許多問題對這些參數非常敏感,您可以在進化過程中考慮不同的值。
  • 爲嚴格C++相關要點:
    1. 你應該avoid the postfix increment operatorgen++i++
    2. 100magic number