41 auto [ token_ptr, request_ptr, decision ] = std::move(*it);
44 auto token = token_ptr.lock();
46 assert( token->node->parent );
50 std::move(token_ptr), std::move(request_ptr), std::move(decision)
55 auto reward = decision->evaluate();
59 if ( reward.has_value() ) {
61 return std::make_shared<EntryEvent>(decision->token);
68 constexpr std::size_t last = std::tuple_size<
decltype(decisionTuple)>::value - 1;
69 std::weak_ptr<Event>& event_ptr = std::get<last>(decisionTuple);
70 if (
auto event = event_ptr.lock();
71 event && std::get<0>(decisionTuple) < std::numeric_limits<double>::max()
83 std::unordered_map<const Token*, auto_list<std::weak_ptr<const Token>, std::weak_ptr<const DecisionRequest>, std::shared_ptr<Decision> > > sequentialActivityEntries;
87 auto token = token_ptr.lock();
89 assert( token->node->parent );
92 auto tokenAtSequentialPerformer = token->getSequentialPerformerToken();
94 sequentialActivityEntries[tokenAtSequentialPerformer].emplace_back(
95 std::move(token_ptr), std::move(request_ptr), std::move(decision)
101 for (
auto& [ performerToken, decisionTuples ] : sequentialActivityEntries ) {
102 assert( !performerToken->performing );
104 for (
auto& [ token_ptr, request_ptr, decision ] : decisionTuples ) {
106 auto reward = decision->evaluate();
111 constexpr std::size_t last = std::tuple_size<
decltype(decisionTuple)>::value - 1;
112 std::weak_ptr<Event>& event_ptr = std::get<last>(decisionTuple);
113 if (
auto event = event_ptr.lock();
114 event && std::get<0>(decisionTuple) < std::numeric_limits<double>::max()
GreedyEntry(Evaluator *evaluator)
void connect(Mediator *mediator) override
auto_list< std::weak_ptr< const Token >, std::weak_ptr< const DecisionRequest >, std::shared_ptr< Decision > > unevaluatedSequentialEntries
void notice(const Observable *observable) override
std::shared_ptr< Event > dispatchEvent(const SystemState *systemState) override