1#ifndef HEURISTICS_RELAXATION_HEURISTIC_H
2#define HEURISTICS_RELAXATION_HEURISTIC_H
4#include "downward/heuristics/array_pool.h"
6#include "downward/heuristic.h"
8#include "downward/utils/collections.h"
13class AxiomOrOperatorProxy;
17namespace relaxation_heuristic {
33 unsigned int is_goal : 1;
34 unsigned int marked : 1;
35 int num_precondition_occurences;
36 array_pool::ArrayPoolIndex precondition_of;
39static_assert(
sizeof(Proposition) == 16,
"Proposition has wrong size");
43 int num_preconditions,
44 array_pool::ArrayPoolIndex preconditions,
50 int unsatisfied_preconditions;
53 int num_preconditions;
54 array_pool::ArrayPoolIndex preconditions;
58static_assert(
sizeof(UnaryOperator) == 28,
"UnaryOperator has wrong size");
60class RelaxationHeuristic :
public Heuristic {
61 void build_unary_operators(
const AxiomOrOperatorProxy& op);
65 std::vector<PropID> proposition_offsets;
68 std::vector<UnaryOperator> unary_operators;
69 std::vector<Proposition> propositions;
70 std::vector<PropID> goal_propositions;
72 array_pool::ArrayPool preconditions_pool;
73 array_pool::ArrayPool precondition_of_pool;
75 array_pool::ArrayPoolSlice get_preconditions(OpID op_id)
const
77 const UnaryOperator& op = unary_operators[op_id];
78 return preconditions_pool.get_slice(
80 op.num_preconditions);
84 std::vector<PropID> get_preconditions_vector(OpID op_id)
const
86 auto view = get_preconditions(op_id);
87 return std::vector<PropID>(view.begin(), view.end());
95 PropID get_prop_id(
const Proposition& prop)
const
97 PropID prop_id = &prop - propositions.data();
98 assert(utils::in_bounds(prop_id, propositions));
102 OpID get_op_id(
const UnaryOperator& op)
const
104 OpID op_id = &op - unary_operators.data();
105 assert(utils::in_bounds(op_id, unary_operators));
109 PropID get_prop_id(
int var,
int value)
const;
110 PropID get_prop_id(
const FactProxy& fact)
const;
112 Proposition* get_proposition(PropID prop_id)
114 return &propositions[prop_id];
116 UnaryOperator* get_operator(OpID op_id) {
return &unary_operators[op_id]; }
118 const Proposition* get_proposition(
int var,
int value)
const;
119 Proposition* get_proposition(
int var,
int value);
120 Proposition* get_proposition(
const FactProxy& fact);
124 const std::shared_ptr<AbstractTask>& transform,
125 bool cache_estimates,
126 const std::string& description,
127 utils::Verbosity verbosity);
129 virtual bool dead_ends_are_reliable()
const override;