示例#1
0
        private Individu[] SelectionCouple()
        {
            Individu parent1   = population[randomizer.Next(0, NOMBRE_INDIVIDU - 1)];
            Individu parent2   = population[randomizer.Next(0, NOMBRE_INDIVIDU - 1)];
            double   crossover = randomizer.Next(0, 100);

            crossover /= 100;

            if (crossover < TXCROSSOVER)
            {
                return new Individu[] { parent1, parent2 }
            }
            ;
            else
            {
                if (parent1.getNotation() >= parent2.getNotation())
                {
                    return new Individu[] { parent1 }
                }
                ;
                else
                {
                    return new Individu[] { parent2 }
                };
            }
        }
        public void generationInitial()
        {
            int[] intervalNote = new int[2] { 30, 100 };
            int[] intervalInstrument = new int[2] { this.debutIntervalleInstrument, this.finIntervalleInstrument };

            for (int i = 0; i < NOMBRE_INDIVIDU; i++)
            {
                population[i] = new Individu(intervalNote, intervalInstrument);
            }
        }
示例#3
0
        public void generationInitial()
        {
            int[] intervalNote = new int[2] {
                30, 100
            };
            int[] intervalInstrument = new int[2] {
                this.debutIntervalleInstrument, this.finIntervalleInstrument
            };

            for (int i = 0; i < NOMBRE_INDIVIDU; i++)
            {
                population[i] = new Individu(intervalNote, intervalInstrument);
            }
        }
示例#4
0
        /// <summary>
        /// Deux parent qui s'aiment donnent un enfant qui aura des propriété de ses deux parents selon le taux de fusion et la parent dominant
        /// </summary>
        /// <param name="secondParent"></param>
        /// <param name="tauxFusion"></param>
        /// <returns></returns>
        public Individu GetEnfantNaturel(Individu secondParent, int tauxFusion)
        {
            randomizerNote = new Random();
            int[] notesDeMusiqueEnfant = new int[NumberNote];

            if (this.notation >= secondParent.getNotation())
            {
                notesDeMusiqueEnfant = FusionNotesDeMusique(this.notesMusique, secondParent.GetNotesDeMusique(), tauxFusion);
                return(new Individu(notesDeMusiqueEnfant, this.typeInstrument));
            }
            else
            {
                notesDeMusiqueEnfant = FusionNotesDeMusique(secondParent.GetNotesDeMusique(), this.notesMusique, tauxFusion);
                return(new Individu(notesDeMusiqueEnfant, secondParent.GetTypeInstrument()));
            }
        }
        public void Accouplement()
        {
            Individu[] nouvellePopulation = new Individu[NOMBRE_INDIVIDU];

            for (int i = 0; i < NOMBRE_INDIVIDU; i++)
            {
                Individu[] individuSelectionne = SelectionCouple();
                Individu enfant = null;
                int[] intervalleInstrument = new int[] { this.debutIntervalleInstrument, this.finIntervalleInstrument };

                if (individuSelectionne.Length == 1)
                     enfant = individuSelectionne[0].GetEnfantMuter(mutation);
                else
                    enfant = individuSelectionne[0].GetEnfantNaturel(individuSelectionne[1],TAUX_FUSION);

                nouvellePopulation[i] = enfant;
            }
            population = nouvellePopulation;
        }
示例#6
0
        public void Accouplement()
        {
            Individu[] nouvellePopulation = new Individu[NOMBRE_INDIVIDU];

            for (int i = 0; i < NOMBRE_INDIVIDU; i++)
            {
                Individu[] individuSelectionne = SelectionCouple();
                Individu   enfant = null;
                int[]      intervalleInstrument = new int[] { this.debutIntervalleInstrument, this.finIntervalleInstrument };

                if (individuSelectionne.Length == 1)
                {
                    enfant = individuSelectionne[0].GetEnfantMuter(mutation);
                }
                else
                {
                    enfant = individuSelectionne[0].GetEnfantNaturel(individuSelectionne[1], TAUX_FUSION);
                }

                nouvellePopulation[i] = enfant;
            }
            population = nouvellePopulation;
        }
示例#7
0
        /// <summary>
        /// Deux parent qui s'aiment donnent un enfant qui aura des propriété de ses deux parents selon le taux de fusion et la parent dominant
        /// </summary>
        /// <param name="secondParent"></param>
        /// <param name="tauxFusion"></param>
        /// <returns></returns>
        public Individu GetEnfantNaturel(Individu secondParent, int tauxFusion)
        {
            randomizerNote = new Random();
            int[] notesDeMusiqueEnfant = new int[NumberNote];

            if (this.notation >= secondParent.getNotation())
            {
                notesDeMusiqueEnfant = FusionNotesDeMusique(this.notesMusique, secondParent.GetNotesDeMusique(), tauxFusion);
                return new Individu(notesDeMusiqueEnfant, this.typeInstrument);
            }
            else
            {
                notesDeMusiqueEnfant = FusionNotesDeMusique(secondParent.GetNotesDeMusique(), this.notesMusique, tauxFusion);
                return new Individu(notesDeMusiqueEnfant, secondParent.GetTypeInstrument());
            }
        }
        //  Ecriture musique dans fichier temporaire
        private void WriteMusic(Individu individu,int numeroPiste)
        {
            // 1) Créer le fichier MIDI
            // a. Créer un fichier et une piste audio ainsi que les informations de tempo
            MIDISong song = new MIDISong();
            song.AddTrack("Piste1");
            song.SetTimeSignature(0, 4, 4);
            song.SetTempo(0, tempo);

            //  Récupération du tableau contenant les notes de musique
            int[] tabMusique = individu.GetNotesDeMusique();

            //  Récupération du type d'instrument dans l'individu présent dans la population
            int instrument = individu.GetTypeInstrument();
            song.SetChannelInstrument(0, 0, instrument);

            //  Ajout des notes une à une dans la piste son
            for (int i = 0; i < numberIndividu; i++)
                song.AddNote(0, 0, tabMusique[i], lengthNote);

            // d. Enregistrer le fichier .mid (lisible dans un lecteur externe par exemple)
            // on prépare le flux de sortie
            MemoryStream ms = new MemoryStream();
            song.Save(ms);
            ms.Seek(0, SeekOrigin.Begin);
            byte[] src = ms.GetBuffer();
            ms.Close();

            FileStream objWriter = File.Create (directory+"/piste"+numeroPiste+".midi");

            objWriter.Write(src, 0, src.Length);
            objWriter.Close();
            objWriter.Dispose();
            objWriter = null;
        }