Ejemplo n.º 1
0
        private Person cross(Person parent1, Person parent2)
        {
            int nbSeq        = (int)(_nbNote * new Random().NextDouble());
            int[] aNote      = new int[_nbNote];
            Person newPerson = new Person(_nbNote);
            
            for (int i = 0; i < _nbNote; i++) {
                if (i > nbSeq) {
                    aNote[i] = parent2.notes[i];
                }
                else {
                    aNote[i] = parent1.notes[i];
                }
            }

            newPerson.notes = aNote;

            if (parent1.fitness >= parent2.fitness) {
                newPerson.instrument = parent1.instrument;
            }
            else {
                newPerson.instrument = parent2.instrument;
            }

            return newPerson;
        }
Ejemplo n.º 2
0
        public Population()
        {
            random = new Random();
            _mutationRate = 1 / _nbNote;
            _persons      = new Person[_nbPerson];

            for (int i = 0; i < _nbPerson; i++) {
                _persons[i] = new Person(_nbNote, random.Next(1,129));
                _persons[i].generateRandomNotes(random);
            }
        }
Ejemplo n.º 3
0
        private Person mutation(Person person)
        {
            for (int i = 0; i < _nbNote; i++) {
                if (random.NextDouble() <= _mutationRate) {
                    person.notes[i] = random.Next(0,127);
                }
            }

            return person;
        }
Ejemplo n.º 4
0
        //survive if sum of fitness >= survivalRate
        private Person selectBest()
        {
            int sumFitness = 0;
            Person best    = new Person(_nbNote);

            for (int i = 0; i < _nbPerson; i++) {
                sumFitness += _persons[i].fitness;

                if (_persons[i].fitness > best.fitness) {
                    best         = _persons[i];
                    best.fitness = 0;
                }
            }

            if (sumFitness / _nbPerson < _survivalRate) {
                best = null;
            }

            return best;
        }
Ejemplo n.º 5
0
        public void newGeneration()
        {
            int i                  = 0;
            Person bestPerson      = selectBest();
            Person[] newPopulation = new Person[_nbPerson];

            if (bestPerson != null) {
                Person person     = new Person(_nbNote);
                person = bestPerson;
                person.fitness = 0;
                
                newPopulation[i] = person;
                i++;
            }

            for (; i < _nbPerson; i++) {
                Person person = selection();

                if (random.NextDouble() < _crossoverRate) {
                    Person crossPerson = selection();
                    person             = cross(person, crossPerson);
                }

                person           = mutation(person);
                person.fitness   = 0;
                newPopulation[i] = person;
            }

            _persons = newPopulation;
        }