1#ifndef MERGE_AND_SHRINK_MERGE_AND_SHRINK_HEURISTIC_H
2#define MERGE_AND_SHRINK_MERGE_AND_SHRINK_HEURISTIC_H
4#include "downward/heuristic.h"
8namespace merge_and_shrink {
9class FactoredTransitionSystem;
10class MergeAndShrinkRepresentation;
12class MergeStrategyFactory;
16class MergeAndShrinkHeuristic :
public Heuristic {
18 std::vector<std::unique_ptr<MergeAndShrinkRepresentation>>
21 void extract_factor(FactoredTransitionSystem& fts,
int index);
22 bool extract_unsolvable_factor(FactoredTransitionSystem& fts);
23 void extract_nontrivial_factors(FactoredTransitionSystem& fts);
24 void extract_factors(FactoredTransitionSystem& fts);
27 virtual int compute_heuristic(
const State& ancestor_state)
override;
30 MergeAndShrinkHeuristic(
31 const std::shared_ptr<MergeStrategyFactory>& merge_strategy,
32 const std::shared_ptr<ShrinkStrategy>& shrink_strategy,
33 const std::shared_ptr<LabelReduction>& label_reduction,
34 bool prune_unreachable_states,
35 bool prune_irrelevant_states,
37 int max_states_before_merge,
38 int threshold_before_merge,
39 double main_loop_max_time,
40 const std::shared_ptr<AbstractTask>& transform,
42 const std::string& description,
43 utils::Verbosity verbosity);
45 ~MergeAndShrinkHeuristic()
override;