以下**實現了乙個簡單的花朵進化的模擬過程。
花朵的種群數量是10,共進化了50代。
通過執行程式,你會發現通過不斷的進化,種群的總的適應環境的能力在逐步提高(fitness的值下降)。
實現**:
using system;
using system.collections.generic;
using system.text;
namespace ga}}
class world
/**
/// 初始化第一代花朵的基因結構
///
public void init()
currenttemperature = rnd.next(1, 75);
currentwater = rnd.next(1, 75);
currentsunlight = rnd.next(1, 75);
currentnutrient = rnd.next(1, 75);
currentbeneficialinsect = rnd.next(1, 75);
currentharmfulinsect = rnd.next(1, 75);
}/**
/// 越大說明花朵的適應環境的能力差,**明適應環境的能力強
///
///
///
private int fitness(int flower)
/**
/// 排除適應能力差的花朵,讓適應能力強的花朵雜交繁殖,產生下一代。同時有一定的概率變異。
///
public void evolve()
temperature[leastfitindex] = temperature[rnd.next(1, 10)];
water[leastfitindex] = water[rnd.next(1, 10)];
sunlight[leastfitindex] = sunlight[rnd.next(1, 10)];
nutrient[leastfitindex] = nutrient[rnd.next(1, 10)];
beneficialinsect[leastfitindex] = beneficialinsect[rnd.next(1, 10)];
harmfulinsect[leastfitindex] = harmfulinsect[rnd.next(1, 10)];
for (i = 1; i < kmaxflowers; i++)
for (i = 1; i < kmaxflowers; i++)
for (i = 1; i < kmaxflowers; i++)
}/**
/// 顯示種群中個體對環境的適應能力,還有所有個體對環境的適應能力之和。
///
public void show()
console.writeline("fitness sum is " + sum); }}
}
遺傳演算法 C
示例為計算函式為y x x 1024的最大值,32 x 31.參考 採用輪盤賭演算法作為選擇運算元的演算法 更新下一代 基於輪盤選擇選擇方法,進行基因型的選擇 private static void updatenext else console.writeline totalfitvalue to...
遺傳演算法 C
chromosome的定義,沒有定義複製方法,所以,在往子代傳遞的時候,變成了引用傳遞,在傳遞了幾代之後,後代其實全部變成了乙個染色體 隨機數取值的時候臨時定義的random變數,導致迴圈中每次取到的隨機數有很大程度是一樣的 輪盤賭選擇時,沒有定義子代種群,直接在當前種群中操作,會覆蓋一部分父代,導...
遺傳演算法及matlab簡單實現
遺傳演算法的實現 遺傳演算法的一次迭代稱為一代,每一代都有一組解。新的一組解不但可以有選擇的保留一些適度值高的舊的解,而且可以包括一些由其它解結合得到的新解。最初的一組解 初始群體 是隨機生成的,之後的每組解由遺傳操作生成。每個解都通過乙個與目標函式相關的適應度函式給予評價,通過遺傳過程不斷重複,達...