public void Run() { /*À chaque itération, il faut : * Lancer l’évaluation de chaque individu. * Récupérer le meilleur individu et lancer son affichage. * Créer une nouvelle population (en utilisant l’élitisme pour conserver la meilleure solution jusqu’alors puis la sélection du ou des parents si le crossover s’applique). * Appliquer la survie des descendants (qui deviennent la population en cours).*/ bestFitness = Parameters.minFitness + 1; while (generationNb < Parameters.generationsMaxNb && bestFitness > Parameters.minFitness) { // Evaluation foreach (Individual ind in population) { ind.Evaluate(); // Logique floue (Test) [Extraction des delais et la distance, Application de la logique floue]. } Individual bestInd = population.OrderBy(x => x.Fitness).FirstOrDefault(); // Meilleur individu (stats) program.PrintBestIndividual(bestInd, generationNb); // Affichage du meilleur individu à chaque generation. bestFitness = bestInd.Fitness; // (Graphe (Abcisse : generationNb , Ordonnée : bestInd)). // Sélection et reproduction List <Individual> newGeneration = new List <Individual>(); // Création de la nouvelle génération. // Elitisme : newGeneration.Add(bestInd); // Ajout du meilleur individu. for (int i = 0; i < Parameters.individualsNb - 1; i++) { // Un ou deux parents ? if (Parameters.randomGenerator.NextDouble() < Parameters.crossoverRate) { // Choisir parents Individual father = Selection(); Individual mother = Selection(); // Reproduction newGeneration.Add(IndividualFactory.getInstance().getIndividual(problem, father, mother)); } else { // Choisir parent Individual father = Selection(); // Reproduction newGeneration.Add(IndividualFactory.getInstance().getIndividual(problem, father)); } } // Survie Survival(newGeneration); generationNb++; } }
protected string problem; // Le nom du problème à résoudre. public EvolutionaryProcess(IIHM _program, string _problem) // Constructeur. { // P : la chaîne représentant le problème à résoudre et la référence vers l’IHM. program = _program; // IHM problem = _problem; // Probleme à resoudre. IndividualFactory.getInstance().Init(problem); // internal void Init(string type) : Initialiser l’environnement de vie des individus. population = new List <Individual>(); // Liste d'individus. for (int i = 0; i < Parameters.individualsNb; i++) { population.Add(IndividualFactory.getInstance().getIndividual(problem)); // public Individual getIndividual(String type) : Creation dun individu aleatoirement. } }