示例為計算函式為y = -x*x+ 1024的最大值,-32<=x<=31.
參考:
採用輪盤賭演算法作為選擇運算元的演算法
/// /// 更新下一代;
/// 基於輪盤選擇選擇方法,進行基因型的選擇;
///
private static void updatenext()
else
}console.writeline("totalfitvalue " + totalfitvalue);
//算出每個的fit percent;
for (int i = 0; i < chromosomes.count; i++)
else
console.writeline("fitvaluepercent " + i + " " + chromosomes[i].fitvaluepercent);
}計算累積概率;
第乙個的累計概率就是自己的概率;
chromosomes[0].probability = chromosomes[0].fitvaluepercent;
console.writeline("probability 0 " + chromosomes[0].probability);
double probability = chromosomes[0].probability;
for (int i = 1; i < chromosomes.count; i++)
console.writeline("probability " + i + " " + chromosomes[i].probability);
}chromosomeschild.clear();
//輪盤選擇選擇方法,用於選出前兩個;
for (int i = 0; i < chromosomes.count; i++)
else}}
}for (int i = 0; i < chromosomes.count; i++)
}
/// /// 交叉操作;
///
private static void crossoperate()
console.writeline("交叉的rand " + rand1 + " - " + rand2);
for (int j = 0; j < chromosomes.count; j = j + 2)
chromosomes[j].fitvalue = getfitvalue(decode(chromosomes[j].bits));
chromosomes[j + 1].fitvalue = getfitvalue(decode(chromosomes[j + 1].bits));
}}
/// /// 變異操作;
///
private static void variationoperate()
else
chromosomes[row].fitvalue = getfitvalue(decode(chromosomes[row].bits));
}}
原始碼: 遺傳演算法 C
chromosome的定義,沒有定義複製方法,所以,在往子代傳遞的時候,變成了引用傳遞,在傳遞了幾代之後,後代其實全部變成了乙個染色體 隨機數取值的時候臨時定義的random變數,導致迴圈中每次取到的隨機數有很大程度是一樣的 輪盤賭選擇時,沒有定義子代種群,直接在當前種群中操作,會覆蓋一部分父代,導...
python遺傳演算法 Python 遺傳演算法實現
關於遺傳演算法 遺傳演算法是仿照自然界中生物進化而產生的一類優化演算法。個人感覺遺傳演算法簡單粗暴,適應性廣。關於遺傳演算法的介紹網上有很多了,這裡按照我自己的理解簡單概括一下。編碼解碼,將待優化的引數編碼為dna序列,最簡單直接的為二進位制編碼 即有兩種鹼基的dna鏈 生成隨機初代 選擇,適應度 ...
遺傳演算法 python 簡書 遺傳演算法
優化的演算法有很多種,從最基本的梯度下降法到現在的一些啟發式演算法,如遺傳演算法 ga 差分演化演算法 de 粒子群演算法 pso 和人工蜂群演算法 abc 舉乙個例子,遺傳演算法和梯度下降 梯度下降和遺傳演算法都是優化演算法,而梯度下降只是其中最基礎的那乙個,它依靠梯度與方向導數的關係計算出最優值...