11 : transitions(transitions), initialState(initialState) {
12 STORM_LOG_THROW(this->initialState < this->transitions.size(), storm::exceptions::InvalidArgumentException,
13 "Initial state " << this->initialState <<
" of pomdp memory is invalid.");
14 for (
auto const& t : this->transitions) {
15 STORM_LOG_THROW(t.size() == this->transitions.size(), storm::exceptions::InvalidArgumentException,
16 "Invalid dimension of transition matrix of pomdp memory.");
17 STORM_LOG_THROW(!t.empty(), storm::exceptions::InvalidArgumentException,
"Invalid transition matrix of pomdp memory: No deadlock states allowed.");
22 return transitions.size();
30 return transitions.at(state);
42 std::string result =
"PomdpMemory with " + std::to_string(
getNumberOfStates()) +
" states.\n";
43 result +=
"Initial state is " + std::to_string(
getInitialState()) +
". Transitions are \n";
51 result += std::to_string(state);
65 result += std::to_string(state) +
"|";
84 return "fixedcounter";
86 return "selectivecounter";
92 return "settablebits";
103 "Invoked building trivial POMDP memory with " << numStates <<
" states. However, trivial POMDP memory always has one state.");
118 STORM_LOG_THROW(
false, storm::exceptions::IllegalArgumentException,
"Unknown PomdpMemoryPattern");
127 for (uint64_t state = 0; state < numStates; ++state) {
128 transitions[state].set(std::min(state + 1, numStates - 1));
135 for (uint64_t state = 0; state < numStates; ++state) {
136 transitions[state].set(state);
137 transitions[state].set(std::min(state + 1, numStates - 1));
144 for (uint64_t state = 0; state < numStates; ++state) {
145 transitions[state].set((state + 1) % numStates);
152 for (uint64_t state = 0; state < numStates; ++state) {
153 transitions[state].set(state);
154 transitions[state].set((state + 1) % numStates);
161 uint64_t numBits = 0;
162 uint64_t actualNumStates = 1;
163 while (actualNumStates * 2 <= numStates) {
164 actualNumStates *= 2;
169 "The number of memory states for the settable bits pattern has to be a power of 2. Shrinking the number of memory states to "
170 << actualNumStates <<
".");
173 for (uint64_t state = 0; state < actualNumStates; ++state) {
174 transitions[state].set(state);
175 for (uint64_t bit = 0; bit < numBits; ++bit) {
176 uint64_t bitMask = 1u << bit;
177 transitions[state].set(state | bitMask);
A bit vector that is internally represented as a vector of 64-bit values.
PomdpMemory buildFixedRingMemory(uint64_t numStates) const
PomdpMemory buildSelectiveRingMemory(uint64_t numStates) const
PomdpMemory build(PomdpMemoryPattern pattern, uint64_t numStates) const
PomdpMemory buildTrivialMemory() const
PomdpMemory buildSelectiveCountingMemory(uint64_t numStates) const
PomdpMemory buildFixedCountingMemory(uint64_t numStates) const
PomdpMemory buildSettableBitsMemory(uint64_t numStates) const
PomdpMemory buildFullyConnectedMemory(uint64_t numStates) const
uint64_t getInitialState() const
uint64_t getNumberOfStates() const
PomdpMemory(std::vector< storm::storage::BitVector > const &transitions, uint64_t initialState)
std::string toString() const
std::vector< storm::storage::BitVector > const & getTransitions() const
uint64_t getNumberOfOutgoingTransitions(uint64_t state) const
#define STORM_LOG_WARN_COND(cond, message)
#define STORM_LOG_ERROR_COND(cond, message)
#define STORM_LOG_THROW(cond, exception, message)
std::string toString(PomdpMemoryPattern const &pattern)