// Constructeur avec deux parents (crossover et mutations) public TSPIndividual(TSPIndividual father, TSPIndividual mother) { /*On choisit un point de coupure aléatoirement, et on copie les villes avant ce point depuis * le premier parent. On parcourt ensuite le deuxième parent pour ne récupérer que les villes * non encore visitées, en conservant leur ordre. Enfin, on appelle l’opérateur de mutation.*/ this.genome = new List <IGene>(); // Crossover int cuttingPoint = Parameters.randomGenerator.Next(father.genome.Count); // Point de coupure du pere. foreach (TSPGene g in father.genome.Take(cuttingPoint)) // Jusqu'au point de coupure. { this.genome.Add(new TSPGene(g)); } foreach (TSPGene g in mother.genome) { if (!genome.Contains(g)) // Si le genome ne contient pas deja les villes. { this.genome.Add(new TSPGene(g)); } } // Mutation Mutate(); }
// Constructeur avec un parent (copie + mutations) public TSPIndividual(TSPIndividual father) { /*reconstruit un génome en faisant une copie des gènes un à un, * puis on appelle notre opérateur de mutation.*/ this.genome = new List <IGene>(); foreach (TSPGene g in father.genome) { this.genome.Add(new TSPGene(g)); } Mutate(); }
public Individual getIndividual(String type, Individual father, Individual mother) { // Creation d'un individu à partir de deux parents. Individual ind = null; switch (type) { case "Maze": ind = new MazeIndividual((MazeIndividual)father, (MazeIndividual)mother); break; case "TSP": ind = new TSPIndividual((TSPIndividual)father, (TSPIndividual)mother); break; } return(ind); }
public Individual getIndividual(String type) { // Creation dun individu aleatoirement. // Paramètre : le problème à résoudre sous la forme d’une chaîne & puis les parents potentiels. Individual ind = null; switch (type) { case "Maze": ind = new MazeIndividual(); break; case "TSP": ind = new TSPIndividual(); break; } return(ind); }