Esempio n. 1
0
        //当前种群进化
        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();
        }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 3
0
 public void JoinPopulation(Population p)
 {
     Chromosomes.AddRange(p.Chromosomes);
 }