STAMINA/STORM 0.1
Infinite state-space truncator which generates a probability within a window
ExplicitTruncatedModelBuilder.h
1#ifndef STAMINA_BUILDER_EXPLICITTRUNCATEDMODELBUILDER_H
2#define STAMINA_BUILDER_EXPLICITTRUNCATEDMODELBUILDER_H
3
9#include <boost/container/flat_map.hpp>
10#include <boost/functional/hash.hpp>
11#include <boost/variant.hpp>
12#include <cstdint>
13#include <deque>
14#include <memory>
15#include <utility>
16#include <vector>
17#include "storm/models/sparse/StandardRewardModel.h"
18
19#include "storm/builder/ExplicitModelBuilder.h"
20
21#include "storm/logic/Formulas.h"
22#include "storm/models/sparse/ChoiceLabeling.h"
23#include "storm/models/sparse/Model.h"
24#include "storm/models/sparse/StateLabeling.h"
25#include "storm/settings/SettingsManager.h"
26#include "storm/storage/BitVectorHashMap.h"
27#include "storm/storage/SparseMatrix.h"
28#include "storm/storage/expressions/ExpressionEvaluator.h"
29#include "storm/storage/prism/Program.h"
30#include "storm/storage/sparse/ModelComponents.h"
31#include "storm/storage/sparse/StateStorage.h"
32
33#include "storm/utility/prism.h"
34
35#include "storm/builder/ExplorationOrder.h"
36
37#include "storm/generator/CompressedState.h"
38#include "storm/generator/NextStateGenerator.h"
39#include "storm/generator/VariableInformation.h"
40
41namespace stamina {
42
43namespace builder {
44
45using namespace storm::utility::prism;
46using namespace storm::generator;
47using namespace storm::builder;
48using namespace storm;
49
50template<typename ValueType, typename RewardModelType = storm::models::sparse::StandardRewardModel<ValueType>, typename StateType = uint32_t>
52public:
53 struct Options {
57 Options();
58
59 // The order in which to explore the model.
60 ExplorationOrder explorationOrder;
61 };
62
68 ExplicitTruncatedModelBuilder(std::shared_ptr<storm::generator::NextStateGenerator<ValueType, StateType>> const& generator, Options const& options = Options());
69
75 ExplicitTruncatedModelBuilder(storm::prism::Program const& program,
76 storm::generator::NextStateGeneratorOptions const& generatorOptions = storm::generator::NextStateGeneratorOptions(),
77 Options const& builderOptions = Options());
78
84 ExplicitTruncatedModelBuilder(storm::jani::Model const& model,
85 storm::generator::NextStateGeneratorOptions const& generatorOptions = storm::generator::NextStateGeneratorOptions(),
86 Options const& builderOptions = Options());
87
95 std::shared_ptr<storm::models::sparse::Model<ValueType, RewardModelType>> build();
96
102 ExplicitStateLookup<StateType> exportExplicitStateLookup() const;
103
104private:
114 StateType getOrAddStateIndex(CompressedState const& state);
115
123 void buildMatrices(storm::storage::SparseMatrixBuilder<ValueType>& transitionMatrixBuilder,
124 std::vector<RewardModelBuilder<typename RewardModelType::ValueType>>& rewardModelBuilders,
125 StateAndChoiceInformationBuilder& stateAndChoiceInformationBuilder);
126
132 storm::storage::sparse::ModelComponents<ValueType, RewardModelType> buildModelComponents();
133
139 storm::models::sparse::StateLabeling buildStateLabeling();
140
142 std::shared_ptr<storm::generator::NextStateGenerator<ValueType, StateType>> generator;
143
145 Options options;
146
148 storm::storage::sparse::StateStorage<StateType> stateStorage;
149
151 std::deque<std::pair<CompressedState, StateType>> statesToExplore;
152
155 boost::optional<std::vector<uint_fast64_t>> stateRemapping;
156 uint64_t numberOfExploredStates;
157};
158
159}
160} // namespace stamina
161
162#endif /* STAMINA_BUILDER_EXPLICITTRUNCATEDMODELBUILDER_H */
Definition: ExplicitTruncatedModelBuilder.h:51
ExplicitStateLookup< StateType > exportExplicitStateLookup() const
Definition: ExplicitTruncatedModelBuilder.cpp:123
std::shared_ptr< storm::models::sparse::Model< ValueType, RewardModelType > > build()
Definition: ExplicitTruncatedModelBuilder.cpp:74
ExplicitTruncatedModelBuilder(std::shared_ptr< storm::generator::NextStateGenerator< ValueType, StateType > > const &generator, Options const &options=Options())
Definition: ExplicitTruncatedModelBuilder.cpp:51
Definition: ExplicitTruncatedModelBuilder.cpp:40
Definition: ExplicitTruncatedModelBuilder.h:53
Options()
Definition: ExplicitTruncatedModelBuilder.cpp:45