public void NextGeneration() { Individu newIndividu; Individu parent; int nbParent; int i; List <Individu> nextGen = new List <Individu>(); List <Individu> parents = new List <Individu>(); nextGen.Clear(); // 1) SURVIE // élitisme, nous conservons que le meilleur nextGen.Add(meilleur()); nextGen[0].SongNumber = 1; for (i = 2; i <= 12; i++) { parents.Clear(); // 2) SELECTION des parents nbParent = (rand.Next(0, 100) <= crossoverRate ? 2 : 1); parent = meilleur(tirage(2)); for (int a = 1; a <= nbParent; a++) { while (parents.Contains(parent)) { parent = meilleur(tirage(2)); } parents.Add(parent); } // 3) CROSSOVER newIndividu = new Individu(parents); // 4) MUTATION newIndividu.muter(mutationRate); newIndividu.SongNumber = i; nextGen.Add(newIndividu); } // on vide la liste des individus de la génération actuelle individus.Clear(); // on met les individus de la génération suivante dans la liste des individus de la génération actuelle individus = nextGen; nbGeneration++; }
public void NextGeneration() { Individu newIndividu; Individu parent; int nbParent; int i; List<Individu> nextGen = new List<Individu>(); List<Individu> parents = new List<Individu>(); nextGen.Clear(); // 1) SURVIE // élitisme, nous conservons que le meilleur nextGen.Add(meilleur()); nextGen[0].SongNumber = 1; for (i = 2; i <= 12; i++) { parents.Clear(); // 2) SELECTION des parents nbParent = (rand.Next(0, 100) <= crossoverRate ? 2 : 1); parent = meilleur(tirage(2)); for (int a = 1; a <= nbParent; a++) { while (parents.Contains(parent)) parent = meilleur(tirage(2)); parents.Add(parent); } // 3) CROSSOVER newIndividu = new Individu(parents); // 4) MUTATION newIndividu.muter(mutationRate); newIndividu.SongNumber = i; nextGen.Add(newIndividu); } // on vide la liste des individus de la génération actuelle individus.Clear(); // on met les individus de la génération suivante dans la liste des individus de la génération actuelle individus = nextGen; nbGeneration++; }