AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
incremental_canonical_pdbs.h
1#ifndef PDBS_INCREMENTAL_CANONICAL_PDBS_H
2#define PDBS_INCREMENTAL_CANONICAL_PDBS_H
3
4#include "downward/pdbs/pattern_cliques.h"
5#include "downward/pdbs/pattern_collection_information.h"
6#include "downward/pdbs/types.h"
7
8#include "downward/task_proxy.h"
9
10#include <memory>
11
12namespace pdbs {
13class IncrementalCanonicalPDBs {
14 TaskProxy task_proxy;
15
16 std::shared_ptr<PatternCollection> patterns;
17 std::shared_ptr<PDBCollection> pattern_databases;
18 std::shared_ptr<std::vector<PatternClique>> pattern_cliques;
19
20 // A pair of variables is additive if no operator has an effect on both.
21 VariableAdditivity are_additive;
22
23 // The sum of all abstract state sizes of all pdbs in the collection.
24 int size;
25
26 // Adds a PDB for pattern but does not recompute pattern_cliques.
27 void add_pdb_for_pattern(const Pattern& pattern);
28
29 void recompute_pattern_cliques();
30
31public:
32 IncrementalCanonicalPDBs(
33 const TaskProxy& task_proxy,
34 const PatternCollection& intitial_patterns);
35 virtual ~IncrementalCanonicalPDBs() = default;
36
37 // Adds a new PDB to the collection and recomputes pattern_cliques.
38 void add_pdb(const std::shared_ptr<PatternDatabase>& pdb);
39
40 /* Returns a list of pattern cliques that would be additive to the new
41 pattern. Detailed documentation in max_additive_pdb_sets.h */
42 std::vector<PatternClique> get_pattern_cliques(const Pattern& new_pattern);
43
44 int get_value(const State& state) const;
45
46 /*
47 The following method offers a quick dead-end check for the sampling
48 procedure of iPDB-hillclimbing. This exists because we can much more
49 efficiently test if the canonical heuristic is infinite than
50 computing the exact heuristic value.
51 */
52 bool is_dead_end(const State& state) const;
53
54 PatternCollectionInformation
55 get_pattern_collection_information(utils::LogProxy& log) const;
56
57 std::shared_ptr<PDBCollection> get_pattern_databases() const
58 {
59 return pattern_databases;
60 }
61
62 int get_size() const { return size; }
63};
64} // namespace pdbs
65
66#endif