Ejemplo n.º 1
0
 private static IHyperHeuristic <IBitIndividual, BitArray, bool> CreateHeuristic(Heuristics?heuristic,
                                                                                 double learningRate  = 0.05D,
                                                                                 double mutationRate  = 2,
                                                                                 int observationPhase = 10,
                                                                                 double repairChance  = 1,
                                                                                 double beta          = 1.5,
                                                                                 int limitFactor      = 1)
 {
     return(heuristic switch
     {
         Heuristics.Asymmetric => new SimpleHeuristic <IBitIndividual, BitArray, bool>(
             PresetGenerator.Asymmetric(learningRate, observationPhase)),
         Heuristics.Repair => new SimpleHeuristic <IBitIndividual, BitArray, bool>(
             PresetGenerator.Repair((int)learningRate, repairChance)),
         Heuristics.SingleEndogenous => new SimpleHeuristic <IBitIndividual, BitArray, bool>(
             PresetGenerator.SingleEndogenous((int)learningRate)),
         Heuristics.MultiEndogenous => new SimpleHeuristic <IBitIndividual, BitArray, bool>(
             PresetGenerator.MultiEndogenous((int)learningRate)),
         Heuristics.HeavyTail => new SimpleHeuristic <IBitIndividual, BitArray, bool>(
             PresetGenerator.HeavyTail((int)learningRate, beta)),
         Heuristics.StagnationDetection => PresetGenerator.StagnationDetection(mutationRate, limitFactor,
                                                                               (int)learningRate),
         _ => throw new InvalidEnumArgumentException()
     });