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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| public List<Individu> InitPop(List<Individu> Pop, int nbIndiv)
{
for(int i = 0; i<nbIndiv; i++)
{
// Creation d'un nouvel individu et RAZ
Individu ind = new Individu();
ind.RAZIndividu();
// k est initialisé au nombre d'element de selec
int k = ind.selec.Count;
for (int j = 0 ; j < k; j++)
{
// Remplissage de selec
ind.selec[j] = rnd.Next(0,16);
// Tps pour generation nouveau nb aleatoire
System.Threading.Thread.Sleep(30);
}
// Ajout de l'individu à la population
Pop.Add(ind);
}
// On retourne la population
return Pop;
}
public List<Individu> CroisementPop(List<Individu> pop, List<Individu> popTemp, int nbIndividu)
{
// Initialisation de variables
int i, j, k, nbItem, indiceBest, alea = 0;
nbItem = pop[0].selec.Count;
// Un tiers de la population
indiceBest = nbIndividu/3;
for(i = 0; i < indiceBest-1; i++)
{
// Création de deux nouveaux individus
Individu ind = new Individu();
Individu ind2 = new Individu();
ind.RAZIndividu();
ind2.RAZIndividu();
// Nombre aléatoire entre 0 et 5 donc [0..4]
alea = rnd.Next(1,nbItem);
//Recopie des valeur de selec des deux premiers individu de Popu
ind.selec= pop[i].selec;
ind2.selec= pop[i+1].selec;
// Inversion des valeurs de selec des deux individus
// Premiere boucle de alea à la fin
// Deuxieme du debut à alea
for(j = alea; j < nbItem; j++)
{
ind.selec[j] = pop[i+1].selec[j];
}
popTemp[i].selec= ind.selec;
for(k = 0; k < alea; k++)
{
ind2.selec[k] = pop[i].selec[k];
}
popTemp[i+1].selec= ind2.selec;
}
return popTemp;
} |