AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
cg_heuristic.h
1#ifndef HEURISTICS_CG_HEURISTIC_H
2#define HEURISTICS_CG_HEURISTIC_H
3
4#include "downward/heuristic.h"
5
6#include "downward/algorithms/priority_queues.h"
7
8#include <memory>
9#include <string>
10#include <vector>
11
12namespace domain_transition_graph {
13class DomainTransitionGraph;
14struct ValueNode;
15} // namespace domain_transition_graph
16
17namespace cg_heuristic {
18class CGCache;
19
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>>
25 transition_graphs;
26
27 std::unique_ptr<CGCache> cache;
28 int cache_hits;
29 int cache_misses;
30
31 int helpful_transition_extraction_counter;
32
33 int min_action_cost;
34
35 void setup_domain_transition_graphs();
36 int get_transition_cost(
37 const State& state,
38 domain_transition_graph::DomainTransitionGraph* dtg,
39 int start_val,
40 int goal_val);
41 void mark_helpful_transitions(
42 const State& state,
43 domain_transition_graph::DomainTransitionGraph* dtg,
44 int to);
45
46protected:
47 virtual int compute_heuristic(const State& ancestor_state) override;
48
49public:
50 explicit CGHeuristic(
51 int max_cache_size,
52 const std::shared_ptr<AbstractTask>& transform,
53 bool cache_estimates,
54 const std::string& description,
55 utils::Verbosity verbosity);
56
57 ~CGHeuristic() override;
58
59 virtual bool dead_ends_are_reliable() const override;
60};
61} // namespace cg_heuristic
62
63#endif