 |
Grail (C++)
1.2.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
|
3 #ifndef GRAIL_SELECTOR_H
4 #define GRAIL_SELECTOR_H
6 #include "Blueprint.hh"
7 #include "../GrailData/DebugInfo/UtilityReasonerSnapshot.h"
8 #include "../GrailData/UtilityModel/UtilitySelectorModel.h"
9 #include "../GrailEvaluators/Evaluator.hh"
20 static const std::string MAX =
"Max";
21 static const std::string ROULETTE =
"Roulette";
23 template <
typename ContextType>
37 std::shared_ptr<evaluator::Evaluator<ContextType>>
evaluator{};
65 snapshot = std::make_unique<data::UtilityReasonerSnapshot>();
76 const std::string& evaluatedObjectMetadata,
81 snapshot->evaluatorSnapshots.emplace_back(evaluatedObjectName, evaluatedObjectMetadata, rank);
82 return &
snapshot->evaluatorSnapshots.back();
93 return optionIndex != std::numeric_limits<std::size_t>::max();
99 std::unique_ptr<data::UtilityReasonerSnapshot>
snapshot{
nullptr};
103 std::size_t
optionIndex = std::numeric_limits<std::size_t>::max();
111 template <
typename ContextType>
114 std::function<
bool(
const std::size_t&)> validator)
116 float bestWeight = std::numeric_limits<float>::min();
117 int bestRank = std::numeric_limits<int>::min();
119 for(std::size_t i = 0; i < options.size(); ++i)
126 auto& option = options[i];
128 int rank = option.rank;
129 float weight = option.evaluator->EvaluateContext(option.context,
131 FetchNextEvaluatorSnapshot(option.
133 option.evaluatedObjectMetadata,
136 if(rank > bestRank || (rank == bestRank && weight > bestWeight))
145 template <
typename ContextType>
157 std::function<
bool(
const std::size_t&)> validator = [](
const std::size_t&) ->
bool
162 switch(selectionMethod)
164 case data::SelectionMethod::MAX:
165 SelectMaxUtility<ContextType>(options, result, validator);
175 #endif //GRAIL_SELECTOR_H
data::UtilityEvaluatorSnapshot * FetchNextEvaluatorSnapshot(const std::string &evaluatedObjectName, const std::string &evaluatedObjectMetadata, int rank)
FetchNextEvaluatorSnapshot - If debugging mode was enabled in constructor, creates an empty snapshot ...
Definition: Selector.hh:75
std::shared_ptr< evaluator::Evaluator< ContextType > > evaluator
evaluator - Object responsible for evaluation of provided context.
Definition: Selector.hh:37
std::string evaluatedObjectName
evaluatedObjectName - Name of the evaluated object.
Definition: Selector.hh:41
std::string evaluatedObjectMetadata
evaluatedObjectMetadata - additional data describing the evaluated object
Definition: Selector.hh:45
std::size_t optionIndex
optionIndex - Index of option selected by Selector.
Definition: Selector.hh:103
bool IsValid() const
IsValid - Checks whether Selector already finished it's calculations and encountered no errors.
Definition: Selector.hh:91
The SelectionResult struct - Structure containing results of operations done by Selector.
Definition: Selector.hh:55
The Option struct - Helper structure describing one of the options being selected by Selector.
Definition: Selector.hh:28
void GetBestOption(data::SelectionMethod selectionMethod, const std::vector< Option< ContextType >> &options, SelectionResult &result, std::function< bool(const std::size_t &)> validator=[](const std::size_t &) -> bool { return true;})
GetBestOption - Selects most suitable option. Provides different context for each evaluated objects.
Definition: Selector.hh:154
int rank
rank - Measure of importance of evaluated object. Only objects with highest available rank may be sel...
Definition: Selector.hh:49
The UtilityEvaluatorSnapshot class - debug snapshot of whole evaluator tree assigned to evaluated obj...
Definition: UtilityEvaluatorSnapshot.h:25
SelectionResult(bool isDebugging=false)
SelectionResult - Constructor.
Definition: Selector.hh:61
std::unique_ptr< data::UtilityReasonerSnapshot > snapshot
snapshot - If debugging mode was enabled in constructor, contains debug snapshot of whole UtilityReas...
Definition: Selector.hh:99
ContextType context
context - Context to be evaluated.
Definition: Selector.hh:33