AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
pattern_collection_generator_systematic.h
1#ifndef PDBS_PATTERN_COLLECTION_GENERATOR_SYSTEMATIC_H
2#define PDBS_PATTERN_COLLECTION_GENERATOR_SYSTEMATIC_H
3
4#include "downward/pdbs/pattern_generator.h"
5#include "downward/pdbs/types.h"
6
7#include "downward/utils/hash.h"
8
9#include <cstdlib>
10#include <memory>
11#include <unordered_set>
12#include <vector>
13
14class TaskProxy;
15
16namespace causal_graph {
17class CausalGraph;
18}
19
20namespace pdbs {
21class CanonicalPDBsHeuristic;
22
23// Invariant: patterns are always sorted.
24class PatternCollectionGeneratorSystematic : public PatternCollectionGenerator {
25 using PatternSet = utils::HashSet<Pattern>;
26
27 const size_t max_pattern_size;
28 const bool only_interesting_patterns;
29 std::shared_ptr<PatternCollection> patterns;
30 PatternSet pattern_set; // Cleared after pattern computation.
31
32 void enqueue_pattern_if_new(const Pattern& pattern);
33 void compute_eff_pre_neighbors(
34 const causal_graph::CausalGraph& cg,
35 const Pattern& pattern,
36 std::vector<int>& result) const;
37 void compute_connection_points(
38 const causal_graph::CausalGraph& cg,
39 const Pattern& pattern,
40 std::vector<int>& result) const;
41
42 void build_sga_patterns(
43 const TaskProxy& task_proxy,
44 const causal_graph::CausalGraph& cg);
45 void build_patterns(const TaskProxy& task_proxy);
46 void build_patterns_naive(const TaskProxy& task_proxy);
47 virtual std::string name() const override;
48 virtual PatternCollectionInformation
49 compute_patterns(const std::shared_ptr<AbstractTask>& task) override;
50
51public:
52 PatternCollectionGeneratorSystematic(
53 int pattern_max_size,
54 bool only_interesting_patterns,
55 utils::Verbosity verbosity);
56};
57} // namespace pdbs
58
59#endif