AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
cartesian_abstraction.h
1#ifndef PROBFD_CARTESIAN_ABSTRACTION_H
2#define PROBFD_CARTESIAN_ABSTRACTION_H
3
4#include "probfd/cartesian_abstractions/abstract_state.h"
5#include "probfd/cartesian_abstractions/types.h"
6
7#include "probfd/mdp.h"
8#include "probfd/type_traits.h"
9#include "probfd/types.h"
10#include "probfd/value_type.h"
11
12#include "downward/utils/logging.h"
13
14#include "downward/abstract_task.h"
15#include "downward/task_proxy.h"
16
17#include <memory>
18#include <utility>
19#include <vector>
20
21// Forward Declarations
22namespace probfd {
23class ProbabilisticTaskProxy;
24template <typename>
25class Distribution;
26} // namespace probfd
27
28namespace probfd::cartesian_abstractions {
29class ProbabilisticTransitionSystem;
30struct ProbabilisticTransition;
31} // namespace probfd::cartesian_abstractions
32
33namespace probfd::cartesian_abstractions {
34
35/*
36 Store the set of AbstractStates, use FlawGenerator to find flaws,
37 use SplitSelector to select splits in case of ambiguities, break spurious
38 solutions and maintain the RefinementHierarchy.
39*/
40class CartesianAbstraction
41 : public SimpleMDP<int, const ProbabilisticTransition*> {
42 const std::unique_ptr<ProbabilisticTransitionSystem> transition_system_;
43 const State concrete_initial_state_;
44 const std::vector<FactPair> goal_facts_;
45
46 // All (yet unsplit) abstract states.
47 AbstractStates states_;
48 // State ID of abstract initial state.
49 int init_id_;
50 // Abstract goal states.
51 Goals goals_;
52
53 std::vector<value_t> operator_costs_;
54
55 mutable utils::LogProxy log_;
56
57 void initialize_trivial_abstraction(const std::vector<int>& domain_sizes);
58
59public:
60 CartesianAbstraction(
61 const ProbabilisticTaskProxy& task,
62 std::vector<value_t> operator_costs,
63 utils::LogProxy log);
64 ~CartesianAbstraction() override;
65
66 CartesianAbstraction(const CartesianAbstraction&) = delete;
67
68 StateID get_state_id(int state) override;
69
70 int get_state(StateID state_id) override;
71
72 void generate_applicable_actions(
73 int state,
74 std::vector<const ProbabilisticTransition*>& result) override;
75
76 void generate_action_transitions(
77 int state,
78 const ProbabilisticTransition* action,
79 Distribution<StateID>& result) override;
80
81 void generate_all_transitions(
82 int state,
83 std::vector<const ProbabilisticTransition*>& aops,
84 std::vector<Distribution<StateID>>& successors) override;
85
86 void generate_all_transitions(
87 int state,
88 std::vector<TransitionType>& transitions) override;
89
90 bool is_goal(int state) const override;
91 value_t get_non_goal_termination_cost() const override;
92
93 value_t get_action_cost(const ProbabilisticTransition* t) override;
94
95 value_t get_cost(int op_index) const;
96
97 int get_num_states() const;
98 const AbstractState& get_initial_state() const;
99 const Goals& get_goals() const;
100 const AbstractState& get_abstract_state(int state_id) const;
101 const ProbabilisticTransitionSystem& get_transition_system() const;
102
103 /* Needed for CEGAR::separate_facts_unreachable_before_goal(). */
104 void mark_all_states_as_goals();
105
106 // Split state into two child states.
107 std::pair<int, int> refine(
108 RefinementHierarchy& refinement_hierarchy,
109 const AbstractState& abstract_state,
110 int split_var,
111 const std::vector<int>& wanted);
112
113 void print_statistics() const override;
114};
115
116} // namespace probfd::cartesian_abstractions
117
118#endif // PROBFD_CARTESIAN_ABSTRACTION_H
The top-level namespace of probabilistic Fast Downward.
Definition command_line.h:8
double value_t
Typedef for the state value type.
Definition aliases.h:7