Grail (C++)  1.1.1
A multi-platform, modular, universal engine for embedding advanced AI in games.
EvoScript.hh
1 #ifndef GRAIL_EVO_SCRIPT_H
2 #define GRAIL_EVO_SCRIPT_H
3 
4 #include <memory>
5 #include <vector>
6 #include "EvoParam.hh"
7 
8 namespace grail
9 {
10  namespace evolution
11  {
12  class EvoScript
13  {
14  private:
15  float fitness = -1.0f;
16 
17  protected:
18  std::vector<std::reference_wrapper<EvoParam>> evoParams{};
19 
20  public:
21  virtual ~EvoScript();
22  void SetFitness(float _fitness);
23  float GetFitness() const;
24 
26  std::unique_ptr<EvoScript> SystemClone() const;
27 
30  virtual std::unique_ptr<EvoScript> UserClone() const = 0;
31 
33  void Randomize(std::mt19937_64& randomGenerator);
34 
35  std::vector<std::unique_ptr<EvoScript>> GetRandomRealizations(
36  std::mt19937_64& randomGenerator,
37  size_t count) const;
38  std::vector<std::reference_wrapper<EvoParam>>& GetEvoParams();
39  size_t EvoParamsCount() const;
40 
41  const EvoParam& GetEvoParamAt(size_t index) const;
42  void ExchangeParams(EvoScript& other, size_t inclusiveFrom, size_t exclusiveTo);
43 
44  float CalculateSimilarity(const EvoScript& other) const;
45  void CopyEvoParamValuesFrom(const EvoScript& other);
46 
47  virtual std::string ToString() const;
48  protected:
49  void RegisterParam(EvoParam& parameter);
50  void RegisterParamsFromOther(const EvoScript& other);
51  };
52 
53  bool EvoScriptComparator(const std::unique_ptr<EvoScript>& first, const std::unique_ptr<EvoScript>& second);
54  }
55 }
56 #endif // GRAIL_EVO_SCRIPT_H
grail::evolution::EvoParam
Definition: EvoParam.hh:11
grail::evolution::EvoScript::SystemClone
std::unique_ptr< EvoScript > SystemClone() const
Definition: EvoScript.cpp:23
grail::evolution::EvoScript::Randomize
void Randomize(std::mt19937_64 &randomGenerator)
Definition: EvoScript.cpp:31
grail::evolution::EvoScript
Definition: EvoScript.hh:12
grail::evolution::EvoScript::UserClone
virtual std::unique_ptr< EvoScript > UserClone() const =0