예제 #1
0
        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++;
            }
        }
예제 #2
0
        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.
            }
        }