1#ifndef PDBS_PATTERN_COLLECTION_GENERATOR_SYSTEMATIC_H
2#define PDBS_PATTERN_COLLECTION_GENERATOR_SYSTEMATIC_H
4#include "downward/pdbs/pattern_generator.h"
5#include "downward/pdbs/types.h"
7#include "downward/utils/hash.h"
11#include <unordered_set>
16namespace causal_graph {
21class CanonicalPDBsHeuristic;
24class PatternCollectionGeneratorSystematic :
public PatternCollectionGenerator {
25 using PatternSet = utils::HashSet<Pattern>;
27 const size_t max_pattern_size;
28 const bool only_interesting_patterns;
29 std::shared_ptr<PatternCollection> patterns;
30 PatternSet pattern_set;
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;
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;
52 PatternCollectionGeneratorSystematic(
54 bool only_interesting_patterns,
55 utils::Verbosity verbosity);