1#ifndef CEGAR_COST_SATURATION_H
2#define CEGAR_COST_SATURATION_H
4#include "downward/cartesian_abstractions/refinement_hierarchy.h"
5#include "downward/cartesian_abstractions/split_selector.h"
13class RandomNumberGenerator;
17namespace cartesian_abstractions {
18class CartesianHeuristicFunction;
19class SubtaskGenerator;
29 const std::vector<std::shared_ptr<SubtaskGenerator>> subtask_generators;
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;
38 std::vector<CartesianHeuristicFunction> heuristic_functions;
39 std::vector<int> remaining_costs;
42 int num_non_looping_transitions;
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;
57 const std::vector<std::shared_ptr<SubtaskGenerator>>&
60 int max_non_looping_transitions,
63 bool use_general_costs,
64 utils::RandomNumberGenerator& rng,
65 utils::LogProxy& log);
67 std::vector<CartesianHeuristicFunction>
68 generate_heuristic_functions(
const std::shared_ptr<AbstractTask>& task);