1#ifndef PROBFD_POLICIES_MAP_MULTI_POLICY_H
2#define PROBFD_POLICIES_MAP_MULTI_POLICY_H
4#include "probfd/multi_policy.h"
5#include "probfd/types.h"
7#include <unordered_map>
9namespace probfd::policies {
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;
17 explicit MapMultiPolicy(StateSpace<State, Action>* state_space)
18 : state_space(state_space)
22 std::vector<PolicyDecision<Action>>
23 get_decisions(
const State& state)
const override
25 const auto state_id = state_space->get_state_id(state);
26 auto it = mapping.find(state_id);
27 if (it != mapping.end()) {
33 std::vector<PolicyDecision<Action>>& emplace_decisions(
35 std::vector<PolicyDecision<Action>> decisions)
37 return mapping.emplace(state_id, std::move(decisions)).first->second;
40 PolicyDecision<Action>&
41 emplace_decision(StateID state_id, Action action, Interval interval)
43 return mapping.emplace(state_id, PolicyDecision(action, interval))
47 std::vector<PolicyDecision<Action>>& operator[](StateID state_id)
49 return mapping[state_id];
52 const std::vector<PolicyDecision<Action>>&
53 operator[](StateID state_id)
const
55 return mapping.find(state_id)->second;