AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
subtask_generators.h
1#ifndef PROBFD_CARTESIAN_SUBTASK_GENERATORS_H
2#define PROBFD_CARTESIAN_SUBTASK_GENERATORS_H
3
4#include <memory>
5#include <vector>
6
7// Forward Declarations
8struct FactPair;
9
10namespace landmarks {
11class LandmarkGraph;
12}
13
14namespace utils {
15class RandomNumberGenerator;
16class LogProxy;
17} // namespace utils
18
19namespace probfd {
20class ProbabilisticTask;
21}
22
23namespace probfd::cartesian_abstractions {
24
25using Facts = std::vector<FactPair>;
26using SharedTasks = std::vector<std::shared_ptr<ProbabilisticTask>>;
27
28enum class FactOrder { ORIGINAL, RANDOM, HADD_UP, HADD_DOWN };
29
30/*
31 Create focused subtasks.
32*/
33class SubtaskGenerator {
34public:
35 virtual SharedTasks get_subtasks(
36 const std::shared_ptr<ProbabilisticTask>& task,
37 utils::LogProxy& log) const = 0;
38 virtual ~SubtaskGenerator() = default;
39};
40
41/*
42 Return copies of the original task.
43*/
44class TaskDuplicator : public SubtaskGenerator {
45 int num_copies_;
46
47public:
48 explicit TaskDuplicator(int copies);
49
50 SharedTasks get_subtasks(
51 const std::shared_ptr<ProbabilisticTask>& task,
52 utils::LogProxy& log) const override;
53};
54
55/*
56 Use ModifiedGoalsTask to return a subtask for each goal fact.
57*/
58class GoalDecomposition : public SubtaskGenerator {
59 FactOrder fact_order_;
60 std::shared_ptr<utils::RandomNumberGenerator> rng_;
61
62public:
63 explicit GoalDecomposition(FactOrder order, int random_seed);
64
65 SharedTasks get_subtasks(
66 const std::shared_ptr<ProbabilisticTask>& task,
67 utils::LogProxy& log) const override;
68};
69
70/*
71 Nest ModifiedGoalsTask and DomainAbstractedTask to return subtasks
72 focussing on a single landmark fact.
73*/
74class LandmarkDecomposition : public SubtaskGenerator {
75 FactOrder fact_order_;
76 bool combine_facts_;
77 std::shared_ptr<utils::RandomNumberGenerator> rng_;
78
79public:
80 explicit LandmarkDecomposition(
81 FactOrder order,
82 bool combine_facts,
83 int random_seed);
84
85 SharedTasks get_subtasks(
86 const std::shared_ptr<ProbabilisticTask>& task,
87 utils::LogProxy& log) const override;
88};
89
90} // namespace probfd::cartesian_abstractions
91
92#endif // PROBFD_CARTESIAN_SUBTASK_GENERATORS_H
The top-level namespace of probabilistic Fast Downward.
Definition command_line.h:8