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); } }
/// <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; }
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; }
/// <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; }