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