AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
vector_multi_policy.h
1#ifndef PROBFD_POLICIES_VECTOR_MULTI_POLICY_H
2#define PROBFD_POLICIES_VECTOR_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 VectorMultiPolicy : public MultiPolicy<State, Action> {
13 StateSpace<State, Action>* state_space_;
14 std::vector<std::vector<PolicyDecision<Action>>> decisions_per_state_;
15
16public:
17 explicit VectorMultiPolicy(
18 StateSpace<State, Action>* state_space,
19 size_t num_states)
20 : state_space_(state_space)
21 , decisions_per_state_(
22 num_states,
23 std::vector<PolicyDecision<Action>>{})
24 {
25 }
26
27 std::vector<PolicyDecision<Action>>
28 get_decisions(const State& state) const override
29 {
30 const auto state_id = state_space_->get_state_id(state);
31 return decisions_per_state_[state_id];
32 }
33
34 std::vector<PolicyDecision<Action>>& operator[](StateID state_id)
35 {
36 return decisions_per_state_[state_id];
37 }
38
39 const std::vector<PolicyDecision<Action>>&
40 operator[](StateID state_id) const
41 {
42 return decisions_per_state_[state_id];
43 }
44};
45
46} // namespace probfd::policies
47
48#endif
STL namespace.