Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
JaniNextStateGenerator.h
Go to the documentation of this file.
1#pragma once
2
5
10
11namespace storm {
12namespace jani {
13class Edge;
14class EdgeDestination;
15} // namespace jani
16
17namespace generator {
18template<typename StateType, typename ValueType>
19class Distribution;
20
21template<typename ValueType, typename StateType = uint32_t>
22class JaniNextStateGenerator : public NextStateGenerator<ValueType, StateType> {
23 public:
27
29
34
40 static bool canHandle(storm::jani::Model const& model);
41
42 virtual ModelType getModelType() const override;
43 virtual bool isDeterministicModel() const override;
44 virtual bool isDiscreteTimeModel() const override;
45 virtual bool isPartiallyObservable() const override;
46 virtual std::vector<StateType> getInitialStates(StateToIdCallback const& stateToIdCallback) override;
47
50
51 virtual StateBehavior<ValueType, StateType> expand(StateToIdCallback const& stateToIdCallback) override;
52
54 virtual void addStateValuation(storm::storage::sparse::state_type const& currentStateIndex,
55 storm::storage::sparse::StateValuationsBuilder& valuationsBuilder) const override;
56
57 virtual std::size_t getNumberOfRewardModels() const override;
58 virtual storm::builder::RewardModelInformation getRewardModelInformation(uint64_t const& index) const override;
59
61 std::vector<StateType> const& initialStateIndices = {},
62 std::vector<StateType> const& deadlockStateIndices = {},
63 std::vector<StateType> const& unexploredStateIndices = {}) override;
64
65 virtual std::shared_ptr<storm::storage::sparse::ChoiceOrigins> generateChoiceOrigins(std::vector<boost::any>& dataForChoiceOrigins) const override;
66
77
78 private:
82 uint64_t getLocation(CompressedState const& state, LocationVariableInformation const& locationVariable) const;
83
87 void setLocation(CompressedState& state, LocationVariableInformation const& locationVariable, uint64_t locationIndex) const;
88
92 std::vector<uint64_t> getLocations(CompressedState const& state) const;
93
100
110 void applyUpdate(CompressedState& state, storm::jani::EdgeDestination const& destination,
111 storm::generator::LocationVariableInformation const& locationVariable, int64_t assignmentlevel,
112 storm::expressions::ExpressionEvaluator<ValueType> const& expressionEvaluator);
113
123 void applyTransientUpdate(TransientVariableValuation<ValueType>& transientValuation, storm::jani::detail::ConstAssignments const& transientAssignments,
124 storm::expressions::ExpressionEvaluator<ValueType> const& expressionEvaluator) const;
125
133 virtual storm::storage::BitVector evaluateObservationLabels(CompressedState const& state) const override;
134
141 TransientVariableValuation<ValueType> getTransientVariableValuationAtLocations(std::vector<uint64_t> const& locations,
143
152 std::vector<Choice<ValueType>> getActionChoices(std::vector<uint64_t> const& locations, CompressedState const& state, StateToIdCallback stateToIdCallback,
153 EdgeFilter const& edgeFilter = EdgeFilter::All);
154
158 Choice<ValueType> expandNonSynchronizingEdge(storm::jani::Edge const& edge, uint64_t outputActionIndex, uint64_t automatonIndex,
159 CompressedState const& state, StateToIdCallback stateToIdCallback);
160
161 typedef std::vector<std::pair<uint64_t, storm::jani::Edge const*>> EdgeSetWithIndices;
162 typedef std::unordered_map<uint64_t, EdgeSetWithIndices> LocationsAndEdges;
163 typedef std::vector<std::pair<uint64_t, LocationsAndEdges>> AutomataAndEdges;
164 typedef std::pair<boost::optional<uint64_t>, AutomataAndEdges> OutputAndEdges;
165
166 typedef std::pair<uint64_t, EdgeSetWithIndices> AutomatonAndEdgeSet;
167 typedef std::vector<AutomatonAndEdgeSet> AutomataEdgeSets;
168
169 void expandSynchronizingEdgeCombination(AutomataEdgeSets const& edgeCombination, uint64_t outputActionIndex, CompressedState const& state,
170 StateToIdCallback stateToIdCallback, std::vector<Choice<ValueType>>& newChoices);
171 void generateSynchronizedDistribution(storm::storage::BitVector const& state, AutomataEdgeSets const& edgeCombination,
172 std::vector<EdgeSetWithIndices::const_iterator> const& iteratorList,
173 storm::generator::Distribution<StateType, ValueType>& distribution, std::vector<ValueType>& stateActionRewards,
174 EdgeIndexSet& edgeIndices, StateToIdCallback stateToIdCallback);
175
179 void checkGlobalVariableWritesValid(AutomataEdgeSets const& enabledEdges) const;
180
184 std::vector<ValueType> evaluateRewardExpressions() const;
185
189 void addEvaluatedRewardExpressions(std::vector<ValueType>& rewards, ValueType const& factor) const;
190
194 void buildRewardModelInformation();
195
199 void createSynchronizationInformation();
200
204 void checkValid() const;
205
207 storm::jani::Model model;
208
210 std::vector<std::reference_wrapper<storm::jani::Automaton const>> parallelAutomata;
211
213 std::vector<OutputAndEdges> edges;
214
216 std::vector<std::pair<std::string, storm::expressions::Expression>> rewardExpressions;
217
219 std::vector<storm::builder::RewardModelInformation> rewardModelInformation;
220
222 bool hasStateActionRewards;
223
225 bool evaluateRewardExpressionsAtEdges;
226
228 bool evaluateRewardExpressionsAtDestinations;
229
231 storm::jani::ArrayEliminatorData arrayEliminatorData;
232
234 TransientVariableInformation<ValueType> transientVariableInformation;
235};
236
237} // namespace generator
238} // namespace storm
storm::storage::FlatSet< uint_fast64_t > EdgeIndexSet
virtual ModelType getModelType() const override
static storm::jani::ModelFeatures getSupportedJaniFeatures()
Returns the jani features with which this builder can deal natively.
virtual std::shared_ptr< storm::storage::sparse::ChoiceOrigins > generateChoiceOrigins(std::vector< boost::any > &dataForChoiceOrigins) const override
virtual void addStateValuation(storm::storage::sparse::state_type const &currentStateIndex, storm::storage::sparse::StateValuationsBuilder &valuationsBuilder) const override
Adds the valuation for the currently loaded state to the given builder.
virtual StateBehavior< ValueType, StateType > expand(StateToIdCallback const &stateToIdCallback) override
virtual std::vector< StateType > getInitialStates(StateToIdCallback const &stateToIdCallback) override
JaniNextStateGenerator(storm::jani::Model const &model, NextStateGeneratorOptions const &options=NextStateGeneratorOptions())
virtual storm::builder::RewardModelInformation getRewardModelInformation(uint64_t const &index) const override
virtual bool isPartiallyObservable() const override
virtual std::size_t getNumberOfRewardModels() const override
virtual storm::storage::sparse::StateValuationsBuilder initializeStateValuationsBuilder() const override
Initializes a builder for state valuations by adding the appropriate variables.
static bool canHandle(storm::jani::Model const &model)
A quick check to detect whether the given model is not supported.
NextStateGenerator< ValueType, StateType >::StateToIdCallback StateToIdCallback
virtual storm::models::sparse::StateLabeling label(storm::storage::sparse::StateStorage< StateType > const &stateStorage, std::vector< StateType > const &initialStateIndices={}, std::vector< StateType > const &deadlockStateIndices={}, std::vector< StateType > const &unexploredStateIndices={}) override
virtual void unpackTransientVariableValuesIntoEvaluator(CompressedState const &state, storm::expressions::ExpressionEvaluator< ValueType > &evaluator) const override
Sets the values of all transient variables in the current state to the given evaluator.
std::unique_ptr< storm::expressions::ExpressionEvaluator< ValueType > > evaluator
An evaluator used to evaluate expressions.
std::function< StateType(CompressedState const &)> StateToIdCallback
CompressedState const * state
The currently loaded state.
NextStateGeneratorOptions options
The options to be used for next-state generation.
This class manages the labeling of the state space with a number of (atomic) labels.
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:18
storm::storage::BitVector CompressedState
storm::builder::BuilderOptions NextStateGeneratorOptions
boost::container::flat_set< Key, std::less< Key >, boost::container::new_allocator< Key > > FlatSet
Redefinition of flat_set was needed, because from Boost 1.70 on the default allocator is set to void.
Definition BoostTypes.h:13
LabParser.cpp.
Definition cli.cpp:18