1 #ifndef GRAIL_CROSSOVER_H
2 #define GRAIL_CROSSOVER_H
14 enum class CrossoverSelectionType
26 Crossover(
double crossoverIndividualRate = 0.45,
27 CrossoverSelectionType selectionType = CrossoverSelectionType::PSEUDO_ROULETTE,
28 double pseudoRouletteRandomPortion = 0.3,
29 double crossoverPhaseRate = 1.0,
30 std::mt19937_64::result_type seed = std::random_device{}());
33 void Perform(
const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
36 std::vector<std::unique_ptr<EvoScript>> populationAfter{};
52 virtual void crossoverFunctionOnePoint(
EvoScript& individual1,
EvoScript& individual2);
53 virtual void crossoverFunctionMultiPoint(
EvoScript& individual1,
EvoScript& individual2,
size_t length);
57 std::mt19937_64 randGen;
60 void performRandomCrossover(
const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
61 void performRouletteCrossover(
const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
62 void performTopCrossover(
const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
63 void performPseudoRouletteCrossover(
const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
64 void performConsecutivePairsCrossover(
const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
68 #endif // GRAIL_CROSSOVER