(C++)  1.0.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
Crossover.hh
1 #ifndef GRAIL_CROSSOVER_H
2 #define GRAIL_CROSSOVER_H
3 
4 #include <memory>
5 #include <vector>
6 #include <random>
7 
8 namespace grail
9 {
10  namespace evolution
11  {
12  class EvoScript;
13 
14  enum class CrossoverSelectionType
15  {
16  RANDOM,
17  ROULETTE,
18  TOP,
19  PSEUDO_ROULETTE,
20  CONSECUTIVE_PAIRS
21  };
22 
23  struct Crossover
24  {
25  public:
26  Crossover(double crossoverIndividualRate = 0.45, CrossoverSelectionType selectionType = CrossoverSelectionType::PSEUDO_ROULETTE,
27  double pseudoRouletteRandomPortion = 0.3, double crossoverPhaseRate = 1.0, std::mt19937_64::result_type seed = std::random_device{}());
28 
29  virtual ~Crossover();
30  void perform(const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
31 
32  public:
33  std::vector<std::unique_ptr<EvoScript>> populationAfter{};
34 
37 
39  CrossoverSelectionType SelectionType = CrossoverSelectionType::RANDOM;
40 
43 
45  double CrossoverPhaseRate = 0.0;
46 
47  protected:
48  virtual void crossoverFunctionOnePoint(EvoScript& individual1, EvoScript& individual2);
49  virtual void crossoverFunctionMultiPoint(EvoScript& individual1, EvoScript& individual2, size_t length);
50  virtual void crossoverIndividuals(EvoScript& individual1, EvoScript& individual2);
51 
52  protected:
53  std::mt19937_64 randGen;
54 
55  private:
56  void performRandomCrossover(const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
57  void performRouletteCrossover(const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
58  void performTopCrossover(const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
59  void performPseudoRouletteCrossover(const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
60  void performConsecutivePairsCrossover(const std::vector<std::unique_ptr<EvoScript>>& inputPopulation);
61  };
62  }
63 }
64 #endif // GRAIL_CROSSOVER
Definition: EvoScript.hh:13
Definition: Crossover.hh:24
CrossoverSelectionType SelectionType
Definition: Crossover.hh:39
double PseudoRouletteRandomPortion
Definition: Crossover.hh:42
double CrossoverIndividualRate
Definition: Crossover.hh:36
double CrossoverPhaseRate
Definition: Crossover.hh:45