1#ifndef POTENTIALS_DIVERSE_POTENTIAL_HEURISTICS_H
2#define POTENTIALS_DIVERSE_POTENTIAL_HEURISTICS_H
4#include "downward/potentials/potential_optimizer.h"
6#include "downward/utils/logging.h"
9#include <unordered_map>
13class RandomNumberGenerator;
17using SamplesToFunctionsMap =
18 utils::HashMap<State, std::unique_ptr<PotentialFunction>>;
23class DiversePotentialHeuristics {
24 PotentialOptimizer optimizer;
27 const int max_num_heuristics;
28 const int num_samples;
29 std::shared_ptr<utils::RandomNumberGenerator> rng;
31 std::vector<std::unique_ptr<PotentialFunction>> diverse_functions;
36 filter_samples_and_compute_functions(
const std::vector<State>& samples);
39 void remove_covered_samples(
40 const PotentialFunction& chosen_function,
41 SamplesToFunctionsMap& samples_to_functions)
const;
45 std::unique_ptr<PotentialFunction> find_function_and_remove_covered_samples(
46 SamplesToFunctionsMap& samples_to_functions);
50 void cover_samples(SamplesToFunctionsMap& samples_to_functions);
53 DiversePotentialHeuristics(
55 int max_num_heuristics,
57 lp::LPSolverType lpsolver,
58 const std::shared_ptr<AbstractTask>& transform,
60 utils::Verbosity verbosity);
62 ~DiversePotentialHeuristics();
65 std::vector<std::unique_ptr<PotentialFunction>> find_functions();