14#ifndef STAMINA_BUILDER_STAMINAMODELBUILDER_H
15#define STAMINA_BUILDER_STAMINAMODELBUILDER_H
25#include "core/Options.h"
26#include "core/StaminaMessages.h"
28#include "util/StateIndexArray.h"
29#include "util/StateMemoryPool.h"
31#include "builder/threads/ExplorationThread.h"
32#include "builder/threads/ControlThread.h"
34#include "builder/ProbabilityState.h"
36#include <boost/functional/hash.hpp>
37#include <boost/container/flat_map.hpp>
38#include <boost/variant.hpp>
40#include "__storm_needed_for_builder.h"
43#define MSG_FREQUENCY 100000
49 using namespace storm::builder;
50 using namespace storm::utility::prism;
51 using namespace storm::generator;
55 typedef storm::models::sparse::Ctmc<double> Ctmc;
56 typedef storm::modelchecker::SparseCtmcCslModelChecker<Ctmc> CtmcModelChecker;
60 template<
typename ValueType,
typename RewardModelType = storm::models::sparse::StandardRewardModel<ValueType>,
typename StateType = u
int32_t>
72 from(from), to(to), transition(transition) { }
82 return first->to > second->to;
92 std::shared_ptr<storm::generator::PrismNextStateGenerator<ValueType, StateType>>
const& generator
93 , storm::prism::Program
const& modulesFile
94 , storm::generator::NextStateGeneratorOptions
const & options
103 storm::prism::Program
const& program
104 , storm::generator::NextStateGeneratorOptions
const& generatorOptions
113 std::shared_ptr<storm::models::sparse::Model<ValueType, RewardModelType>>
build();
131 std::shared_ptr<storm::generator::PrismNextStateGenerator<ValueType, StateType>> generator
143 void printStateSpaceInformation();
144 storm::expressions::Expression * getPropertyExpression();
153 std::shared_ptr<const storm::logic::Formula> formula
154 ,
const storm::prism::Program & modulesFile
169 double getLocalKappa();
171 storm::storage::sparse::StateStorage<StateType> getStateStorage();
180 storm::storage::SparseMatrixBuilder<ValueType>& transitionMatrixBuilder
181 , CompressedState & terminalState
183 , std::function<StateType (CompressedState
const&)> stateToIdCallback
195 storm::storage::SparseMatrixBuilder<ValueType>& transitionMatrixBuilder
196 , std::vector<RewardModelBuilder<typename RewardModelType::ValueType>>& rewardModelBuilders
197 , StateAndChoiceInformationBuilder& choiceInformationBuilder
198 , boost::optional<storm::storage::BitVector>& markovianChoices
199 , boost::optional<storm::storage::sparse::StateValuationsBuilder>& stateValuationsBuilder
229 storm::storage::SparseMatrixBuilder<ValueType>& transitionMatrixBuilder
230 , std::vector<RewardModelBuilder<typename RewardModelType::ValueType>>& rewardModelBuilders
231 , StateAndChoiceInformationBuilder& choiceInformationBuilder
232 , boost::optional<storm::storage::BitVector>& markovianChoices
233 , boost::optional<storm::storage::sparse::StateValuationsBuilder>& stateValuationsBuilder
237 std::shared_ptr<threads::ControlThread<StateType, RewardModelType, ValueType>> controlThread;
238 std::vector<std::shared_ptr<threads::ExplorationThread<StateType, RewardModelType, ValueType>>> explorationThreads;
240 std::function<StateType (CompressedState
const&)> terminalStateToIdCallback;
242 storm::expressions::Expression * propertyExpression;
243 storm::expressions::ExpressionManager * expressionManager;
244 std::shared_ptr<const storm::logic::Formula> propertyFormula;
246 std::shared_ptr<storm::generator::PrismNextStateGenerator<ValueType, StateType>> generator;
250 std::deque<std::pair<ProbabilityState<StateType> *, CompressedState> > statesToExplore;
254 storm::storage::sparse::StateStorage<
259 boost::optional<std::vector<uint_fast64_t>> stateRemapping;
262 std::vector<std::vector<TransitionInfo>> transitionsToAdd;
264 storm::generator::NextStateGeneratorOptions
const & options;
266 storm::prism::Program
const& modulesFile;
268 CompressedState absorbingState;
269 bool absorbingWasSetUp;
276 bool formulaMatchesExpression;
277 uint64_t numberTerminal;
278 uint64_t numberStates;
279 uint64_t numberTransitions;
280 uint_fast64_t currentRowGroup;
281 uint_fast64_t currentRow;
286 template <
typename StateType>
287 bool set_contains(std::unordered_set<StateType> current_set, StateType value);
Definition: ProbabilityState.h:11
Definition: StaminaModelBuilder.h:69
Definition: StaminaModelBuilder.h:61
std::vector< StateType > getPerimeterStates()
Definition: StaminaModelBuilder.cpp:98
StaminaModelBuilder(std::shared_ptr< storm::generator::PrismNextStateGenerator< ValueType, StateType > > const &generator, storm::prism::Program const &modulesFile, storm::generator::NextStateGeneratorOptions const &options)
Definition: StaminaModelBuilder.cpp:17
void setGenerator(std::shared_ptr< storm::generator::PrismNextStateGenerator< ValueType, StateType > > generator)
Definition: StaminaModelBuilder.cpp:258
void setPropertyFormula(std::shared_ptr< const storm::logic::Formula > formula, const storm::prism::Program &modulesFile)
Definition: StaminaModelBuilder.cpp:314
void flushToTransitionMatrix(storm::storage::SparseMatrixBuilder< ValueType > &transitionMatrixBuilder)
Definition: StaminaModelBuilder.cpp:147
StateType getStateIndexIfKnown(CompressedState const &state)
void setUpAbsorbingState(storm::storage::SparseMatrixBuilder< ValueType > &transitionMatrixBuilder, std::vector< RewardModelBuilder< typename RewardModelType::ValueType > > &rewardModelBuilders, StateAndChoiceInformationBuilder &choiceInformationBuilder, boost::optional< storm::storage::BitVector > &markovianChoices, boost::optional< storm::storage::sparse::StateValuationsBuilder > &stateValuationsBuilder)
Definition: StaminaModelBuilder.cpp:197
storm::models::sparse::StateLabeling buildStateLabeling()
Definition: StaminaModelBuilder.cpp:182
void createTransition(StateType from, StateType to, ValueType probability)
Definition: StaminaModelBuilder.cpp:163
void setLocalKappaToGlobal()
Definition: StaminaModelBuilder.cpp:266
StateType getStateIndexOrAbsorbing(CompressedState const &state)
Definition: StaminaModelBuilder.cpp:137
double accumulateProbabilities()
Definition: StaminaModelBuilder.cpp:188
virtual void buildMatrices(storm::storage::SparseMatrixBuilder< ValueType > &transitionMatrixBuilder, std::vector< RewardModelBuilder< typename RewardModelType::ValueType > > &rewardModelBuilders, StateAndChoiceInformationBuilder &choiceInformationBuilder, boost::optional< storm::storage::BitVector > &markovianChoices, boost::optional< storm::storage::sparse::StateValuationsBuilder > &stateValuationsBuilder)=0
void loadPropertyExpressionFromFormula()
Definition: StaminaModelBuilder.cpp:325
void connectTerminalStatesToAbsorbing(storm::storage::SparseMatrixBuilder< ValueType > &transitionMatrixBuilder, CompressedState &terminalState, StateType stateId, std::function< StateType(CompressedState const &)> stateToIdCallback)
Definition: StaminaModelBuilder.cpp:272
virtual StateType getOrAddStateIndex(CompressedState const &state)
Definition: StaminaModelBuilder.cpp:112
std::shared_ptr< storm::models::sparse::Model< ValueType, RewardModelType > > build()
Definition: StaminaModelBuilder.cpp:68
virtual storm::storage::sparse::ModelComponents< ValueType, RewardModelType > buildModelComponents()=0
void reset()
Definition: StaminaModelBuilder.cpp:243
Definition: StateIndexArray.h:27
Definition: StateMemoryPool.h:32
Definition: ExplicitTruncatedModelBuilder.cpp:40
Definition: StaminaModelBuilder.h:77
Definition: ControlThread.h:32