コード例 #1
0
        public void NextGeneration()
        {
            Individu        newIndividu;
            Individu        parent;
            int             nbParent;
            int             i;
            List <Individu> nextGen = new List <Individu>();
            List <Individu> parents = new List <Individu>();

            nextGen.Clear();

            // 1) SURVIE
            // élitisme, nous conservons que le meilleur
            nextGen.Add(meilleur());
            nextGen[0].SongNumber = 1;

            for (i = 2; i <= 12; i++)
            {
                parents.Clear();

                // 2) SELECTION des parents
                nbParent = (rand.Next(0, 100) <= crossoverRate ? 2 : 1);

                parent = meilleur(tirage(2));
                for (int a = 1; a <= nbParent; a++)
                {
                    while (parents.Contains(parent))
                    {
                        parent = meilleur(tirage(2));
                    }

                    parents.Add(parent);
                }

                // 3) CROSSOVER
                newIndividu = new Individu(parents);

                // 4) MUTATION
                newIndividu.muter(mutationRate);

                newIndividu.SongNumber = i;
                nextGen.Add(newIndividu);
            }
            // on vide la liste des individus de la génération actuelle
            individus.Clear();
            // on met les individus de la génération suivante dans la liste des individus de la génération actuelle
            individus = nextGen;

            nbGeneration++;
        }
コード例 #2
0
ファイル: Population.cs プロジェクト: Jochaz/MelodieTP
        public void NextGeneration()
        {
            Individu newIndividu;
            Individu parent;
            int nbParent;
            int i;
            List<Individu> nextGen = new List<Individu>();
            List<Individu> parents = new List<Individu>();
            nextGen.Clear();

            // 1) SURVIE
                // élitisme, nous conservons que le meilleur
            nextGen.Add(meilleur());
            nextGen[0].SongNumber = 1;

            for (i = 2; i <= 12; i++)
            {
                parents.Clear();

                // 2) SELECTION des parents
                nbParent = (rand.Next(0, 100) <= crossoverRate ? 2 : 1);

                parent = meilleur(tirage(2));
                for (int a = 1; a <= nbParent; a++)
                {
                    while (parents.Contains(parent))
                        parent = meilleur(tirage(2));

                    parents.Add(parent);
                }

                // 3) CROSSOVER
                newIndividu = new Individu(parents);

                // 4) MUTATION
                newIndividu.muter(mutationRate);

                newIndividu.SongNumber = i;
                nextGen.Add(newIndividu);

            }
            // on vide la liste des individus de la génération actuelle
            individus.Clear();
            // on met les individus de la génération suivante dans la liste des individus de la génération actuelle
            individus = nextGen;

            nbGeneration++;
        }