21template<
typename SparseCtmcModelType>
27template<
typename ModelType>
37 fragment.setBoundedUntilFormulasAllowed(
false).setCumulativeRewardFormulasAllowed(
false).setInstantaneousFormulasAllowed(
false);
39 return checkTask.
getFormula().isInFragment(fragment);
42template<
typename SparseCtmcModelType>
47template<
typename SparseCtmcModelType>
51 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Computing bounded until probabilities is not supported for this numeric type.");
61 "Currently step-bounded or reward-bounded properties on CTMCs are not supported.");
76 this->getModel().getExitRateVector(), checkTask.
isQualitativeSet(), lowerBound, upperBound);
81template<
typename SparseCtmcModelType>
85 std::unique_ptr<CheckResult> subResultPointer = this->
check(env, pathFormula.
getSubformula());
92template<
typename SparseCtmcModelType>
96 std::unique_ptr<CheckResult> subResultPointer = this->
check(env, pathFormula.
getSubformula());
98 auto probabilisticTransitions = this->
getModel().computeProbabilityMatrix();
105template<
typename SparseCtmcModelType>
120template<
typename SparseCtmcModelType>
125 auto probabilisticTransitions = this->
getModel().computeProbabilityMatrix();
130 return this->
check(env, formula)->template asExplicitQualitativeCheckResult<ValueType>().getTruthValuesVector();
133 std::vector<ValueType> numericResult =
helper.computeDAProductProbabilities(env, *pathFormula.
readAutomaton(), apSets);
138template<
typename SparseCtmcModelType>
143 auto probabilisticTransitions = this->
getModel().computeProbabilityMatrix();
148 return this->
check(env, formula)->template asExplicitQualitativeCheckResult<ValueType>().getTruthValuesVector();
150 std::vector<ValueType> numericResult =
helper.computeLTLProbabilities(env, pathFormula, formulaChecker);
155template<
typename SparseCtmcModelType>
159 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Computing instantaneous rewards is not supported for this numeric type.");
164 "Currently step-bounded properties on CTMCs are not supported.");
173template<
typename SparseCtmcModelType>
177 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Computing cumulative rewards is not supported for this numeric type.");
182 "Currently step-bounded and reward-bounded properties on CTMCs are not supported.");
191template<
typename SparseCtmcModelType>
195 std::unique_ptr<CheckResult> subResultPointer = this->
check(env, eventuallyFormula.
getSubformula());
205template<
typename SparseCtmcModelType>
215template<
typename SparseCtmcModelType>
219 std::unique_ptr<CheckResult> subResultPointer = this->
check(env, stateFormula);
222 auto probabilisticTransitions = this->
getModel().computeProbabilityMatrix();
230template<
typename SparseCtmcModelType>
234 auto probabilisticTransitions = this->
getModel().computeProbabilityMatrix();
237 auto values =
helper.computeLongRunAverageRewards(env, rewardModel.get());
241template<
typename SparseCtmcModelType>
245 std::unique_ptr<CheckResult> subResultPointer = this->
check(env, eventuallyFormula.
getSubformula());
254template<
typename SparseCtmcModelType>
258 STORM_LOG_THROW(
false, storm::exceptions::NotSupportedException,
"Computing transient probabilities is not supported for this numeric type.");
263 "Currently step-bounded or reward-bounded properties on CTMCs are not supported.");
264 STORM_LOG_THROW(pathFormula.
hasUpperBound(), storm::exceptions::NotImplementedException,
"Computation needs upper limit for time bound.");
279template<
typename SparseCtmcModelType>
282 auto probabilisticTransitions = this->
getModel().computeProbabilityMatrix();
286 std::vector<ValueType> result;
287 auto const& initialStates = this->
getModel().getInitialStates();
288 uint64_t numInitStates = initialStates.getNumberOfSetBits();
289 if (numInitStates == 1) {
290 result =
helper.computeLongRunAverageStateDistribution(env, *initialStates.begin());
292 STORM_LOG_WARN(
"Multiple initial states found. A uniform distribution over initial states is assumed.");
294 result =
helper.computeLongRunAverageStateDistribution(env, [&initialStates, &initProb](uint64_t
const& stateIndex) {
303template<
typename SparseCtmcModelType>
306 auto probabilisticTransitions = this->
getModel().computeProbabilityMatrix();
310 std::vector<ValueType> result;
311 auto const& initialStates = this->
getModel().getInitialStates();
312 uint64_t numInitStates = initialStates.getNumberOfSetBits();
313 STORM_LOG_THROW(numInitStates > 0, storm::exceptions::InvalidOperationException,
"No initial states given. Cannot compute expected visiting times.");
314 STORM_LOG_WARN_COND(numInitStates == 1,
"Multiple initial states found. A uniform distribution over initial states is assumed.");
315 result =
helper.computeExpectedVisitingTimes(env, initialStates);
FragmentSpecification & setRewardAccumulationAllowed(bool newValue)
FragmentSpecification & setTimeOperatorsAllowed(bool newValue)
FragmentSpecification & setTotalRewardFormulasAllowed(bool newValue)
FragmentSpecification & setLongRunAverageRewardFormulasAllowed(bool newValue)
FragmentSpecification & setLongRunAverageProbabilitiesAllowed(bool newValue)
FragmentSpecification & setTimeAllowed(bool newValue)
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
bool isRewardModelSet() const
Retrieves whether a reward model was set.
bool isQualitativeSet() const
Retrieves whether the computation only needs to be performed qualitatively, because the values will o...
std::string const & getRewardModel() const
Retrieves the reward model over which to perform the checking (if set).
FormulaType const & getFormula() const
Retrieves the formula from this task.
vector_type const & getTruthValuesVector() const
virtual std::unique_ptr< CheckResult > computeCumulativeRewards(Environment const &env, CheckTask< storm::logic::CumulativeRewardFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLTLProbabilities(Environment const &env, CheckTask< storm::logic::PathFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeReachabilityTimes(Environment const &env, CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
std::unique_ptr< CheckResult > computeExpectedVisitingTimes(Environment const &env)
Computes for each state the expected number of times we visit that state.
virtual std::unique_ptr< CheckResult > computeInstantaneousRewards(Environment const &env, CheckTask< storm::logic::InstantaneousRewardFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLongRunAverageProbabilities(Environment const &env, CheckTask< storm::logic::StateFormula, ValueType > const &checkTask) override
static bool canHandleStatic(CheckTask< storm::logic::Formula, ValueType > const &checkTask)
virtual std::unique_ptr< CheckResult > computeBoundedUntilProbabilities(Environment const &env, CheckTask< storm::logic::BoundedUntilFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeReachabilityRewards(Environment const &env, CheckTask< storm::logic::EventuallyFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeLongRunAverageRewards(Environment const &env, CheckTask< storm::logic::LongRunAverageRewardFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeNextProbabilities(Environment const &env, CheckTask< storm::logic::NextFormula, ValueType > const &checkTask) override
virtual bool canHandle(CheckTask< storm::logic::Formula, ValueType > const &checkTask) const override
SparseCtmcCslModelChecker(SparseCtmcModelType const &model)
std::unique_ptr< CheckResult > computeSteadyStateDistribution(Environment const &env)
Computes the long run average (or: steady state) distribution over all states Assumes a uniform distr...
SparseCtmcModelType::ValueType ValueType
virtual std::unique_ptr< CheckResult > computeTotalRewards(Environment const &env, CheckTask< storm::logic::TotalRewardFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeGloballyProbabilities(Environment const &env, CheckTask< storm::logic::GloballyFormula, ValueType > const &checkTask) override
std::vector< ValueType > computeAllTransientProbabilities(Environment const &env, CheckTask< storm::logic::BoundedUntilFormula, ValueType > const &checkTask)
Compute transient probabilities for all states.
virtual std::unique_ptr< CheckResult > computeUntilProbabilities(Environment const &env, CheckTask< storm::logic::UntilFormula, ValueType > const &checkTask) override
virtual std::unique_ptr< CheckResult > computeHOAPathProbabilities(Environment const &env, CheckTask< storm::logic::HOAPathFormula, ValueType > const &checkTask) override
SparsePropositionalModelChecker(SparseCtmcModelType const &model)
SparseCtmcModelType const & getModel() const
static std::vector< ValueType > computeReachabilityRewards(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &rateMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, std::vector< ValueType > const &exitRateVector, RewardModelType const &rewardModel, storm::storage::BitVector const &targetStates, bool qualitative)
static std::vector< ValueType > computeUntilProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &rateMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, std::vector< ValueType > const &exitRateVector, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, bool qualitative)
static std::vector< ValueType > computeCumulativeRewards(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &rateMatrix, std::vector< ValueType > const &exitRateVector, RewardModelType const &rewardModel, ValueType timeBound)
static std::vector< ValueType > computeBoundedUntilProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &rateMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, std::vector< ValueType > const &exitRates, bool qualitative, ValueType lowerBound, ValueType upperBound)
static std::vector< ValueType > computeAllTransientProbabilities(Environment const &env, storm::storage::SparseMatrix< ValueType > const &rateMatrix, storm::storage::BitVector const &initialStates, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, std::vector< ValueType > const &exitRates, ValueType timeBound)
static std::vector< ValueType > computeReachabilityTimes(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &rateMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, std::vector< ValueType > const &exitRateVector, storm::storage::BitVector const &targetStates, bool qualitative)
static std::vector< ValueType > computeNextProbabilities(Environment const &env, storm::storage::SparseMatrix< ValueType > const &rateMatrix, std::vector< ValueType > const &exitRateVector, storm::storage::BitVector const &nextStates)
static std::vector< ValueType > computeInstantaneousRewards(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &rateMatrix, std::vector< ValueType > const &exitRateVector, RewardModelType const &rewardModel, ValueType timeBound)
static std::vector< ValueType > computeTotalRewards(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &rateMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, std::vector< ValueType > const &exitRateVector, RewardModelType const &rewardModel, bool qualitative)
Helper class for model checking queries that depend on the long run behavior of the (nondeterministic...
Helper class for computing for each state the expected number of times to visit that state assuming a...
static std::vector< SolutionType > computeGloballyProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType, SolutionType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &psiStates, bool qualitative)
Helper class for LTL model checking.
#define STORM_LOG_WARN(message)
#define STORM_LOG_WARN_COND(cond, message)
#define STORM_LOG_THROW(cond, exception, message)
FragmentSpecification csrlstar()
void setInformationFromCheckTaskDeterministic(HelperType &helper, storm::modelchecker::CheckTask< FormulaType, typename ModelType::ValueType > const &checkTask, ModelType const &model)
Forwards relevant information stored in the given CheckTask to the given helper.
FilteredRewardModel< RewardModelType > createFilteredRewardModel(RewardModelType const &baseRewardModel, storm::logic::RewardAccumulation const &acc, bool isDiscreteTimeModel)
TargetType convertNumber(SourceType const &number)
static const bool SupportsExponential