Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
InternalCuddSignatureRefiner.h
Go to the documentation of this file.
1#pragma once
2
3#include <boost/optional.hpp>
4#include <set>
5
7
9
11
13
14#pragma GCC diagnostic push
15#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
16#include <parallel_hashmap/phmap.h>
17#pragma GCC diagnostic pop
18
19namespace storm {
20namespace dd {
21
22template<storm::dd::DdType DdType>
23class DdManager;
24
25template<storm::dd::DdType DdType, typename ValueType>
26class Add;
27
28namespace bisimulation {
29
30template<storm::dd::DdType DdType, typename ValueType>
31class Partition;
32
33template<storm::dd::DdType DdType, typename ValueType>
34class Signature;
35
36template<typename ValueType>
38 public:
40 std::set<storm::expressions::Variable> const& stateVariables,
41 storm::dd::Bdd<storm::dd::DdType::CUDD> const& nondeterminismVariables,
42 storm::dd::Bdd<storm::dd::DdType::CUDD> const& nonBlockVariables,
44
47
48 private:
49 void clearCaches();
50
51 std::pair<storm::dd::Add<storm::dd::DdType::CUDD, ValueType>, boost::optional<storm::dd::Add<storm::dd::DdType::CUDD, ValueType>>> refine(
53
54 DdNodePtr encodeBlock(uint64_t blockIndex);
55
56 std::pair<DdNodePtr, DdNodePtr> reuseOrRelabel(DdNode* partitionNode, DdNode* nondeterminismVariablesNode, DdNode* nonBlockVariablesNode);
57
58 std::pair<DdNodePtr, DdNodePtr> refine(DdNode* partitionNode, DdNode* signatureNode, DdNode* nondeterminismVariablesNode, DdNode* nonBlockVariablesNode);
59
61 ::DdManager* ddman;
62 storm::expressions::Variable blockVariable;
63 std::set<storm::expressions::Variable> stateVariables;
64
65 // The cubes representing all non-block and all nondeterminism variables, respectively.
66 storm::dd::Bdd<storm::dd::DdType::CUDD> nondeterminismVariables;
68
69 // The provided options.
71
72 // The indices of the DD variables associated with the block variable.
73 std::vector<uint64_t> blockDdVariableIndices;
74
75 // A vector used for encoding block indices.
76 std::vector<int> blockEncoding;
77
78 // The current number of blocks of the new partition.
79 uint64_t nextFreeBlockIndex;
80
81 // The number of completed refinements.
82 uint64_t numberOfRefinements;
83
84 // The cache used to identify states with identical signature.
85 phmap::flat_hash_map<std::pair<DdNode const*, DdNode const*>, std::pair<DdNodePtr, DdNodePtr>, CuddPointerPairHash> signatureCache;
86
87 // The cache used to identify which old block numbers have already been reused.
88 phmap::flat_hash_map<DdNode const*, ReuseWrapper> reuseBlocksCache;
89};
90
91} // namespace bisimulation
92} // namespace dd
93} // namespace storm
LabParser.cpp.