1#ifndef HEURISTICS_CG_HEURISTIC_H
2#define HEURISTICS_CG_HEURISTIC_H
4#include "downward/heuristic.h"
6#include "downward/algorithms/priority_queues.h"
12namespace domain_transition_graph {
13class DomainTransitionGraph;
17namespace cg_heuristic {
20class CGHeuristic :
public Heuristic {
21 using ValueNodeQueue =
22 priority_queues::AdaptiveQueue<domain_transition_graph::ValueNode*>;
23 std::vector<std::unique_ptr<ValueNodeQueue>> prio_queues;
24 std::vector<std::unique_ptr<domain_transition_graph::DomainTransitionGraph>>
27 std::unique_ptr<CGCache> cache;
31 int helpful_transition_extraction_counter;
35 void setup_domain_transition_graphs();
36 int get_transition_cost(
38 domain_transition_graph::DomainTransitionGraph* dtg,
41 void mark_helpful_transitions(
43 domain_transition_graph::DomainTransitionGraph* dtg,
47 virtual int compute_heuristic(
const State& ancestor_state)
override;
52 const std::shared_ptr<AbstractTask>& transform,
54 const std::string& description,
55 utils::Verbosity verbosity);
57 ~CGHeuristic()
override;
59 virtual bool dead_ends_are_reliable()
const override;