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