遺傳演算法 C

2021-08-03 06:38:04 字數 1597 閱讀 3847

示例為計算函式為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 舉乙個例子,遺傳演算法和梯度下降 梯度下降和遺傳演算法都是優化演算法,而梯度下降只是其中最基礎的那乙個,它依靠梯度與方向導數的關係計算出最優值...