Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ProductModel.h
Go to the documentation of this file.
1#pragma once
2
3#include <boost/optional.hpp>
4
14
15namespace storm {
16namespace modelchecker {
17namespace helper {
18namespace rewardbounded {
19
20template<typename ValueType>
22 public:
23 typedef typename EpochManager::Epoch Epoch;
26
28 std::vector<Dimension<ValueType>> const& dimensions, std::vector<storm::storage::BitVector> const& objectiveDimensions,
29 EpochManager const& epochManager, std::vector<Epoch> const& originalModelSteps);
30
32 std::vector<Epoch> const& getSteps() const;
33
34 bool productStateExists(uint64_t const& modelState, uint64_t const& memoryState) const;
35 uint64_t getProductState(uint64_t const& modelState, uint64_t const& memoryState) const;
36 uint64_t getInitialProductState(uint64_t const& initialModelState, storm::storage::BitVector const& initialModelStates, EpochClass const& epochClass) const;
37 uint64_t getModelState(uint64_t const& productState) const;
38 MemoryState getMemoryState(uint64_t const& productState) const;
40
41 uint64_t getProductStateFromChoice(uint64_t const& productChoice) const;
42
43 std::vector<std::vector<ValueType>> computeObjectiveRewards(EpochClass const& epochClass,
44 std::vector<storm::modelchecker::multiobjective::Objective<ValueType>> const& objectives) const;
45 storm::storage::BitVector const& getInStates(EpochClass const& epochClass) const;
46
47 MemoryState transformMemoryState(MemoryState const& memoryState, EpochClass const& epochClass, MemoryState const& predecessorMemoryState) const;
48 uint64_t transformProductState(uint64_t const& productState, EpochClass const& epochClass, MemoryState const& predecessorMemoryState) const;
49
52 boost::optional<storm::storage::BitVector> const& getProb1InitialStates(uint64_t objectiveIndex) const;
53
54 private:
57 std::vector<MemoryState> computeMemoryStateMap(storm::storage::MemoryStructure const& memory) const;
58
59 void setReachableProductStates(storm::storage::SparseModelMemoryProduct<ValueType>& productBuilder, std::vector<Epoch> const& originalModelSteps,
60 std::vector<MemoryState> const& memoryStateMap) const;
61
62 void collectReachableEpochClasses(std::set<EpochClass, std::function<bool(EpochClass const&, EpochClass const&)>>& reachableEpochClasses,
63 std::set<Epoch> const& possibleSteps) const;
64
65 void computeReachableStatesInEpochClasses();
66 void computeReachableStates(EpochClass const& epochClass, std::vector<EpochClass> const& predecessors);
67
68 std::vector<Dimension<ValueType>> const& dimensions;
69 std::vector<storm::storage::BitVector> const& objectiveDimensions;
70 EpochManager const& epochManager;
71 MemoryStateManager memoryStateManager;
72
73 std::shared_ptr<storm::models::sparse::Model<ValueType>> product;
74 std::vector<Epoch> steps;
75 std::map<EpochClass, storm::storage::BitVector> reachableStates;
76 std::map<EpochClass, storm::storage::BitVector> inStates;
77
78 std::vector<uint64_t> modelMemoryToProductStateMap;
79 std::vector<uint64_t> productToModelStateMap;
80 std::vector<MemoryState> productToMemoryStateMap;
81 std::vector<uint64_t> choiceToStateMap;
82 std::vector<boost::optional<storm::storage::BitVector>>
83 prob1InitialStates;
84};
85} // namespace rewardbounded
86} // namespace helper
87} // namespace modelchecker
88} // namespace storm
MemoryState transformMemoryState(MemoryState const &memoryState, EpochClass const &epochClass, MemoryState const &predecessorMemoryState) const
MemoryState getMemoryState(uint64_t const &productState) const
uint64_t getInitialProductState(uint64_t const &initialModelState, storm::storage::BitVector const &initialModelStates, EpochClass const &epochClass) const
uint64_t transformProductState(uint64_t const &productState, EpochClass const &epochClass, MemoryState const &predecessorMemoryState) const
std::vector< std::vector< ValueType > > computeObjectiveRewards(EpochClass const &epochClass, std::vector< storm::modelchecker::multiobjective::Objective< ValueType > > const &objectives) const
uint64_t getModelState(uint64_t const &productState) const
uint64_t getProductStateFromChoice(uint64_t const &productChoice) const
storm::models::sparse::Model< ValueType > const & getProduct() const
storm::storage::BitVector const & getInStates(EpochClass const &epochClass) const
boost::optional< storm::storage::BitVector > const & getProb1InitialStates(uint64_t objectiveIndex) const
returns the initial states (with respect to the original model) that already satisfy the given object...
bool productStateExists(uint64_t const &modelState, uint64_t const &memoryState) const
uint64_t getProductState(uint64_t const &modelState, uint64_t const &memoryState) const
MemoryStateManager const & getMemoryStateManager() const
Base class for all sparse models.
Definition Model.h:33
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:18
This class represents a (deterministic) memory structure that can be used to encode certain events (s...
This class builds the product of the given sparse model and the given memory structure.
LabParser.cpp.
Definition cli.cpp:18