Ejemplo n.º 1
0
        private Individual[] MutatePopulation()
        {
            int populationSize = population.Length;

            for (int i = elitism; i < populationSize; i++)
            {
                population[i].gen = Genoma.Mutate(r, population[i].gen, mutationRate, maxPerturbation);
            }
            return(population);
        }
Ejemplo n.º 2
0
        public void Initialize(MendelMachine mendelMachine, Genoma genoma,
                               ActivationFunction activationFunction,
                               bool learningPhase, float lifeTime, int index)
        {
            fitness = 0;

            this.activationFunction = activationFunction;
            this.index         = index;
            this.mendelMachine = mendelMachine;
            this.learningPhase = learningPhase;
            this.lifeTime      = lifeTime;

            perceptron = new Perceptron(genoma, activationFunction);
        }
Ejemplo n.º 3
0
 public static Genoma Mutate(Random r, Genoma gen,
                             float mutationRate, float maxPerturbation)
 {
     for (int layer = 0; layer < gen.W.Length; layer++)
     {
         double[,] m = gen.W[layer];
         Matrix.MatrixLoop((i, j) =>
         {
             if (r.NextDouble() < mutationRate)
             {
                 m[i, j] += (r.NextDouble() * 2f - 1f) * maxPerturbation;
             }
         }, gen.W[layer].X, gen.W[layer].Y);
         gen.W[layer] = m;
     }
     return(gen);
 }
 public static Genoma Mutate(
     Random r,
     Genoma gen,
     float stdDevMutatuion,
     float maxPerturbation
     )
 {
     for (int layer = 0; layer < gen.W.Length; layer++)
     {
         double[, ] m = gen.W[layer];
         Matrix.MatrixLoop((i, j) => {
             m[i, j] += GaussianSystemRandom(r, stdDevMutatuion, maxPerturbation);
         }, gen.W[layer].X, gen.W[layer].Y);
         gen.W[layer] = m;
     }
     return(gen);
 }
        private Individual[] CrossPopulation()
        {
            var tempPopulation = (Individual[])population.Clone();
            int populationSize = tempPopulation.Length;

            List <Individual> newpop = new List <Individual> ();

            for (int i = 0; i < elitism; i++)
            {
                newpop.Add(tempPopulation[i]);
            }
            for (int i = 0; i < newIndividuals; i++)
            {
                newpop.Add(GenerateIndividual());
            }
            if (sexualMultiplication)
            {
                for (int i = 0; i < populationSize - newIndividuals - elitism; i++)
                {
                    var        p1         = poolSelection(tempPopulation);
                    var        p2         = poolSelection(tempPopulation);
                    Individual individual = new Individual {
                        gen     = Genoma.Cross(r, p1.gen, p2.gen),
                        fitness = 0
                    };

                    newpop.Add(individual);
                }
            }
            else
            {
                for (int i = 0; i < populationSize - newIndividuals - elitism; i++)
                {
                    var        p1         = poolSelection(tempPopulation);
                    Individual individual = new Individual()
                    {
                        gen     = new Genoma(p1.gen.W),
                        fitness = 0
                    };
                    newpop.Add(individual);
                }
            }

            return(newpop.ToArray());
        }
Ejemplo n.º 6
0
        private Individual[] CrossPopulation()
        {
            int populationSize = population.Length;

            List <Individual> crosspop = new List <Individual>();

            for (int i = 0; i < populationSize; i++)
            {
                population[i].fitness = -1;
                for (int j = 0; j < populationSize - i; j++)
                {
                    crosspop.Add(population[i]);
                }
            }

            List <Individual> newpop = new List <Individual>();

            for (int i = 0; i < elitism; i++)
            {
                newpop.Add(population[i]);
            }
            for (int i = 0; i < newIndividuals; i++)
            {
                newpop.Add(GenerateIndividual());
            }
            for (int i = 0; i < populationSize - newIndividuals - elitism; i++)
            {
                Individual individual = new Individual
                {
                    gen = Genoma.Cross(r,
                                       crosspop[Random.Range(0, crosspop.Count)].gen,
                                       crosspop[Random.Range(0, crosspop.Count)].gen),
                    fitness = 0
                };

                newpop.Add(individual);
            }
            return(newpop.ToArray());
        }
Ejemplo n.º 7
0
        public static Genoma Cross(Random r, Genoma parent1, Genoma parent2)
        {
            Matrix[] SonW = new Matrix[parent1.W.Length];

            for (int layer = 0; layer < parent1.W.Length; layer++)
            {
                double[, ] w = new double[parent1.W[layer].X, parent1.W[layer].Y];
                Matrix.MatrixLoop((i, j) => {
                    if (r.NextDouble() > 0.5)
                    {
                        w[i, j] = parent1.W[layer].GetValue(i, j);
                    }
                    else
                    {
                        w[i, j] = parent2.W[layer].GetValue(i, j);
                    }
                }, parent1.W[layer].X, parent1.W[layer].Y);
                SonW[layer] = w;
            }

            return(new Genoma(SonW));
        }
Ejemplo n.º 8
0
 public Perceptron(Genoma genoma, ActivationFunction activationFunction)
 {
     this.activationFunction = activationFunction;
     W = genoma.W;
 }
        private Individual[] CrossPopulation()
        {
            var        tempPopulation = (Individual[])population.Clone();
            int        populationSize = tempPopulation.Length;
            List <int> crosspop       = new List <int> ();

            for (int i = 0; i < populationSize; i++)
            {
                for (int j = 0; j < populationSize - i; j++)
                {
                    for (int k = 0; k < elitismFactor; k++)
                    {
                        crosspop.Add(i);
                    }
                }
            }

            List <Individual> newpop = new List <Individual> ();

            for (int i = 0; i < elitism; i++)
            {
                newpop.Add(tempPopulation[i]);
            }
            for (int i = 0; i < newIndividuals; i++)
            {
                newpop.Add(GenerateIndividual());
            }
            if (sexualMultiplication)
            {
                for (int i = 0; i < populationSize - newIndividuals - elitism; i++)
                {
                    var        p1         = tempPopulation[crosspop[Random.Range(0, crosspop.Count)]];
                    var        p2         = tempPopulation[crosspop[Random.Range(0, crosspop.Count)]];
                    Individual individual = new Individual {
                        gen = Genoma.Cross(
                            r,
                            p1.gen,
                            p2.gen
                            ),
                        fitness = 0
                    };

                    newpop.Add(individual);
                }
            }
            else
            {
                for (int i = 0; i < populationSize - newIndividuals - elitism; i++)
                {
                    var        p1         = tempPopulation[crosspop[Random.Range(0, crosspop.Count)]];
                    Individual individual = new Individual()
                    {
                        gen     = new Genoma(p1.gen.W),
                        fitness = 0
                    };
                    newpop.Add(individual);
                }
            }

            return(newpop.ToArray());
        }