1#ifndef CEGAR_SUBTASK_GENERATORS_H
2#define CEGAR_SUBTASK_GENERATORS_H
15class RandomNumberGenerator;
19namespace cartesian_abstractions {
20using Facts = std::vector<FactPair>;
21using SharedTasks = std::vector<std::shared_ptr<AbstractTask>>;
23enum class FactOrder { ORIGINAL, RANDOM, HADD_UP, HADD_DOWN };
28class SubtaskGenerator {
30 virtual SharedTasks get_subtasks(
31 const std::shared_ptr<AbstractTask>& task,
32 utils::LogProxy& log)
const = 0;
33 virtual ~SubtaskGenerator() =
default;
39class TaskDuplicator :
public SubtaskGenerator {
43 explicit TaskDuplicator(
int copies);
45 virtual SharedTasks get_subtasks(
46 const std::shared_ptr<AbstractTask>& task,
47 utils::LogProxy& log)
const override;
53class GoalDecomposition :
public SubtaskGenerator {
55 std::shared_ptr<utils::RandomNumberGenerator> rng;
58 explicit GoalDecomposition(FactOrder order,
int random_seed);
60 virtual SharedTasks get_subtasks(
61 const std::shared_ptr<AbstractTask>& task,
62 utils::LogProxy& log)
const override;
69class LandmarkDecomposition :
public SubtaskGenerator {
72 std::shared_ptr<utils::RandomNumberGenerator> rng;
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;
82 explicit LandmarkDecomposition(
87 virtual SharedTasks get_subtasks(
88 const std::shared_ptr<AbstractTask>& task,
89 utils::LogProxy& log)
const override;