AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
abstraction.h
1#ifndef CEGAR_ABSTRACTION_H
2#define CEGAR_ABSTRACTION_H
3
4#include "downward/cartesian_abstractions/types.h"
5
6#include "downward/task_proxy.h"
7
8#include "downward/utils/collections.h"
9
10#include <memory>
11#include <vector>
12
13namespace utils {
14class LogProxy;
15}
16
17namespace cartesian_abstractions {
18class AbstractState;
19class RefinementHierarchy;
20class TransitionSystem;
21
22/*
23 Store the set of AbstractStates, use AbstractSearch to find abstract
24 solutions, find flaws, use SplitSelector to select splits in case of
25 ambiguities, break spurious solutions and maintain the
26 RefinementHierarchy.
27*/
28class Abstraction {
29 const std::unique_ptr<TransitionSystem> transition_system;
30 const State concrete_initial_state;
31 const std::vector<FactPair> goal_facts;
32
33 // All (as of yet unsplit) abstract states.
34 AbstractStates states;
35 // State ID of abstract initial state.
36 int init_id;
37 // Abstract goal states. Only landmark tasks can have multiple goal states.
38 Goals goals;
39
40 /* DAG with inner nodes for all split states and leaves for all
41 current states. */
42 std::unique_ptr<RefinementHierarchy> refinement_hierarchy;
43
44 utils::LogProxy& log;
45
46 void initialize_trivial_abstraction(const std::vector<int>& domain_sizes);
47
48public:
49 Abstraction(
50 const std::shared_ptr<AbstractTask>& task,
51 utils::LogProxy& log);
52 ~Abstraction();
53
54 Abstraction(const Abstraction&) = delete;
55
56 int get_num_states() const;
57 const AbstractState& get_initial_state() const;
58 const Goals& get_goals() const;
59 const AbstractState& get_state(int state_id) const;
60 const TransitionSystem& get_transition_system() const;
61 std::unique_ptr<RefinementHierarchy> extract_refinement_hierarchy();
62
63 /* Needed for CEGAR::separate_facts_unreachable_before_goal(). */
64 void mark_all_states_as_goals();
65
66 // Split state into two child states.
67 std::pair<int, int>
68 refine(const AbstractState& state, int var, const std::vector<int>& wanted);
69
70 void print_statistics() const;
71};
72} // namespace cartesian_abstractions
73
74#endif