1#ifndef PDBS_PATTERN_COLLECTION_GENERATOR_HILLCLIMBING_H
2#define PDBS_PATTERN_COLLECTION_GENERATOR_HILLCLIMBING_H
4#include "downward/pdbs/pattern_generator.h"
5#include "downward/pdbs/types.h"
7#include "downward/task_proxy.h"
16class RandomNumberGenerator;
20class RandomWalkSampler;
24class IncrementalCanonicalPDBs;
28class PatternCollectionGeneratorHillclimbing
29 :
public PatternCollectionGenerator {
31 const int pdb_max_size;
33 const int collection_max_size;
34 const int num_samples;
36 const int min_improvement;
37 const double max_time;
38 std::shared_ptr<utils::RandomNumberGenerator> rng;
40 std::unique_ptr<IncrementalCanonicalPDBs> current_pdbs;
44 utils::CountdownTimer* hill_climbing_timer;
55 int generate_candidate_pdbs(
56 const TaskProxy& task_proxy,
57 const std::vector<std::vector<int>>& relevant_neighbours,
58 const PatternDatabase& pdb,
59 std::set<Pattern>& generated_patterns,
60 PDBCollection& candidate_pdbs);
73 const sampling::RandomWalkSampler& sampler,
75 std::vector<State>& samples);
82 std::pair<int, int> find_best_improving_pdb(
83 const std::vector<State>& samples,
84 const std::vector<int>& samples_h_values,
85 PDBCollection& candidate_pdbs);
93 bool is_heuristic_improved(
94 const PatternDatabase& pdb,
97 const PDBCollection& pdbs,
98 const std::vector<PatternClique>& pattern_cliques);
122 void hill_climbing(
const TaskProxy& task_proxy);
124 virtual std::string name()
const override;
132 virtual PatternCollectionInformation
133 compute_patterns(
const std::shared_ptr<AbstractTask>& task)
override;
136 PatternCollectionGeneratorHillclimbing(
138 int collection_max_size,
143 utils::Verbosity verbosity);
145 ~PatternCollectionGeneratorHillclimbing()
override;