(C++)  1.0.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  enum class MutationSelectionType
16  {
17  ITERATE_AND_TEST_P,
18  SELECT_P_OF_N
19  };
20 
21  struct Mutation
22  {
23  public:
24  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{}());
25  virtual ~Mutation();
26 
27  virtual void Perform(const std::vector<std::unique_ptr<EvoScript>>& parentPopulation, const std::vector<std::unique_ptr<EvoScript>>& childrenPopulation);
28 
29 
30  public:
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:22
double MutateIndividualRate
Definition: Mutation.hh:38
double MutateChromosomeRate
Definition: Mutation.hh:42
bool MutateBothParentsAndChildren
Definition: Mutation.hh:45
double MutationPhaseRate
Definition: Mutation.hh:34