Esempio n. 1
0
            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);
            }
Esempio n. 2
0
            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);
            }
Esempio n. 3
0
            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)
                                                 ));
            }
Esempio n. 4
0
            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);
            }
Esempio n. 5
0
 public static GeneticIndividualItem Crossover(GeneticIndividualItem a, GeneticIndividualItem b)
 {
     return(new GeneticIndividualItem(a._recognizer, (a.X + b.X) / 2, (a.Y + b.Y) / 2));
 }