AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
map_multi_policy.h
1#ifndef PROBFD_POLICIES_MAP_MULTI_POLICY_H
2#define PROBFD_POLICIES_MAP_MULTI_POLICY_H
3
4#include "probfd/multi_policy.h"
5#include "probfd/types.h"
6
7#include <unordered_map>
8
9namespace probfd::policies {
10
11template <typename State, typename Action>
12class MapMultiPolicy : public MultiPolicy<State, Action> {
13 StateSpace<State, Action>* state_space;
14 std::unordered_map<StateID, std::vector<PolicyDecision<Action>>> mapping;
15
16public:
17 explicit MapMultiPolicy(StateSpace<State, Action>* state_space)
18 : state_space(state_space)
19 {
20 }
21
22 std::vector<PolicyDecision<Action>>
23 get_decisions(const State& state) const override
24 {
25 const auto state_id = state_space->get_state_id(state);
26 auto it = mapping.find(state_id);
27 if (it != mapping.end()) {
28 return it->second;
29 }
30 return {};
31 }
32
33 std::vector<PolicyDecision<Action>>& emplace_decisions(
34 StateID state_id,
35 std::vector<PolicyDecision<Action>> decisions)
36 {
37 return mapping.emplace(state_id, std::move(decisions)).first->second;
38 }
39
40 PolicyDecision<Action>&
41 emplace_decision(StateID state_id, Action action, Interval interval)
42 {
43 return mapping.emplace(state_id, PolicyDecision(action, interval))
44 .first->second;
45 }
46
47 std::vector<PolicyDecision<Action>>& operator[](StateID state_id)
48 {
49 return mapping[state_id];
50 }
51
52 const std::vector<PolicyDecision<Action>>&
53 operator[](StateID state_id) const
54 {
55 return mapping.find(state_id)->second;
56 }
57};
58
59} // namespace probfd::policies
60
61#endif