public SmallGenetics(Main form1, Func <string, int, string, bool> populateM, SmallEquation ptarget) { pop = populateM; form = form1; target = ptarget; var population = new Population(populationSize, 320, false, false); //create the genetic operators var elite = new Elite(elitismPercentage); var crossover = new Crossover(crossoverProbability, true) { CrossoverType = CrossoverType.SinglePoint }; var mutation = new BinaryMutate(mutationProbability, true); //create the GA itself ga = new GeneticAlgorithm(population, EvaluateFitness); ga.OnGenerationComplete += ga_OnGenerationComplete; ga.Operators.Add(elite); ga.Operators.Add(crossover); ga.Operators.Add(mutation); }
public bool populateMethod(SmallEquation equation, int size, string graphseries) { chart1.Series.FindByName(graphseries).Points.Clear(); for (int i = -size; i <= size; i++) { chart1.Series.FindByName(graphseries).Points.AddXY(i, Utils.calculateY(equation, i)); } Thread.Sleep(10); return(true); }
public static Dictionary <int, double> convertToDictionary(SmallEquation equation, int size) { Dictionary <int, double> output = new Dictionary <int, double>(); for (int i = -size; i <= size; i++) { output.Add(i, calculateY(equation, i)); } return(output); }
private void ga_OnGenerationComplete(object sender, GaEventArgs e) { Console.WriteLine("---Generation Complete---"); Console.WriteLine("Gen: " + e.Generation); Console.WriteLine("Fit: " + e.Population.MaximumFitness + " " + (e.Population.MaximumFitness - lastGenFitness)); lastGenFitness = e.Population.MaximumFitness; //get the best solution var chromosome = e.Population.GetTop(1)[0]; int numOfBytes = chromosome.ToBinaryString().Length / 8; byte[] bytes = new byte[numOfBytes]; for (int i = 0; i < numOfBytes; i++) { bytes[i] = Convert.ToByte(chromosome.ToBinaryString().Substring(8 * i, 8), 2); } SmallEquation eq = Decoder.decodeToSmallEquation(bytes); eq.fitness = e.Population.MaximumFitness; Console.WriteLine("Eq : " + eq.ToString()); form.backgroundWorker1.ReportProgress(Convert.ToInt32(e.Population.MaximumFitness * 100), JsonConvert.SerializeObject(eq)); }
public static double calculateY(SmallEquation eq, double x) { return(eq.d0 * Math.Pow((x), 4) + eq.d1 * Math.Pow((x), 3) + eq.d2 * Math.Pow((x), 2) + eq.d3 * Math.Pow((x), 1) + eq.d4); }