public static GeneticIndividual Crossover(GeneticIndividual a, GeneticIndividual b) { var ret = new GeneticIndividual(a._recognizer); for (var i = 0; i < a.Items.Length; i++) { ret.Items[i] = GeneticIndividualItem.Crossover(a.Items[i], b.Items[i]); } return(ret); }
public GeneticIndividualItem GenerateRandomItem(int pos) { var d = _recognizer.Target.Width / _recognizer.DigitsCount; var ret = new GeneticIndividualItem(_recognizer, d * pos + (d - _recognizer.DigitWidth) / 2, (_recognizer.Target.Height - _recognizer.DigitHeight) / 2 ); ret = GeneticIndividualItem.Mutation(ret); return(ret); }
public static GeneticIndividualItem Mutation(GeneticIndividualItem a) { var maxDeltaX = 20; var maxDeltaY = 5; var dx = Random.Next(maxDeltaX * 2 + 1) - maxDeltaX; var dy = Random.Next(maxDeltaY * 2 + 1) - maxDeltaY; return(new GeneticIndividualItem(a._recognizer, Math.Min(Math.Max(0, a.X + dx), a._recognizer.Target.Width - a._recognizer.DigitWidth), Math.Min(Math.Max(0, a.Y + dy), a._recognizer.Target.Height - a._recognizer.DigitHeight) )); }
public static GeneticIndividual Mutation(GeneticIndividual a) { var ret = new GeneticIndividual(a._recognizer); var idx = Random.Next(a._recognizer.DigitsCount); for (var i = 0; i < a.Items.Length; i++) { ret.Items[i] = i == idx ? GeneticIndividualItem.Mutation(a.Items[i]) : a.Items[i]; } return(ret); }
public static GeneticIndividualItem Crossover(GeneticIndividualItem a, GeneticIndividualItem b) { return(new GeneticIndividualItem(a._recognizer, (a.X + b.X) / 2, (a.Y + b.Y) / 2)); }