1#ifndef LANDMARKS_LANDMARK_FACTORY_H
2#define LANDMARKS_LANDMARK_FACTORY_H
4#include "downward/landmarks/landmark_graph.h"
6#include "downward/utils/logging.h"
12#include <unordered_map>
13#include <unordered_set>
23class LandmarkFactory {
25 virtual ~LandmarkFactory() =
default;
26 LandmarkFactory(
const LandmarkFactory&) =
delete;
28 std::shared_ptr<LandmarkGraph>
29 compute_lm_graph(
const std::shared_ptr<AbstractTask>& task);
31 virtual bool supports_conditional_effects()
const = 0;
33 bool achievers_are_calculated()
const {
return achievers_calculated; }
36 explicit LandmarkFactory(utils::Verbosity verbosity);
37 mutable utils::LogProxy log;
38 std::shared_ptr<LandmarkGraph> lm_graph;
39 bool achievers_calculated =
false;
41 void edge_add(LandmarkNode& from, LandmarkNode& to, EdgeType type);
43 void discard_all_orderings();
46 is_landmark_precondition(
const OperatorProxy& op,
const Landmark& landmark)
49 const std::vector<int>&
50 get_operators_including_eff(
const FactPair& eff)
const
52 return operators_eff_lookup[eff.var][eff.value];
56 AbstractTask* lm_graph_task;
57 std::vector<std::vector<std::vector<int>>> operators_eff_lookup;
60 generate_landmarks(
const std::shared_ptr<AbstractTask>& task) = 0;
61 void generate_operators_lookups(
const TaskProxy& task_proxy);