AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
cea_heuristic.h
1#ifndef HEURISTICS_CEA_HEURISTIC_H
2#define HEURISTICS_CEA_HEURISTIC_H
3
4#include "downward/heuristics/domain_transition_graph.h"
5
6#include "downward/heuristic.h"
7
8#include "downward/algorithms/priority_queues.h"
9
10#include <vector>
11
12class State;
13
14namespace cea_heuristic {
15struct LocalProblem;
16struct LocalProblemNode;
17struct LocalTransition;
18
19class ContextEnhancedAdditiveHeuristic : public Heuristic {
20 std::vector<std::unique_ptr<domain_transition_graph::DomainTransitionGraph>>
21 transition_graphs;
22 std::vector<LocalProblem*> local_problems;
23 std::vector<std::vector<LocalProblem*>> local_problem_index;
24 LocalProblem* goal_problem;
25 LocalProblemNode* goal_node;
26 int min_action_cost;
27
28 priority_queues::AdaptiveQueue<LocalProblemNode*> node_queue;
29
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;
33
34 int get_priority(LocalProblemNode* node) const;
35 void initialize_heap();
36 void add_to_heap(LocalProblemNode* node);
37
38 bool is_local_problem_set_up(const LocalProblem* problem) const;
39 void set_up_local_problem(
40 LocalProblem* problem,
41 int base_priority,
42 int start_value,
43 const State& state);
44
45 void try_to_fire_transition(LocalTransition* trans);
46 void expand_node(LocalProblemNode* node);
47 void expand_transition(LocalTransition* trans, const State& state);
48
49 int compute_costs(const State& state);
50 void mark_helpful_transitions(
51 LocalProblem* problem,
52 LocalProblemNode* node,
53 const State& state);
54 // Clears "reached_by" of visited nodes as a side effect to avoid
55 // recursing to the same node again.
56protected:
57 virtual int compute_heuristic(const State& ancestor_state) override;
58
59public:
60 ContextEnhancedAdditiveHeuristic(
61 const std::shared_ptr<AbstractTask>& transform,
62 bool cache_estimates,
63 const std::string& description,
64 utils::Verbosity verbosity);
65 ~ContextEnhancedAdditiveHeuristic();
66 virtual bool dead_ends_are_reliable() const override;
67};
68} // namespace cea_heuristic
69
70#endif