Exemple #1
0
        protected override void PopulateChild <T> (ObviousCode.Alchemy.Library.Populous.Individual <T> child, ObviousCode.Alchemy.Library.Populous.Individual <T> parent1, ObviousCode.Alchemy.Library.Populous.Individual <T> parent2)
        {
            CrossoverProvider.Log.GetNextEntry(CrossoverType.Random);

            Array.Copy(parent1.Code, child.Code, parent1.GenomeLength);

            parent2.Code.For((item, i) => {
                if (ConfigurationProvider.Rnd.NextDouble() <= ConfigurationProvider.Crossover.ChanceOfRandomGeneCrossover)
                {
                    child[i] = parent2[i];
                }
            });
        }
Exemple #2
0
        protected override void PopulateChild <T> (ObviousCode.Alchemy.Library.Populous.Individual <T> child, ObviousCode.Alchemy.Library.Populous.Individual <T> parent1, ObviousCode.Alchemy.Library.Populous.Individual <T> parent2)
        {
            var logEntry = CrossoverProvider.Log.GetNextEntry(CrossoverType.TwoPoint).As <TwoPointCrossoverLogEntry>();

            int crossoverPoint1 = ConfigurationProvider.Rnd.Next(child.GenomeLength);
            int crossoverPoint2 = crossoverPoint1;

            while (crossoverPoint1 == crossoverPoint2)
            {
                crossoverPoint2 = ConfigurationProvider.Rnd.Next(child.GenomeLength);
            }

            logEntry.CrossoverPointStart  = Math.Min(crossoverPoint1, crossoverPoint2);
            logEntry.CrossoverPointFinish = Math.Max(crossoverPoint1, crossoverPoint2);

            Array.Copy(parent1.Code, child.Code, parent1.Code.Length);
            Array.Copy(parent2.Code, logEntry.CrossoverPointStart, child.Code, logEntry.CrossoverPointStart, logEntry.CrossoverPointFinish - logEntry.CrossoverPointStart + 1);
        }