1#ifndef PDBS_PATTERN_DATABASE_H
2#define PDBS_PATTERN_DATABASE_H
4#include "downward/pdbs/types.h"
6#include "downward/task_proxy.h"
13class RandomNumberGenerator;
17class AbstractOperator {
34 std::vector<FactPair> regression_preconditions;
50 const std::vector<FactPair>& prevail,
51 const std::vector<FactPair>& preconditions,
52 const std::vector<FactPair>& effects,
54 const std::vector<int>& hash_multipliers,
62 const std::vector<FactPair>& get_regression_preconditions()
const
64 return regression_preconditions;
71 int get_hash_effect()
const {
return hash_effect; }
73 int get_concrete_op_id()
const {
return concrete_op_id; }
79 int get_cost()
const {
return cost; }
81 const Pattern& pattern,
82 const VariablesProxy& variables,
83 utils::LogProxy& log)
const;
87class PatternDatabase {
97 std::vector<int> distances;
99 std::vector<int> generating_op_ids;
100 std::vector<std::vector<OperatorID>> wildcard_plan;
103 std::vector<int> hash_multipliers;
115 std::vector<FactPair>& prev_pairs,
116 std::vector<FactPair>& pre_pairs,
117 std::vector<FactPair>& eff_pairs,
118 const std::vector<FactPair>& effects_without_pre,
119 const VariablesProxy& variables,
121 std::vector<AbstractOperator>& operators);
129 void build_abstract_operators(
130 const OperatorProxy& op,
132 const std::vector<int>& variable_to_index,
133 const VariablesProxy& variables,
134 std::vector<AbstractOperator>& operators);
144 const TaskProxy& task_proxy,
145 const std::vector<int>& operator_costs,
147 const std::shared_ptr<utils::RandomNumberGenerator>& rng,
148 bool compute_wildcard_plan);
158 const std::vector<FactPair>& abstract_goals,
159 const VariablesProxy& variables)
const;
166 int hash_index(
const std::vector<int>& state)
const;
184 const TaskProxy& task_proxy,
185 const Pattern& pattern,
186 const std::vector<int>& operator_costs = std::vector<int>(),
187 bool compute_plan =
false,
188 const std::shared_ptr<utils::RandomNumberGenerator>& rng =
nullptr,
189 bool compute_wildcard_plan =
false);
190 ~PatternDatabase() =
default;
192 int get_value(
const std::vector<int>& state)
const;
193 int get_value_for_index(std::size_t index)
const;
196 const Pattern& get_pattern()
const {
return pattern; }
199 int get_size()
const {
return num_states; }
201 std::vector<std::vector<OperatorID>>&& extract_wildcard_plan()
203 return std::move(wildcard_plan);
214 double compute_mean_finite_h()
const;
217 bool is_operator_relevant(
const OperatorProxy& op)
const;