1#ifndef HEURISTICS_MAX_HEURISTIC_H
2#define HEURISTICS_MAX_HEURISTIC_H
4#include "downward/heuristics/relaxation_heuristic.h"
6#include "downward/algorithms/priority_queues.h"
10namespace max_heuristic {
11using relaxation_heuristic::OpID;
12using relaxation_heuristic::PropID;
14using relaxation_heuristic::Proposition;
15using relaxation_heuristic::UnaryOperator;
17class HSPMaxHeuristic :
public relaxation_heuristic::RelaxationHeuristic {
18 priority_queues::AdaptiveQueue<PropID> queue;
20 void setup_exploration_queue();
21 void setup_exploration_queue_state(
const State& state);
22 void relaxed_exploration();
24 void enqueue_if_necessary(PropID prop_id,
int cost)
27 Proposition* prop = get_proposition(prop_id);
28 if (prop->cost == -1 || prop->cost > cost) {
30 queue.push(cost, prop_id);
32 assert(prop->cost != -1 && prop->cost <= cost);
36 virtual int compute_heuristic(
const State& ancestor_state)
override;
40 const std::shared_ptr<AbstractTask>& transform,
42 const std::string& description,
43 utils::Verbosity verbosity);