AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
cost_saturation.h
1#ifndef PROBFD_CARTESIAN_COST_SATURATION_H
2#define PROBFD_CARTESIAN_COST_SATURATION_H
3
4#include "probfd/value_type.h"
5
6#include "downward/utils/logging.h"
7
8#include <functional>
9#include <memory>
10#include <vector>
11
12// Forward Declarations
13class State;
14
15namespace utils {
16class CountdownTimer;
17class Duration;
18} // namespace utils
19
20namespace probfd {
21class ProbabilisticTaskProxy;
22class ProbabilisticTask;
23} // namespace probfd
24
25namespace probfd::cartesian_abstractions {
26class CartesianHeuristicFunction;
27class FlawGeneratorFactory;
28class SplitSelectorFactory;
29class SubtaskGenerator;
30} // namespace probfd::cartesian_abstractions
31
32namespace probfd::cartesian_abstractions {
33
34/*
35 Get subtasks from SubtaskGenerators, reduce their costs by wrapping
36 them in ModifiedOperatorCostsTasks, compute Abstractions, move
37 RefinementHierarchies from Abstractions to
38 CartesianHeuristicFunctions, allow extracting
39 CartesianHeuristicFunctions into AdditiveCartesianHeuristic.
40*/
41class CostSaturation {
42 const std::vector<std::shared_ptr<SubtaskGenerator>> subtask_generators_;
43 const std::shared_ptr<FlawGeneratorFactory> flaw_generator_factory_;
44 const std::shared_ptr<SplitSelectorFactory> split_selector_factory_;
45 const int max_states_;
46 const int max_non_looping_transitions_;
47 const double max_time_;
48 const bool use_general_costs_;
49 mutable utils::LogProxy log_;
50
51 std::vector<CartesianHeuristicFunction> heuristic_functions_;
52 std::vector<value_t> remaining_costs_;
53 int num_abstractions_;
54 int num_states_;
55 int num_non_looping_transitions_;
56
57 void reset(const ProbabilisticTaskProxy& task_proxy);
58 void reduce_remaining_costs(const std::vector<value_t>& saturated_costs);
59 std::shared_ptr<ProbabilisticTask>
60 get_remaining_costs_task(std::shared_ptr<ProbabilisticTask>& parent) const;
61 bool state_is_dead_end(const State& state) const;
62 void build_abstractions(
63 const std::vector<std::shared_ptr<ProbabilisticTask>>& subtasks,
64 const utils::CountdownTimer& timer,
65 std::function<bool()> should_abort);
66 void print_statistics(utils::Duration init_time) const;
67
68public:
69 CostSaturation(
70 const std::vector<std::shared_ptr<SubtaskGenerator>>&
71 subtask_generators,
72 std::shared_ptr<FlawGeneratorFactory> flaw_generator_factory,
73 std::shared_ptr<SplitSelectorFactory> split_selector_factory,
74 int max_states,
75 int max_non_looping_transitions,
76 double max_time,
77 bool use_general_costs,
78 utils::LogProxy log);
79
80 ~CostSaturation();
81
82 std::vector<CartesianHeuristicFunction> generate_heuristic_functions(
83 const std::shared_ptr<ProbabilisticTask>& task);
84};
85
86} // namespace probfd::cartesian_abstractions
87
88#endif // PROBFD_CARTESIAN_COST_SATURATION_H
The top-level namespace of probabilistic Fast Downward.
Definition command_line.h:8