1 #ifndef GRAIL_SELECTOR_H
2 #define GRAIL_SELECTOR_H
4 #include "../GrailEvaluators/Evaluator.hh"
5 #include "Blueprint.hh"
6 #include "../GrailData/DebugInfo/UtilityReasonerSnapshot.h"
7 #include "../GrailData/UtilityModel/UtilitySelectorModel.h"
18 static const std::string MAX =
"Max";
19 static const std::string ROULETTE =
"Roulette";
21 template <
typename ContextType>
35 std::shared_ptr<Evaluator<ContextType>>
evaluator{};
64 snapshot = std::make_unique<UtilityReasonerSnapshot>();
75 const std::string& evaluatedObjectMetadata,
int rank)
79 snapshot->evaluatorSnapshots.emplace_back(evaluatedObjectName, evaluatedObjectMetadata, rank);
80 return &
snapshot->evaluatorSnapshots.back();
91 return optionIndex != std::numeric_limits<std::size_t>::max();
97 std::unique_ptr<UtilityReasonerSnapshot>
snapshot{
nullptr};
101 std::size_t
optionIndex = std::numeric_limits<std::size_t>::max();
109 template <
typename ContextType>
112 std::function<
bool(
const std::size_t&)> validator)
115 float bestWeight = std::numeric_limits<float>::min();
116 int bestRank = std::numeric_limits<int>::min();
118 for (std::size_t i = 0; i < options.size(); ++i)
123 auto& option = options[i];
125 int rank = option.rank;
126 float weight = option.evaluator->EvaluateContext(option.context,
128 option.evaluatedObjectMetadata, rank));
130 if (rank > bestRank || (rank == bestRank && weight > bestWeight))
139 template <
typename ContextType>
151 std::function<
bool(
const std::size_t&)> validator = [](
const std::size_t&) ->
bool {
return true; })
153 switch (selectionMethod)
155 case SelectionMethod::MAX:
156 SelectMaxUtility<ContextType>(options, result, validator);
The UtilityEvaluatorSnapshot class - debug snapshot of whole evaluator tree assigned to evaluated obj...
Definition: UtilityEvaluatorSnapshot.h:22
void GetBestOption(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:148
The Option struct - Helper structure describing one of the options being selected by Selector.
Definition: Selector.hh:27
int rank
rank - Measure of importance of evaluated object. Only objects with highest available rank may be sel...
Definition: Selector.hh:47
std::string evaluatedObjectMetadata
evaluatedObjectMetadata - additional data describing the evaluated object
Definition: Selector.hh:43
std::shared_ptr< Evaluator< ContextType > > evaluator
evaluator - Object responsible for evaluation of provided context.
Definition: Selector.hh:35
std::string evaluatedObjectName
evaluatedObjectName - Name of the evaluated object.
Definition: Selector.hh:39
ContextType context
context - Context to be evaluated.
Definition: Selector.hh:31
The SelectionResult struct - Structure containing results of operations done by Selector.
Definition: Selector.hh:55
bool IsValid() const
IsValid - Checks whether Selector already finished it's calculations and encountered no errors.
Definition: Selector.hh:89
SelectionResult(bool isDebugging=false)
SelectionResult - Constructor.
Definition: Selector.hh:60
std::size_t optionIndex
optionIndex - Index of option selected by Selector.
Definition: Selector.hh:101
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:74
std::unique_ptr< UtilityReasonerSnapshot > snapshot
snapshot - If debugging mode was enabled in constructor, contains debug snapshot of whole UtilityReas...
Definition: Selector.hh:97