Storm
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#include <parallel_hashmap/phmap.h>
15
16namespace storm {
17namespace dd {
18
19template<storm::dd::DdType DdType>
20class DdManager;
21
22template<storm::dd::DdType DdType, typename ValueType>
23class Add;
24
25namespace bisimulation {
26
27template<storm::dd::DdType DdType, typename ValueType>
28class Partition;
29
30template<storm::dd::DdType DdType, typename ValueType>
31class Signature;
32
33template<typename ValueType>
35 public:
37 std::set<storm::expressions::Variable> const& stateVariables,
38 storm::dd::Bdd<storm::dd::DdType::CUDD> const& nondeterminismVariables,
39 storm::dd::Bdd<storm::dd::DdType::CUDD> const& nonBlockVariables,
41
44
45 private:
46 void clearCaches();
47
48 std::pair<storm::dd::Add<storm::dd::DdType::CUDD, ValueType>, boost::optional<storm::dd::Add<storm::dd::DdType::CUDD, ValueType>>> refine(
50
51 DdNodePtr encodeBlock(uint64_t blockIndex);
52
53 std::pair<DdNodePtr, DdNodePtr> reuseOrRelabel(DdNode* partitionNode, DdNode* nondeterminismVariablesNode, DdNode* nonBlockVariablesNode);
54
55 std::pair<DdNodePtr, DdNodePtr> refine(DdNode* partitionNode, DdNode* signatureNode, DdNode* nondeterminismVariablesNode, DdNode* nonBlockVariablesNode);
56
58 ::DdManager* ddman;
59 storm::expressions::Variable blockVariable;
60 std::set<storm::expressions::Variable> stateVariables;
61
62 // The cubes representing all non-block and all nondeterminism variables, respectively.
63 storm::dd::Bdd<storm::dd::DdType::CUDD> nondeterminismVariables;
65
66 // The provided options.
68
69 // The indices of the DD variables associated with the block variable.
70 std::vector<uint64_t> blockDdVariableIndices;
71
72 // A vector used for encoding block indices.
73 std::vector<int> blockEncoding;
74
75 // The current number of blocks of the new partition.
76 uint64_t nextFreeBlockIndex;
77
78 // The number of completed refinements.
79 uint64_t numberOfRefinements;
80
81 // The cache used to identify states with identical signature.
82 phmap::flat_hash_map<std::pair<DdNode const*, DdNode const*>, std::pair<DdNodePtr, DdNodePtr>, CuddPointerPairHash> signatureCache;
83
84 // The cache used to identify which old block numbers have already been reused.
85 phmap::flat_hash_map<DdNode const*, ReuseWrapper> reuseBlocksCache;
86};
87
88} // namespace bisimulation
89} // namespace dd
90} // namespace storm
LabParser.cpp.
Definition cli.cpp:18