Bonjour,

J'essaye d'implémenter un algo génétique mais j'ai un problème avec Collections.sort

Il me trie bien mes individus mais une seule fois, je ne comprends pas.

Voilà mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
public class Population {
	private List<Individu> pop = new ArrayList<Individu>();
        ....
 
	// CONSTRUCTOR
	public Population(int taille, int nbIteration){
		this.nbIteration = nbIteration;
		for(int i=0; i<taille; i++){
				pop.add(new Individu());
		}	
	} // Fin constructor
 
// ALGORITHME GENETIQUE
	public void  algo_genetique(){
 
		List<Individu> mutants = new ArrayList<Individu>();
		List<Individu> meilleurs = new ArrayList<Individu>();
 
		int k = 0;
		while(k < nbIteration){
 
			for(int i=0; i<pop.size(); i++){
				pop.get(i).getFitness();
			}
 
			Collections.sort(pop);
 
			// Garde les N Meilleurs individuis selon leur rang (indice 0 étant le meilleur)
			meilleurs =  meilleursIndividus(pourcentage);
 
			// Mutation
			mutants = mutation(meilleurs, tauxMutation);
			for(int i=0; i<mutants.size(); i++){
				meilleurs.add(mutants.get(i));
			}
			System.out.println("\nGeneration: " + k + " competence: " + meilleurs.get(0).getFitness() +"\n");
			pop = meilleurs;
			k++;
		}
	}

et l'implementation de comparator
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class Individu implements Cloneable, Comparable<Individu>{
 
	// Intervalle de solutions
	private int valMin = -25;
	private int valMax = 25;
	private double fitness = -1;
	private int[] genotype = new int[25];
 
 
	// Constructeur1
	public Individu(){
		for(int i=0; i<25; i++){
			int elt  = (int)(Math.random() * ((valMax - valMin) + 1) + valMin );
			this.genotype[i] = elt;
		}
	}
 
	// Constructeur Copie
	public Individu clone() throws CloneNotSupportedException{
		Individu copie = (Individu)super.clone();
		copie.genotype = new int[genotype.length];
		System.arraycopy(genotype, 0, copie.genotype, 0 , genotype.length);
		return copie;
	}
 
	// Methodes
	public int compareTo(Individu ind) {
		double fit1 = ((Individu) ind).getFitness(); 
	    double fit2 = this.getFitness(); 
	    if (fit1 > fit2)  return -1; 
	    else if(fit1 == fit2) return 0; 
	    else return 1;
	}
 
 
	public double getFitness() {
		if(this.fitness == -1)	{
			this.fitness = Competence.getFitness(this); 
			System.out.println("Calcul fitness de l'individu : ");
			this.afficheIndividu();
			System.out.println("Calcul fitness => " + this.fitness);
		}
		//System.out.println("retourne fitness ");
		return this.fitness;
	}
}
Quelqu'un pourrait m'aider à trouver ce qui cloche.

Merci.