/// <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); }
private PermutationChromosome GetCrossover(PermutationChromosome x, PermutationChromosome y, PermutationCrossover crossover) { var rator = GeneticFactory.ConstructPermutationCrossoverOperators(crossover).First(); return(rator.Invoke(x, y) as PermutationChromosome); }