AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
cegar.h
1#ifndef PROBFD_CARTESIAN_ABSTRACTIONS_CEGAR_H
2#define PROBFD_CARTESIAN_ABSTRACTIONS_CEGAR_H
3
4#include "probfd/cartesian_abstractions/types.h"
5
6#include "downward/utils/logging.h"
7
8#include <memory>
9#include <vector>
10
11// Forward Declarations
12namespace utils {
13class Timer;
14} // namespace utils
15
16namespace probfd {
17class ProbabilisticTask;
18class ProbabilisticTaskProxy;
19} // namespace probfd
20
21namespace probfd::cartesian_abstractions {
22class AbstractState;
23class CartesianAbstraction;
24class CartesianHeuristic;
25struct Flaw;
26class FlawGenerator;
27class FlawGeneratorFactory;
28class SplitSelector;
29class SplitSelectorFactory;
30} // namespace probfd::cartesian_abstractions
31
32namespace probfd::cartesian_abstractions {
33
40 std::unique_ptr<RefinementHierarchy> refinement_hierarchy;
41 std::unique_ptr<CartesianAbstraction> abstraction;
42 std::unique_ptr<CartesianHeuristic> heuristic;
43
45};
46
47/*
48 Iteratively refine a Cartesian abstraction with counterexample-guided
49 abstraction refinement (CEGAR).
50
51 Computes the abstraction, uses FlawGenerator to find flaws, uses SplitSelector
52 to select splits in case of ambiguities and break spurious solutions.
53*/
54class CEGAR {
55 const int max_states_;
56 const int max_non_looping_transitions_;
57 const double max_time_;
58 const std::shared_ptr<FlawGeneratorFactory> flaw_generator_factory_;
59 const std::shared_ptr<SplitSelectorFactory> split_selector_factory_;
60
61 mutable utils::LogProxy log_;
62
63public:
64 CEGAR(
65 int max_states,
66 int max_non_looping_transitions,
67 double max_time,
68 std::shared_ptr<FlawGeneratorFactory> flaw_generator_factory,
69 std::shared_ptr<SplitSelectorFactory> split_selector_factory,
70 utils::LogProxy log);
71
72 ~CEGAR();
73
74 // Build abstraction.
76 run_refinement_loop(const std::shared_ptr<ProbabilisticTask>& task);
77
78private:
79 bool may_keep_refining(const CartesianAbstraction& abstraction) const;
80
81 /*
82 Map all states that can only be reached after reaching the goal
83 fact to arbitrary goal states.
84
85 We need this method only for landmark subtasks, but calling it
86 for other subtasks with a single goal fact doesn't hurt and
87 simplifies the implementation.
88 */
89 void separate_facts_unreachable_before_goal(
90 ProbabilisticTaskProxy task_proxy,
91 FlawGenerator& flaw_generator,
92 RefinementHierarchy& refinement_hierarchy,
93 CartesianAbstraction& abstraction,
94 CartesianHeuristic& heuristic,
95 utils::Timer& timer);
96
97 void refine_abstraction(
98 FlawGenerator& flaw_generator,
99 SplitSelector& split_selector,
100 RefinementHierarchy& refinement_hierarchy,
101 CartesianAbstraction& abstraction,
102 CartesianHeuristic& heuristic,
103 const Flaw& flaw,
104 utils::Timer& timer);
105
106 void refine_abstraction(
107 FlawGenerator& flaw_generator,
108 RefinementHierarchy& refinement_hierarchy,
109 CartesianAbstraction& abstraction,
110 CartesianHeuristic& heuristic,
111 const AbstractState& abstract_state,
112 int split_var,
113 const std::vector<int>& wanted);
114};
115
116} // namespace probfd::cartesian_abstractions
117
118#endif // PROBFD_CARTESIAN_ABSTRACTIONS_CEGAR_H
Proxy class used to inspect a probabilistic planning task.
Definition task_proxy.h:194
Find flaws in the abstraction.
Definition flaw_generator.h:31
The top-level namespace of probabilistic Fast Downward.
Definition command_line.h:8