4#include "downward/evaluator.h"
5#include "downward/operator_id.h"
6#include "downward/per_state_information.h"
7#include "downward/task_proxy.h"
9#include "downward/algorithms/ordered_set.h"
16class Heuristic :
public Evaluator {
21 unsigned int dirty : 1;
23 HEntry(
int h,
bool dirty)
29 static_assert(
sizeof(HEntry) == 4,
"HEntry has unexpected size.");
42 ordered_set::OrderedSet<OperatorID> preferred_operators;
51 PerStateInformation<HEntry> heuristic_cache;
52 bool cache_evaluator_values;
56 const std::shared_ptr<AbstractTask> task;
60 enum { DEAD_END = -1, NO_VALUE = -2 };
62 virtual int compute_heuristic(
const State& ancestor_state) = 0;
69 void set_preferred(
const OperatorProxy& op);
71 State convert_ancestor_state(
const State& ancestor_state)
const;
75 const std::shared_ptr<AbstractTask>& transform,
77 const std::string& description,
78 utils::Verbosity verbosity);
79 virtual ~Heuristic()
override;
82 get_path_dependent_evaluators(std::set<Evaluator*>& )
override
86 virtual EvaluationResult
87 compute_result(EvaluationContext& eval_context)
override;
89 virtual bool does_cache_estimates()
const override;
90 virtual bool is_estimate_cached(
const State& state)
const override;
91 virtual int get_cached_estimate(
const State& state)
const override;