Exemplo n.º 1
0
        /// <summary>
        /// Constructs a list of permutation crossovers operators.
        /// </summary>
        /// <param name="crossoverOptions">The permutation crossover options.</param>
        /// <param name="weight">The crossover weight.</param>
        /// <returns>The constructed permutation crossovers operators.</returns>
        public static List <ICrossover> ConstructPermutationCrossoverOperators(PermutationCrossover crossoverOptions, double weight = 1)
        {
            var crossovers = new List <ICrossover>();

            if ((crossoverOptions & PermutationCrossover.AlternatingPosition) == PermutationCrossover.AlternatingPosition)
            {
                crossovers.Add(new AlternatingPositionCrossover(weight));
            }
            if ((crossoverOptions & PermutationCrossover.Order) == PermutationCrossover.Order)
            {
                crossovers.Add(new OrderCrossover(weight));
            }
            if ((crossoverOptions & PermutationCrossover.Midpoint) == PermutationCrossover.Midpoint)
            {
                crossovers.Add(new MidpointCrossover(weight));
            }
            if ((crossoverOptions & PermutationCrossover.NoOp) == PermutationCrossover.NoOp)
            {
                crossovers.Add(new NoOpPermutationCrossover(weight));
            }
            if (crossovers.Count == 0)
            {
                throw new ArgumentException("Error! Invalid permutation selection.");
            }

            return(crossovers);
        }
Exemplo n.º 2
0
        private PermutationChromosome GetCrossover(PermutationChromosome x, PermutationChromosome y, PermutationCrossover crossover)
        {
            var rator = GeneticFactory.ConstructPermutationCrossoverOperators(crossover).First();

            return(rator.Invoke(x, y) as PermutationChromosome);
        }