1#ifndef LANDMARKS_LANDMARK_HEURISTIC_H
2#define LANDMARKS_LANDMARK_HEURISTIC_H
4#include "downward/heuristic.h"
8namespace successor_generator {
9class SuccessorGenerator;
16class LandmarkStatusManager;
18class LandmarkHeuristic :
public Heuristic {
19 bool initial_landmark_graph_has_cycle_of_natural_orderings;
23 bool landmark_graph_has_cycle_of_natural_orderings();
24 bool depth_first_search_for_cycle_of_natural_orderings(
25 const LandmarkNode& node,
26 std::vector<bool>& closed,
27 std::vector<bool>& visited);
30 std::shared_ptr<LandmarkGraph> lm_graph;
31 const bool use_preferred_operators;
33 std::unique_ptr<LandmarkStatusManager> lm_status_manager;
34 std::unique_ptr<successor_generator::SuccessorGenerator>
38 const std::shared_ptr<LandmarkFactory>& lm_factory,
43 compute_landmark_graph(
const std::shared_ptr<LandmarkFactory>& lm_factory);
45 virtual int get_heuristic_value(
const State& ancestor_state) = 0;
48 generate_preferred_operators(
const State& state, ConstBitsetView& future);
49 virtual int compute_heuristic(
const State& ancestor_state)
override;
53 bool use_preferred_operators,
54 const std::shared_ptr<AbstractTask>& transform,
56 const std::string& description,
57 utils::Verbosity verbosity);
59 ~LandmarkHeuristic()
override;
62 get_path_dependent_evaluators(std::set<Evaluator*>& evals)
override
67 virtual void notify_initial_state(
const State& initial_state)
override;
68 virtual void notify_state_transition(
69 const State& parent_state,
71 const State& state)
override;