41 struct StateSignature;
50 explicit SplitOrder(std::vector<StateSignature>
const& signatures) : signatures(signatures) {}
51 bool operator()(uint64_t
const state1, uint64_t
const state2)
const;
54 std::vector<StateSignature>
const& signatures;
76 SplitCondition(std::vector<StateSignature>
const& signatures, ValueType
const& tolerance) : signatures(signatures), tolerance(tolerance) {}
77 bool operator()(uint64_t
const state1, uint64_t
const state2)
const
81 std::vector<StateSignature>
const& signatures;
82 ValueType
const tolerance;
105 using BlockDistributionView =
std::span<
std::pair<
Partition::Block, ValueType>>;
110 struct ChoiceSignature {
111 uint64_t choiceClass;
114 BlockDistributionView distr;
117 std::strong_ordering compareStructure(ChoiceSignature
const& other)
const;
119 using ComparisonResult = std::conditional_t<Mode == SignatureMode::Exact, std::strong_ordering, std::weak_ordering>;
121 ComparisonResult compare(ChoiceSignature
const& other)
const;
123 bool approximatelyEqual(ChoiceSignature
const& other, ValueType
const& tolerance)
const
127 using ChoiceSignatureIterator =
typename std::vector<ChoiceSignature>::const_iterator;
134 struct StateSignature {
142 std::pair<ChoiceSignatureIterator, bool> find(ChoiceSignature
const& signature, ValueType
const tolerance)
const;
152 std::pair<ChoiceSignatureIterator, bool> findWithHint(ChoiceSignatureIterator
const hint, ChoiceSignature
const& signature,
153 ValueType
const tolerance)
const
156 void insert(ChoiceSignature
const& signature, ValueType
const tolerance);
158 std::vector<ChoiceSignature> choices;
172 void addQuotientChoiceMapping(uint64_t
const state, StateSignature
const& representativeSignature,
173 std::vector<uint64_t>
const& choiceSignatureToQuotientChoiceIndex, std::vector<uint64_t>& toQuotientChoice)
const;
180 ChoiceSignature buildChoiceSignature(uint64_t
const choiceIndex);
186 ChoiceSignature getChoiceSignature(uint64_t
const choiceIndex)
const;
195 class ChoiceSignatureCache {
197 explicit ChoiceSignatureCache(uint64_t
const numStates);
209 BlockDistributionView extract(BlockDistributionView
const dest);
212 std::vector<ValueType> values;
213 std::vector<Partition::Block> support;
214 } choiceSignatureCache;
216 storm::models::sparse::Model<ValueType>
const& model;
217 Partition
const& partition;
218 std::optional<std::vector<uint64_t>>
const& choiceClasses;
226 mutable std::vector<std::pair<Partition::Block, ValueType>> choiceDistributionStorage;
240 std::vector<StateSignature> stateSignatureCache;