Grail (C++)  1.3.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
EvoScript.hh
1 // Copyright QED Software 2023.
2 
3 #ifndef GRAIL_EVO_SCRIPT_H
4 #define GRAIL_EVO_SCRIPT_H
5 
6 #include <memory>
7 #include <vector>
8 #include "EvoParam.hh"
9 
10 namespace grail
11 {
12 namespace evolution
13 {
18  class EvoScript
19  {
20  private:
21  float fitness = -1.0f;
22 
23  protected:
24  std::vector<std::reference_wrapper<EvoParam>> evoParams{};
25 
26  public:
27  virtual ~EvoScript();
28 
33  void SetFitness(float fitness);
34 
39  float GetFitness() const;
40 
42  std::unique_ptr<EvoScript> SystemClone() const;
43 
46  virtual std::unique_ptr<EvoScript> UserClone() const = 0;
47 
52  void Randomize(std::mt19937_64& randomGenerator);
53 
60  std::vector<std::unique_ptr<EvoScript>> GetRandomRealizations(
61  std::mt19937_64& randomGenerator,
62  size_t count) const;
63 
68  std::vector<std::reference_wrapper<EvoParam>>& GetEvoParams();
69 
74  size_t EvoParamsCount() const;
75 
81  const EvoParam& GetEvoParamAt(size_t index) const;
82 
89  void ExchangeParams(EvoScript& other, size_t inclusiveFrom, size_t exclusiveTo);
90 
96  float CalculateSimilarity(const EvoScript& other) const;
97 
101  virtual std::string ToString() const;
102  protected:
103  void CopyEvoParamValuesFrom(const EvoScript& other);
104 
105  void RegisterParam(EvoParam& parameter);
106  void RegisterParamsFromOther(const EvoScript& other);
107  };
108 
109  bool EvoScriptComparator(const std::unique_ptr<EvoScript>& first, const std::unique_ptr<EvoScript>& second);
110 }
111 }
112 #endif // GRAIL_EVO_SCRIPT_H
grail::evolution::EvoScript::GetFitness
float GetFitness() const
GetFitness - gets the fitness value (evaluation of how good the particular EvoScript object is).
Definition: EvoScript.cpp:20
grail::evolution::EvoParam
EvoParam - class that represents a parameter that is modifiable (optimizable) by evolutionary algorit...
Definition: EvoParam.hh:16
grail::evolution::EvoScript::SystemClone
std::unique_ptr< EvoScript > SystemClone() const
This method calls userClone() that is responsible for copying everything apart from EvoParams and the...
Definition: EvoScript.cpp:25
grail::evolution::EvoScript::ExchangeParams
void ExchangeParams(EvoScript &other, size_t inclusiveFrom, size_t exclusiveTo)
ExchangeParams - swaps the values of selected EvoParams between two EvoScripts. Make sure that the ot...
Definition: EvoScript.cpp:70
grail::evolution::EvoScript::Randomize
void Randomize(std::mt19937_64 &randomGenerator)
Sets all parameters (EvoParams) of the script to possible random values.
Definition: EvoScript.cpp:33
grail::evolution::EvoScript
EvoScript - a class that holds a collection of EvoParams (through them) is optimizable....
Definition: EvoScript.hh:18
grail::evolution::EvoScript::CalculateSimilarity
float CalculateSimilarity(const EvoScript &other) const
CalculateSimilarity - this function calculates the similarity between two EvoScripts in the form of a...
Definition: EvoScript.cpp:80
grail::evolution::EvoScript::GetRandomRealizations
std::vector< std::unique_ptr< EvoScript > > GetRandomRealizations(std::mt19937_64 &randomGenerator, size_t count) const
GetRandomRealizations - gets clones of the EvoScript with its EvoParams set to random possible values...
Definition: EvoScript.cpp:41
grail::evolution::EvoScript::EvoParamsCount
size_t EvoParamsCount() const
EvoParamsCount - returns the number of EvoParams that this EvoScript holds.
Definition: EvoScript.cpp:60
grail::evolution::EvoScript::GetEvoParams
std::vector< std::reference_wrapper< EvoParam > > & GetEvoParams()
GetEvoParams - returns a collection of EvoParams that this EvoScript holds.
Definition: EvoScript.cpp:55
grail::evolution::EvoScript::GetEvoParamAt
const EvoParam & GetEvoParamAt(size_t index) const
GetEvoParamAt - returns the i-th EvoParam of the collection of parameters stored in this EvoScript.
Definition: EvoScript.cpp:65
grail::evolution::EvoScript::ToString
virtual std::string ToString() const
ToString - returns the string representation of the EvoScript object. It contains the assigned fitnes...
Definition: EvoScript.cpp:106
grail::evolution::EvoScript::UserClone
virtual std::unique_ptr< EvoScript > UserClone() const =0
Create your final optimizable object that is based on this EvoScript. In EA such object is often refe...
grail::evolution::EvoScript::SetFitness
void SetFitness(float fitness)
SetFitness - sets the fitness value (evaluation of how good the particular EvoScript object is).
Definition: EvoScript.cpp:15