Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
NondeterministicMemoryStructureBuilder.cpp
Go to the documentation of this file.
3
6
7namespace storm {
8namespace storage {
9
11 switch (pattern) {
13 return "trivial";
15 return "fixedcounter";
17 return "selectivecounter";
19 return "fixedring";
21 return "ring";
23 return "settablebits";
25 return "full";
26 }
27 return "unknown";
28}
29
31 switch (pattern) {
33 STORM_LOG_ERROR_COND(numStates == 1, "Invoked building trivial nondeterministic memory structure with "
34 << numStates << " states. However, trivial nondeterministic memory structure always has one state.");
35 return buildTrivialMemory();
37 return buildFixedCountingMemory(numStates);
39 return buildSelectiveCountingMemory(numStates);
41 return buildFixedRingMemory(numStates);
43 return buildSelectiveRingMemory(numStates);
45 return buildSettableBitsMemory(numStates);
47 return buildFullyConnectedMemory(numStates);
48 }
49 STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Unhandled pattern.");
50}
51
55
57 std::vector<storm::storage::BitVector> transitions(numStates, storm::storage::BitVector(numStates, false));
58 for (uint64_t state = 0; state < numStates; ++state) {
59 transitions[state].set(std::min(state + 1, numStates - 1));
60 }
61 return NondeterministicMemoryStructure(transitions, 0);
62}
63
65 std::vector<storm::storage::BitVector> transitions(numStates, storm::storage::BitVector(numStates, false));
66 for (uint64_t state = 0; state < numStates; ++state) {
67 transitions[state].set(state);
68 transitions[state].set(std::min(state + 1, numStates - 1));
69 }
70 return NondeterministicMemoryStructure(transitions, 0);
71}
72
74 std::vector<storm::storage::BitVector> transitions(numStates, storm::storage::BitVector(numStates, false));
75 for (uint64_t state = 0; state < numStates; ++state) {
76 transitions[state].set((state + 1) % numStates);
77 }
78 return NondeterministicMemoryStructure(transitions, 0);
79}
80
82 std::vector<storm::storage::BitVector> transitions(numStates, storm::storage::BitVector(numStates, false));
83 for (uint64_t state = 0; state < numStates; ++state) {
84 transitions[state].set(state);
85 transitions[state].set((state + 1) % numStates);
86 }
87 return NondeterministicMemoryStructure(transitions, 0);
88}
89
91 // compute the number of bits, i.e., floor(log(numStates))
92 uint64_t numBits = 0;
93 uint64_t actualNumStates = 1;
94 while (actualNumStates * 2 <= numStates) {
95 actualNumStates *= 2;
96 ++numBits;
97 }
98
99 STORM_LOG_WARN_COND(actualNumStates == numStates,
100 "The number of memory states for the settable bits pattern has to be a power of 2. Shrinking the number of memory states to "
101 << actualNumStates << ".");
102
103 std::vector<storm::storage::BitVector> transitions(actualNumStates, storm::storage::BitVector(actualNumStates, false));
104 for (uint64_t state = 0; state < actualNumStates; ++state) {
105 transitions[state].set(state);
106 for (uint64_t bit = 0; bit < numBits; ++bit) {
107 uint64_t bitMask = 1u << bit;
108 transitions[state].set(state | bitMask);
109 }
110 }
111 return NondeterministicMemoryStructure(transitions, 0);
112}
113
115 std::vector<storm::storage::BitVector> transitions(numStates, storm::storage::BitVector(numStates, true));
116 return NondeterministicMemoryStructure(transitions, 0);
117}
118} // namespace storage
119} // namespace storm
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:18
NondeterministicMemoryStructure buildFullyConnectedMemory(uint64_t numStates) const
NondeterministicMemoryStructure buildSettableBitsMemory(uint64_t numStates) const
NondeterministicMemoryStructure buildFixedRingMemory(uint64_t numStates) const
NondeterministicMemoryStructure buildSelectiveRingMemory(uint64_t numStates) const
NondeterministicMemoryStructure build(NondeterministicMemoryStructurePattern pattern, uint64_t numStates) const
NondeterministicMemoryStructure buildSelectiveCountingMemory(uint64_t numStates) const
NondeterministicMemoryStructure buildFixedCountingMemory(uint64_t numStates) const
#define STORM_LOG_WARN_COND(cond, message)
Definition macros.h:38
#define STORM_LOG_ERROR_COND(cond, message)
Definition macros.h:52
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
std::string toString(PomdpMemoryPattern const &pattern)
LabParser.cpp.
Definition cli.cpp:18