1#ifndef HEURISTICS_CEA_HEURISTIC_H
2#define HEURISTICS_CEA_HEURISTIC_H
4#include "downward/heuristics/domain_transition_graph.h"
6#include "downward/heuristic.h"
8#include "downward/algorithms/priority_queues.h"
14namespace cea_heuristic {
16struct LocalProblemNode;
17struct LocalTransition;
19class ContextEnhancedAdditiveHeuristic :
public Heuristic {
20 std::vector<std::unique_ptr<domain_transition_graph::DomainTransitionGraph>>
22 std::vector<LocalProblem*> local_problems;
23 std::vector<std::vector<LocalProblem*>> local_problem_index;
24 LocalProblem* goal_problem;
25 LocalProblemNode* goal_node;
28 priority_queues::AdaptiveQueue<LocalProblemNode*> node_queue;
30 LocalProblem* get_local_problem(
int var_no,
int value);
31 LocalProblem* build_problem_for_variable(
int var_no)
const;
32 LocalProblem* build_problem_for_goal()
const;
34 int get_priority(LocalProblemNode* node)
const;
35 void initialize_heap();
36 void add_to_heap(LocalProblemNode* node);
38 bool is_local_problem_set_up(
const LocalProblem* problem)
const;
39 void set_up_local_problem(
40 LocalProblem* problem,
45 void try_to_fire_transition(LocalTransition* trans);
46 void expand_node(LocalProblemNode* node);
47 void expand_transition(LocalTransition* trans,
const State& state);
49 int compute_costs(
const State& state);
50 void mark_helpful_transitions(
51 LocalProblem* problem,
52 LocalProblemNode* node,
57 virtual int compute_heuristic(
const State& ancestor_state)
override;
60 ContextEnhancedAdditiveHeuristic(
61 const std::shared_ptr<AbstractTask>& transform,
63 const std::string& description,
64 utils::Verbosity verbosity);
65 ~ContextEnhancedAdditiveHeuristic();
66 virtual bool dead_ends_are_reliable()
const override;