1#ifndef PDBS_PATTERN_COLLECTION_GENERATOR_MULTIPLE_H
2#define PDBS_PATTERN_COLLECTION_GENERATOR_MULTIPLE_H
4#include "downward/pdbs/pattern_generator.h"
7#include <unordered_set>
11class RandomNumberGenerator;
32class PatternCollectionGeneratorMultiple :
public PatternCollectionGenerator {
33 const int max_pdb_size;
34 const double pattern_generation_max_time;
35 const double total_max_time;
36 const double stagnation_limit;
37 const double blacklisting_start_time;
38 const bool enable_blacklist_on_stagnation;
39 std::shared_ptr<utils::RandomNumberGenerator> rng;
40 const int random_seed;
43 int remaining_collection_size;
45 double time_point_of_last_new_pattern;
47 void check_blacklist_trigger_timer(
const utils::CountdownTimer& timer);
48 std::unordered_set<int>
49 get_blacklisted_variables(std::vector<int>& non_goal_variables);
50 void handle_generated_pattern(
51 PatternInformation&& pattern_info,
52 std::set<Pattern>& generated_patterns,
53 std::shared_ptr<PDBCollection>& generated_pdbs,
54 const utils::CountdownTimer& timer);
55 bool collection_size_limit_reached()
const;
56 bool time_limit_reached(
const utils::CountdownTimer& timer)
const;
57 bool check_for_stagnation(
const utils::CountdownTimer& timer);
58 virtual std::string id()
const = 0;
59 virtual void initialize(
const std::shared_ptr<AbstractTask>& task) = 0;
60 virtual PatternInformation compute_pattern(
63 const std::shared_ptr<utils::RandomNumberGenerator>& rng,
64 const std::shared_ptr<AbstractTask>& task,
66 std::unordered_set<int>&& blacklisted_variables) = 0;
67 virtual std::string name()
const override;
68 virtual PatternCollectionInformation
69 compute_patterns(
const std::shared_ptr<AbstractTask>& task)
override;
72 PatternCollectionGeneratorMultiple(
74 int max_collection_size,
75 double pattern_generation_max_time,
76 double total_max_time,
77 double stagnation_limit,
78 double blacklist_trigger_percentage,
79 bool enable_blacklist_on_stagnation,
81 utils::Verbosity verbosity);