(C++)  1.1.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
Mutation.hh
1 #ifndef GRAIL_MUTATION_H
2 #define GRAIL_MUTATION_H
3 
4 #include <random>
5 #include <memory>
6 #include <vector>
7 
8 namespace grail
9 {
10  namespace evolution
11  {
12  class EvoScript;
13  class IEvoParam;
14 
15  //REVIEW: this could probably be nested inside Mutation
16  enum class MutationSelectionType
17  {
18  ITERATE_AND_TEST_P,
19  SELECT_P_OF_N
20  };
21 
22  struct Mutation
23  {
24  public:
25  Mutation(double mutationPhaseRate = 1.0, double mutateIndividualRate = 0.09, double mutateChromosomeRate = 0.5, bool mutateBothParentsAndChildren = true, std::mt19937_64::result_type seed = std::random_device{}());
26  virtual ~Mutation();
27 
28  //REVIEW: missing some doxygen comments
29  virtual void Perform(const std::vector<std::unique_ptr<EvoScript>>& parentPopulation, const std::vector<std::unique_ptr<EvoScript>>& childrenPopulation);
30 
31  std::vector<std::unique_ptr<EvoScript>> populationAfter{};
32 
34  double MutationPhaseRate = 0.0;
35 
38  double MutateIndividualRate = 0.0;
39 
42  double MutateChromosomeRate = 0.0;
43 
46 
47  MutationSelectionType RandomResolutionTypeForIndividual = MutationSelectionType::SELECT_P_OF_N;
48  MutationSelectionType RandomResolutionTypeForChromosome = MutationSelectionType::SELECT_P_OF_N;
49 
50  protected:
51  std::mt19937_64 randGen;
52  protected:
53  virtual void MutateIndividual(EvoScript& individual);
54  virtual void MutateChromosome(EvoScript& individual, IEvoParam& chromosome);
55  };
56  }
57 }
58 #endif
Definition: EvoScript.hh:13
Definition: IEvoParam.hh:12
Definition: Mutation.hh:23
double MutateIndividualRate
Definition: Mutation.hh:38
double MutateChromosomeRate
Definition: Mutation.hh:42
bool MutateBothParentsAndChildren
Definition: Mutation.hh:45
double MutationPhaseRate
Definition: Mutation.hh:34