1#ifndef MERGE_AND_SHRINK_DISTANCES_H
2#define MERGE_AND_SHRINK_DISTANCES_H
4#include "downward/merge_and_shrink/types.h"
21namespace merge_and_shrink {
22class TransitionSystem;
25 static const int DISTANCE_UNKNOWN = -1;
26 const TransitionSystem& transition_system;
27 std::vector<int> init_distances;
28 std::vector<int> goal_distances;
29 bool init_distances_computed;
30 bool goal_distances_computed;
32 void clear_distances();
33 int get_num_states()
const;
34 bool is_unit_cost()
const;
36 void compute_init_distances_unit_cost();
37 void compute_goal_distances_unit_cost();
38 void compute_init_distances_general_cost();
39 void compute_goal_distances_general_cost();
42 explicit Distances(
const TransitionSystem& transition_system);
43 ~Distances() =
default;
45 bool are_init_distances_computed()
const {
return init_distances_computed; }
47 bool are_goal_distances_computed()
const {
return goal_distances_computed; }
49 void compute_distances(
50 bool compute_init_distances,
51 bool compute_goal_distances,
52 utils::LogProxy& log);
63 void apply_abstraction(
64 const StateEquivalenceRelation& state_equivalence_relation,
65 bool compute_init_distances,
66 bool compute_goal_distances,
67 utils::LogProxy& log);
69 int get_init_distance(
int state)
const
71 assert(are_init_distances_computed());
72 return init_distances[state];
75 int get_goal_distance(
int state)
const
77 assert(are_goal_distances_computed());
78 return goal_distances[state];
81 void dump(utils::LogProxy& log)
const;
82 void statistics(utils::LogProxy& log)
const;