//当前种群进化 public void Evolve(SelectionType selectionType) { Population parents = null; if (selectionType == SelectionType.Elite) { parents = EliteSelect(this); } else if (selectionType == SelectionType.Roulette) { parents = RouletteSelect(this); } else if (selectionType == SelectionType.Hybrid) { parents = HybridSelect(this); } //crossover 得到子女种群 if (parents != null) { var children = Crossover(Chromosomes.Count - parents.Chromosomes.Count); Chromosomes.Clear(); //将选择出来的所有父母染色体,及他们 crossover 得到的子女,作为新的种群 Chromosomes.AddRange(parents.Chromosomes); Chromosomes.AddRange(children.Chromosomes); } //变异 Mutate(); }
private void MutatePopulation() { int populationQty = Chromosomes.Count * 5; Random rand = new Random(); while (Chromosomes.Count < populationQty) { var firstIndex = rand.Next(0, Chromosomes.Count); var secondIndex = rand.Next(0, Chromosomes.Count); Chromosomes.AddRange(CrossoverChromosomes(Chromosomes[firstIndex].GetTrainingGenes(), Chromosomes[secondIndex].GetTrainingGenes())); } for (int i = 0; i < Chromosomes.Count; i++) { Chromosomes[i].Mutate(); } }
public void JoinPopulation(Population p) { Chromosomes.AddRange(p.Chromosomes); }