public void muter(Chemin cheminAMuter) { Random rand = new Random(); for (int i = 0; i < cheminAMuter.tailleChemin(); i++) { if (rand.NextDouble() < tauxMutation) { double j = cheminAMuter.tailleChemin() * rand.NextDouble(); Ville ville1 = cheminAMuter.getVilleInChemin((int)i); Ville ville2 = cheminAMuter.getVilleInChemin((int)j); cheminAMuter.setVille((int)j, ville1); cheminAMuter.setVille(i, ville2); } } }
public Chemin crossover(Chemin parent1, Chemin parent2) { Chemin enfant = new Chemin(this.gc); Random rand = new Random(); int positionStart = (int)(rand.NextDouble() * parent1.tailleChemin()); int positionEnd = (int)(rand.NextDouble() * parent1.tailleChemin()); // On voit si on ajoute le parent 1 for (int i = 0; i < enfant.tailleChemin(); i++) { // On set la ville de l'enfant par le parent if (positionStart < positionEnd && i > positionStart && i < positionEnd) { enfant.setVille(i, parent1.getVilleInChemin(i)); } else if (positionStart > positionEnd) { if (!(i < positionStart && i > positionEnd)) { enfant.setVille(i, parent1.getVilleInChemin(i)); } } } for (int i = 0; i < parent2.tailleChemin(); i++) { if (!(enfant.contientVille(parent2.getVilleInChemin(i)))) { for (int j = 0; i < enfant.tailleChemin(); i++) { if (enfant.getVilleInChemin(j) == null) { enfant.setVille(j, parent2.getVilleInChemin(j)); } } } } return(enfant); }