AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
landmark_factory.h
1#ifndef LANDMARKS_LANDMARK_FACTORY_H
2#define LANDMARKS_LANDMARK_FACTORY_H
3
4#include "downward/landmarks/landmark_graph.h"
5
6#include "downward/utils/logging.h"
7
8#include <list>
9#include <map>
10#include <memory>
11#include <set>
12#include <unordered_map>
13#include <unordered_set>
14#include <vector>
15
16class TaskProxy;
17
18namespace landmarks {
19/*
20 TODO: Change order to private -> protected -> public
21 (omitted so far to minimize diff)
22*/
23class LandmarkFactory {
24public:
25 virtual ~LandmarkFactory() = default;
26 LandmarkFactory(const LandmarkFactory&) = delete;
27
28 std::shared_ptr<LandmarkGraph>
29 compute_lm_graph(const std::shared_ptr<AbstractTask>& task);
30
31 virtual bool supports_conditional_effects() const = 0;
32
33 bool achievers_are_calculated() const { return achievers_calculated; }
34
35protected:
36 explicit LandmarkFactory(utils::Verbosity verbosity);
37 mutable utils::LogProxy log;
38 std::shared_ptr<LandmarkGraph> lm_graph;
39 bool achievers_calculated = false;
40
41 void edge_add(LandmarkNode& from, LandmarkNode& to, EdgeType type);
42
43 void discard_all_orderings();
44
45 bool
46 is_landmark_precondition(const OperatorProxy& op, const Landmark& landmark)
47 const;
48
49 const std::vector<int>&
50 get_operators_including_eff(const FactPair& eff) const
51 {
52 return operators_eff_lookup[eff.var][eff.value];
53 }
54
55private:
56 AbstractTask* lm_graph_task;
57 std::vector<std::vector<std::vector<int>>> operators_eff_lookup;
58
59 virtual void
60 generate_landmarks(const std::shared_ptr<AbstractTask>& task) = 0;
61 void generate_operators_lookups(const TaskProxy& task_proxy);
62};
63
64} // namespace landmarks
65
66#endif