1#ifndef MERGE_AND_SHRINK_SHRINK_BISIMULATION_H
2#define MERGE_AND_SHRINK_SHRINK_BISIMULATION_H
4#include "downward/merge_and_shrink/shrink_strategy.h"
6namespace merge_and_shrink {
9enum class AtLimit { RETURN, USE_UP };
11class ShrinkBisimulation :
public ShrinkStrategy {
13 const AtLimit at_limit;
15 void compute_abstraction(
16 const TransitionSystem& ts,
17 const Distances& distances,
19 StateEquivalenceRelation& equivalence_relation)
const;
21 int initialize_groups(
22 const TransitionSystem& ts,
23 const Distances& distances,
24 std::vector<int>& state_to_group)
const;
26 void compute_signatures(
27 const TransitionSystem& ts,
28 const Distances& distances,
29 std::vector<Signature>& signatures,
30 const std::vector<int>& state_to_group)
const;
34 dump_strategy_specific_options(utils::LogProxy& log)
const override;
35 virtual std::string name()
const override;
38 explicit ShrinkBisimulation(
bool greedy, AtLimit at_limit);
39 virtual StateEquivalenceRelation compute_equivalence_relation(
40 const TransitionSystem& ts,
41 const Distances& distances,
43 utils::LogProxy& log)
const override;
45 virtual bool requires_init_distances()
const override {
return false; }
47 virtual bool requires_goal_distances()
const override {
return true; }