Grail (C++)  1.1.1
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 <memory>
5 #include <random>
6 #include <vector>
7 
8 namespace grail
9 {
10  namespace evolution
11  {
12  class EvoScript;
13  class EvoParam;
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,
26  double mutateIndividualRate = 0.09,
27  double mutateChromosomeRate = 0.5,
28  bool mutateBothParentsAndChildren = true,
29  std::mt19937_64::result_type seed = std::random_device{}());
30  virtual ~Mutation();
31 
32  //REVIEW: missing some doxygen comments
33  virtual void Perform(const std::vector<std::unique_ptr<EvoScript>>& parentPopulation,
34  const std::vector<std::unique_ptr<EvoScript>>& childrenPopulation);
35 
36  std::vector<std::unique_ptr<EvoScript>> populationAfter{};
37 
39  double MutationPhaseRate = 0.0;
40 
43  double MutateIndividualRate = 0.0;
44 
47  double MutateChromosomeRate = 0.0;
48 
51 
52  MutationSelectionType RandomResolutionTypeForIndividual = MutationSelectionType::SELECT_P_OF_N;
53  MutationSelectionType RandomResolutionTypeForChromosome = MutationSelectionType::SELECT_P_OF_N;
54 
55  protected:
56  std::mt19937_64 randGen;
57  protected:
58  virtual void MutateIndividual(EvoScript& individual);
59  virtual void MutateChromosome(EvoScript& individual, EvoParam& chromosome);
60  };
61  }
62 }
63 #endif /// GRAIL_MUTATION
grail::evolution::Mutation::MutateChromosomeRate
double MutateChromosomeRate
Definition: Mutation.hh:47
grail::evolution::EvoParam
Definition: EvoParam.hh:11
grail::evolution::EvoScript
Definition: EvoScript.hh:12
grail::evolution::Mutation::MutateBothParentsAndChildren
bool MutateBothParentsAndChildren
Definition: Mutation.hh:50
grail::evolution::Mutation
Definition: Mutation.hh:22
grail::evolution::Mutation::MutateIndividualRate
double MutateIndividualRate
Definition: Mutation.hh:43
grail::evolution::Mutation::MutationPhaseRate
double MutationPhaseRate
Definition: Mutation.hh:39