Grail (C++)  1.3.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
TypedEvoParam.hh
1 // Copyright QED Software 2023.
2 
3 #ifndef GRAIL_EVO_PARAM_H
4 #define GRAIL_EVO_PARAM_H
5 
6 #include "EvoParam.hh"
7 
8 #include <iostream>
9 #include <string>
10 #include <vector>
11 
12 namespace grail
13 {
14 namespace evolution
15 {
22  template <class T>
23  class TypedEvoParam final : public EvoParam
24  {
25  private:
26  std::vector<T> domain{};
27 
28  public:
32  TypedEvoParam(std::initializer_list<T> argsDomain)
33  : EvoParam(argsDomain.size())
34  {
35  domain.reserve(argsDomain.size());
36  std::copy(argsDomain.begin(), argsDomain.end(), std::back_inserter(domain));
37  }
38 
42  TypedEvoParam(std::vector<T>& argsDomain)
43  : EvoParam(argsDomain.size())
44  {
45  domain.reserve(argsDomain.size());
46  std::copy(argsDomain.begin(), argsDomain.end(), std::back_inserter(domain));
47  }
48 
53  int IndexOfValue(T value)
54  {
55  const auto it = std::find(domain.begin(), domain.end(), value);
56  if(it == domain.end())
57  {
58  return -1;
59  }
60  return std::distance(domain.begin(), it);
61  }
62 
67  const T Value() const
68  {
69  return domain[positionIndex];
70  }
71 
75  operator T() const
76  {
77  return Value();
78  }
79 
83  virtual std::string ToString() const override
84  {
85  return std::to_string(Value());
86  }
87  };
88 }
89 }
90 #endif //GRAIL_EVO_PARAM_H
grail::evolution::EvoParam
EvoParam - class that represents a parameter that is modifiable (optimizable) by evolutionary algorit...
Definition: EvoParam.hh:16
grail::evolution::TypedEvoParam::TypedEvoParam
TypedEvoParam(std::initializer_list< T > argsDomain)
TypedEvoParam - Constructor.
Definition: TypedEvoParam.hh:32
grail::evolution::TypedEvoParam::Value
const T Value() const
Value - gets the current value that the parameter is holding.
Definition: TypedEvoParam.hh:67
grail::evolution::TypedEvoParam::ToString
virtual std::string ToString() const override
ToString - returns the string representation of the current value hold by the parameter.
Definition: TypedEvoParam.hh:83
grail::evolution::TypedEvoParam::TypedEvoParam
TypedEvoParam(std::vector< T > &argsDomain)
TypedEvoParam - Constructor.
Definition: TypedEvoParam.hh:42
grail::evolution::TypedEvoParam::IndexOfValue
int IndexOfValue(T value)
IndexOfValue - finds a given value in the parameter's domain and returns its index.
Definition: TypedEvoParam.hh:53
grail::evolution::TypedEvoParam
TypedEvoParam A class for defining evolutionary-optimizable parameters. They can be registered in Evo...
Definition: TypedEvoParam.hh:23
grail::evolution::EvoParam::positionIndex
size_t positionIndex
positionIndex - EvoParam uses positionIndex to point to an element from its domain.
Definition: EvoParam.hh:26