Grail (C++)  1.1.1
A multi-platform, modular, universal engine for embedding advanced AI in games.
UtilityReasoner.hh
1 #ifndef GRAIL_UTILITY_REASONER_H
2 #define GRAIL_UTILITY_REASONER_H
3 
4 #include "../Selector.hh"
5 #include "../../GrailCore/Reasoner.hh"
6 #include "../../GrailData/DebugInfo/UtilityReasonerSnapshot.h"
7 #include "../../GrailData/UtilityModel/UtilitySelectorModel.h"
8 #include "../../GrailEvaluators/Evaluator.hh"
9 
10 #include <functional>
11 #include <map>
12 #include <mutex>
13 #include <stack>
14 #include <tuple>
15 
16 namespace grail
17 {
18  template <typename InstanceType, typename ContextType, typename DataType>
20  {
24  std::shared_ptr<utility::Evaluator<ContextType>> evaluator;
32  int rank;
33 
36  int rank)
38  {
39  }
40 
43  int rank)
45  {
46  }
47  };
48 
54  class UtilityReasoner : public Reasoner
55  {
56  public:
63 
66  SelectionMethod selectionMethod = SelectionMethod::MAX,
67  float persistence = 0.1f);
68  UtilityReasoner(const UtilityReasoner& other) = delete;
69  UtilityReasoner(UtilityReasoner&& other) = delete;
70 
71  virtual ~UtilityReasoner() override = default;
72 
73  UtilityReasoner& operator =(const UtilityReasoner& other) = delete;
74  UtilityReasoner& operator =(UtilityReasoner&& other) = delete;
75 
80  virtual void SelectBehavior(AIEntity& entity) override;
81 
87  virtual std::unique_ptr<ISnapshotGenerator> CreateSnapshotGenerator(size_t entityId) override;
97  void SetSnapshotProduction(bool isEnabled);
98 
99  private:
100  void AssignBehaviorInstance(AIEntity& entity,
101  std::unique_ptr<Behavior> instance,
103  std::vector<std::unique_ptr<Behavior>> GenerateContextsAndInstances(const AIEntity& entity);
104  void ValidateOperationStack(const AIEntity& entity);
105  void SelectBehaviorFromStack(AIEntity& entity);
106 
107  std::vector<BlueprintOption<Behavior, EntityBlackboardPair, grail::AIEntity>> blueprintOptions = {};
108  std::stack<std::pair<std::unique_ptr<Behavior>, utility::Option<EntityBlackboardPair>>> operationStack
109  {};
110  std::vector<utility::Option<EntityBlackboardPair>> generatedOptions{};
111  utility::Option<EntityBlackboardPair> currentBehaviorOption{{}, nullptr, "", "", 0};
112  utility::Option<EntityBlackboardPair> previousBehaviorOption{{}, nullptr, "", "", 0};
113 
114  SelectionMethod selectionMethod = SelectionMethod::MAX;
115 
116  float persistence = 0.0f;
117 
118  bool produceSnapshot = false;
119  UtilityReasonerSnapshot cachedSnapshot{};
120  mutable std::mutex snapshotMutex;
121  };
122 }
123 #endif //GRAIL_UTILITY_REASONER_H
grail::AIEntity
The AIEntity class - Defines a basic object which can execute behaviors.
Definition: AIEntity.hh:39
grail::Reasoner
The Reasoner class - Entity's "brain", assigns them behaviors chosen by user-defined algorithms.
Definition: Reasoner.hh:19
grail::UtilityReasoner::SetSnapshotProduction
void SetSnapshotProduction(bool isEnabled)
SetSnapshotProduction - Tells reasoner whether it should produce debug snapshots of its state.
Definition: UtilityReasoner.cpp:173
grail::BlueprintOption
Definition: UtilityReasoner.hh:19
grail::BlueprintOption::behaviorBlueprint
utility::Blueprint< InstanceType, ContextType, DataType > behaviorBlueprint
Blueprint for this option.
Definition: UtilityReasoner.hh:28
grail::UtilityReasoner::UtilityReasoner
UtilityReasoner(std::vector< BlueprintOption< Behavior, EntityBlackboardPair, grail::AIEntity >> &&blueprintOptions, SelectionMethod selectionMethod=SelectionMethod::MAX, float persistence=0.1f)
UtilityReasoner - Constructor.
Definition: UtilityReasoner.cpp:9
grail::UtilityReasoner
The UtilityReasoner class - Class responsible for assigning behaviors using Utility System algorithm....
Definition: UtilityReasoner.hh:54
grail::UtilityReasoner::CreateSnapshotGenerator
virtual std::unique_ptr< ISnapshotGenerator > CreateSnapshotGenerator(size_t entityId) override
CreateSnapshotGenerator - Creates object responsible for producing snapshots for this reasoner assign...
Definition: UtilityReasoner.cpp:161
grail::UtilityReasoner::SelectBehavior
virtual void SelectBehavior(AIEntity &entity) override
SelectBehavior - Selects behavior, if able, and assigns it to entity.
Definition: UtilityReasoner.cpp:20
grail::utility::Option< EntityBlackboardPair >
grail::BlueprintOption::evaluator
std::shared_ptr< utility::Evaluator< ContextType > > evaluator
Evaluator for this option.
Definition: UtilityReasoner.hh:24
grail::BlueprintOption::rank
int rank
Rank - measure of importance of evaluated object. Only objects with highest available rank may be sel...
Definition: UtilityReasoner.hh:32
grail::utility::Evaluator
The Evaluator class - base class being able to evaluate given context and output the result.
Definition: Evaluator.hh:20
grail::UtilityReasonerSnapshot
Definition: UtilityReasonerSnapshot.h:10
grail::UtilityReasoner::GetUtilityReasonerSnapshot
UtilityReasonerSnapshot GetUtilityReasonerSnapshot() const
GetUtilityReasonerSnapshot - Returns copy of current snapshot and clear the original data.
Definition: UtilityReasoner.cpp:166
grail::utility::Blueprint< InstanceType, ContextType, DataType >