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