AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
max_heuristic.h
1#ifndef HEURISTICS_MAX_HEURISTIC_H
2#define HEURISTICS_MAX_HEURISTIC_H
3
4#include "downward/heuristics/relaxation_heuristic.h"
5
6#include "downward/algorithms/priority_queues.h"
7
8#include <cassert>
9
10namespace max_heuristic {
11using relaxation_heuristic::OpID;
12using relaxation_heuristic::PropID;
13
14using relaxation_heuristic::Proposition;
15using relaxation_heuristic::UnaryOperator;
16
17class HSPMaxHeuristic : public relaxation_heuristic::RelaxationHeuristic {
18 priority_queues::AdaptiveQueue<PropID> queue;
19
20 void setup_exploration_queue();
21 void setup_exploration_queue_state(const State& state);
22 void relaxed_exploration();
23
24 void enqueue_if_necessary(PropID prop_id, int cost)
25 {
26 assert(cost >= 0);
27 Proposition* prop = get_proposition(prop_id);
28 if (prop->cost == -1 || prop->cost > cost) {
29 prop->cost = cost;
30 queue.push(cost, prop_id);
31 }
32 assert(prop->cost != -1 && prop->cost <= cost);
33 }
34
35protected:
36 virtual int compute_heuristic(const State& ancestor_state) override;
37
38public:
39 HSPMaxHeuristic(
40 const std::shared_ptr<AbstractTask>& transform,
41 bool cache_estimates,
42 const std::string& description,
43 utils::Verbosity verbosity);
44};
45} // namespace max_heuristic
46
47#endif