AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
cost_saturation.h
1#ifndef CEGAR_COST_SATURATION_H
2#define CEGAR_COST_SATURATION_H
3
4#include "downward/cartesian_abstractions/refinement_hierarchy.h"
5#include "downward/cartesian_abstractions/split_selector.h"
6
7#include <memory>
8#include <vector>
9
10namespace utils {
11class CountdownTimer;
12class Duration;
13class RandomNumberGenerator;
14class LogProxy;
15} // namespace utils
16
17namespace cartesian_abstractions {
18class CartesianHeuristicFunction;
19class SubtaskGenerator;
20
21/*
22 Get subtasks from SubtaskGenerators, reduce their costs by wrapping
23 them in ModifiedOperatorCostsTasks, compute Abstractions, move
24 RefinementHierarchies from Abstractions to
25 CartesianHeuristicFunctions, allow extracting
26 CartesianHeuristicFunctions into AdditiveCartesianHeuristic.
27*/
28class CostSaturation {
29 const std::vector<std::shared_ptr<SubtaskGenerator>> subtask_generators;
30 const int max_states;
31 const int max_non_looping_transitions;
32 const double max_time;
33 const PickSplit pick_split;
34 const bool use_general_costs;
35 utils::RandomNumberGenerator& rng;
36 utils::LogProxy& log;
37
38 std::vector<CartesianHeuristicFunction> heuristic_functions;
39 std::vector<int> remaining_costs;
40 int num_abstractions;
41 int num_states;
42 int num_non_looping_transitions;
43
44 void reset(const TaskProxy& task_proxy);
45 void reduce_remaining_costs(const std::vector<int>& saturated_costs);
46 std::shared_ptr<AbstractTask>
47 get_remaining_costs_task(std::shared_ptr<AbstractTask>& parent) const;
48 bool state_is_dead_end(const State& state) const;
49 void build_abstractions(
50 const std::vector<std::shared_ptr<AbstractTask>>& subtasks,
51 const utils::CountdownTimer& timer,
52 const std::function<bool()>& should_abort);
53 void print_statistics(utils::Duration init_time) const;
54
55public:
56 CostSaturation(
57 const std::vector<std::shared_ptr<SubtaskGenerator>>&
58 subtask_generators,
59 int max_states,
60 int max_non_looping_transitions,
61 double max_time,
62 PickSplit pick_split,
63 bool use_general_costs,
64 utils::RandomNumberGenerator& rng,
65 utils::LogProxy& log);
66
67 std::vector<CartesianHeuristicFunction>
68 generate_heuristic_functions(const std::shared_ptr<AbstractTask>& task);
69};
70} // namespace cartesian_abstractions
71
72#endif