@ -20,29 +20,30 @@
# include "storm/exceptions/InvalidStateException.h"
# include "storm/exceptions/InvalidPropertyException.h"
# include "storm/exceptions/InvalidOperationException.h"
namespace storm {
namespace modelchecker {
namespace helper {
template < storm : : dd : : DdType DdType , class ValueType >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper < DdType , ValueType > : : computeReachabilityRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , RewardModelType const & rewardModel , storm : : dd : : Bdd < DdType > const & targetStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeReachabilityRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , typename storm : : models : : symbolic : : Model < DdType , ValueType > : : RewardModelType const & rewardModel , storm : : dd : : Bdd < DdType > const & targetStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
return HybridDtmcPrctlHelper < DdType , ValueType > : : computeReachabilityRewards ( model , computeProbabilityMatrix ( rateMatrix , exitRateVector ) , rewardModel . divideStateRewardVector ( exitRateVector ) , targetStates , qualitative , linearEquationSolverFactory ) ;
}
template < storm : : dd : : DdType DdType , class ValueType >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper < DdType , ValueType > : : computeNextProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & nextStates ) {
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeNextProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & nextStates ) {
return HybridDtmcPrctlHelper < DdType , ValueType > : : computeNextProbabilities ( model , computeProbabilityMatrix ( rateMatrix , exitRateVector ) , nextStates ) ;
}
template < storm : : dd : : DdType DdType , class ValueType >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper < DdType , ValueType > : : computeUntilProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & phiStates , storm : : dd : : Bdd < DdType > const & psiStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeUntilProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & phiStates , storm : : dd : : Bdd < DdType > const & psiStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
return HybridDtmcPrctlHelper < DdType , ValueType > : : computeUntilProbabilities ( model , computeProbabilityMatrix ( rateMatrix , exitRateVector ) , phiStates , psiStates , qualitative , linearEquationSolverFactory ) ;
}
template < storm : : dd : : DdType DdType , class ValueType >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper < DdType , ValueType > : : computeBoundedUntilProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & phiStates , storm : : dd : : Bdd < DdType > const & psiStates , bool qualitative , double lowerBound , double upperBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
template < storm : : dd : : DdType DdType , typename ValueType , typename std : : enable_if < storm : : NumberTraits < ValueType > : : SupportsExponential , int > : : type >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeBoundedUntilProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & phiStates , storm : : dd : : Bdd < DdType > const & psiStates , bool qualitative , double lowerBound , double upperBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
// If the time bounds are [0, inf], we rather call untimed reachability.
if ( storm : : utility : : isZero ( lowerBound ) & & upperBound = = storm : : utility : : infinity < ValueType > ( ) ) {
@ -217,8 +218,13 @@ namespace storm {
}
}
template < storm : : dd : : DdType DdType , class ValueType >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper < DdType , ValueType > : : computeInstantaneousRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
template < storm : : dd : : DdType DdType , typename ValueType , typename std : : enable_if < ! storm : : NumberTraits < ValueType > : : SupportsExponential , int > : : type >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeBoundedUntilProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & phiStates , storm : : dd : : Bdd < DdType > const & psiStates , bool qualitative , double lowerBound , double upperBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
STORM_LOG_THROW ( false , storm : : exceptions : : InvalidOperationException , " Computing bounded until probabilities is unsupported for this value type. " ) ;
}
template < storm : : dd : : DdType DdType , typename ValueType , typename std : : enable_if < storm : : NumberTraits < ValueType > : : SupportsExponential , int > : : type >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeInstantaneousRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , typename storm : : models : : symbolic : : Model < DdType , ValueType > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
// Only compute the result if the model has a state-based reward model.
STORM_LOG_THROW ( rewardModel . hasStateRewards ( ) , storm : : exceptions : : InvalidPropertyException , " Missing reward model for formula. Skipping formula. " ) ;
@ -240,17 +246,22 @@ namespace storm {
result = storm : : modelchecker : : helper : : SparseCtmcCslHelper : : computeTransientProbabilities < ValueType > ( explicitUniformizedMatrix , nullptr , timeBound , uniformizationRate , result , linearEquationSolverFactory ) ;
}
return std : : unique_ptr < CheckResult > ( new HybridQuantitativeCheckResult < DdType > ( model . getReachableStates ( ) , model . getManager ( ) . getBddZero ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) , model . getReachableStates ( ) , odd , result ) ) ;
return std : : unique_ptr < CheckResult > ( new HybridQuantitativeCheckResult < DdType , ValueType > ( model . getReachableStates ( ) , model . getManager ( ) . getBddZero ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) , model . getReachableStates ( ) , odd , result ) ) ;
}
template < storm : : dd : : DdType DdType , class ValueType >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper < DdType , ValueType > : : computeCumulativeRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
template < storm : : dd : : DdType DdType , typename ValueType , typename std : : enable_if < ! storm : : NumberTraits < ValueType > : : SupportsExponential , int > : : type >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeInstantaneousRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , typename storm : : models : : symbolic : : Model < DdType , ValueType > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
STORM_LOG_THROW ( false , storm : : exceptions : : InvalidOperationException , " Computing instantaneous rewards is unsupported for this value type. " ) ;
}
template < storm : : dd : : DdType DdType , typename ValueType , typename std : : enable_if < storm : : NumberTraits < ValueType > : : SupportsExponential , int > : : type >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeCumulativeRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , typename storm : : models : : symbolic : : Model < DdType , ValueType > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
// Only compute the result if the model has a state-based reward model.
STORM_LOG_THROW ( ! rewardModel . empty ( ) , storm : : exceptions : : InvalidPropertyException , " Missing reward model for formula. Skipping formula. " ) ;
// If the time bound is zero, the result is the constant zero vector.
if ( timeBound = = 0 ) {
return std : : unique_ptr < CheckResult > ( new SymbolicQuantitativeCheckResult < DdType > ( model . getReachableStates ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) ) ) ;
return std : : unique_ptr < CheckResult > ( new SymbolicQuantitativeCheckResult < DdType , ValueType > ( model . getReachableStates ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) ) ) ;
}
// Otherwise, we need to perform some computations.
@ -272,11 +283,16 @@ namespace storm {
// Finally, compute the transient probabilities.
std : : vector < ValueType > result = storm : : modelchecker : : helper : : SparseCtmcCslHelper : : computeTransientProbabilities < ValueType , true > ( explicitUniformizedMatrix , nullptr , timeBound , uniformizationRate , explicitTotalRewardVector , linearEquationSolverFactory ) ;
return std : : unique_ptr < CheckResult > ( new HybridQuantitativeCheckResult < DdType > ( model . getReachableStates ( ) , model . getManager ( ) . getBddZero ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) , model . getReachableStates ( ) , std : : move ( odd ) , std : : move ( result ) ) ) ;
return std : : unique_ptr < CheckResult > ( new HybridQuantitativeCheckResult < DdType , ValueType > ( model . getReachableStates ( ) , model . getManager ( ) . getBddZero ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) , model . getReachableStates ( ) , std : : move ( odd ) , std : : move ( result ) ) ) ;
}
template < storm : : dd : : DdType DdType , typename ValueType , typename std : : enable_if < ! storm : : NumberTraits < ValueType > : : SupportsExponential , int > : : type >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeCumulativeRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , typename storm : : models : : symbolic : : Model < DdType , ValueType > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
STORM_LOG_THROW ( false , storm : : exceptions : : InvalidOperationException , " Computing cumulative rewards is unsupported for this value type. " ) ;
}
template < storm : : dd : : DdType DdType , class ValueType >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper < DdType , ValueType > : : computeLongRunAverageProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & psiStates , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageProbabilities ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & psiStates , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
storm : : dd : : Add < DdType , ValueType > probabilityMatrix = computeProbabilityMatrix ( rateMatrix , exitRateVector ) ;
// Create ODD for the translation.
@ -287,11 +303,11 @@ namespace storm {
std : : vector < ValueType > result = storm : : modelchecker : : helper : : SparseCtmcCslHelper : : computeLongRunAverageProbabilities ( explicitProbabilityMatrix , psiStates . toVector ( odd ) , & explicitExitRateVector , linearEquationSolverFactory ) ;
return std : : unique_ptr < CheckResult > ( new HybridQuantitativeCheckResult < DdType > ( model . getReachableStates ( ) , model . getManager ( ) . getBddZero ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) , model . getReachableStates ( ) , std : : move ( odd ) , std : : move ( result ) ) ) ;
return std : : unique_ptr < CheckResult > ( new HybridQuantitativeCheckResult < DdType , ValueType > ( model . getReachableStates ( ) , model . getManager ( ) . getBddZero ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) , model . getReachableStates ( ) , std : : move ( odd ) , std : : move ( result ) ) ) ;
}
template < storm : : dd : : DdType DdType , class ValueType >
std : : unique_ptr < CheckResult > HybridCtmcCslHelper < DdType , ValueType > : : computeLongRunAverageRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , RewardModelType const & rewardModel , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageRewards ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , typename storm : : models : : symbolic : : Model < DdType , ValueType > : : RewardModelType const & rewardModel , storm : : solver : : LinearEquationSolverFactory < ValueType > const & linearEquationSolverFactory ) {
STORM_LOG_THROW ( ! rewardModel . empty ( ) , storm : : exceptions : : InvalidPropertyException , " Missing reward model for formula. Skipping formula. " ) ;
storm : : dd : : Add < DdType , ValueType > probabilityMatrix = computeProbabilityMatrix ( rateMatrix , exitRateVector ) ;
@ -304,11 +320,11 @@ namespace storm {
std : : vector < ValueType > result = storm : : modelchecker : : helper : : SparseCtmcCslHelper : : computeLongRunAverageRewards ( explicitProbabilityMatrix , rewardModel . getTotalRewardVector ( probabilityMatrix , model . getColumnVariables ( ) , exitRateVector , true ) . toVector ( odd ) , & explicitExitRateVector , linearEquationSolverFactory ) ;
return std : : unique_ptr < CheckResult > ( new HybridQuantitativeCheckResult < DdType > ( model . getReachableStates ( ) , model . getManager ( ) . getBddZero ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) , model . getReachableStates ( ) , std : : move ( odd ) , std : : move ( result ) ) ) ;
return std : : unique_ptr < CheckResult > ( new HybridQuantitativeCheckResult < DdType , ValueType > ( model . getReachableStates ( ) , model . getManager ( ) . getBddZero ( ) , model . getManager ( ) . template getAddZero < ValueType > ( ) , model . getReachableStates ( ) , std : : move ( odd ) , std : : move ( result ) ) ) ;
}
template < storm : : dd : : DdType DdType , class ValueType >
storm : : dd : : Add < DdType , ValueType > HybridCtmcCslHelper < DdType , ValueType > : : computeUniformizedMatrix ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & transitionMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & maybeStates , ValueType uniformizationRate ) {
storm : : dd : : Add < DdType , ValueType > HybridCtmcCslHelper : : computeUniformizedMatrix ( storm : : models : : symbolic : : Ctmc < DdType , ValueType > const & model , storm : : dd : : Add < DdType , ValueType > const & transitionMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector , storm : : dd : : Bdd < DdType > const & maybeStates , ValueType uniformizationRate ) {
STORM_LOG_DEBUG ( " Computing uniformized matrix using uniformization rate " < < uniformizationRate < < " . " ) ;
STORM_LOG_DEBUG ( " Keeping " < < maybeStates . getNonZeroCount ( ) < < " rows. " ) ;
@ -326,13 +342,60 @@ namespace storm {
}
template < storm : : dd : : DdType DdType , class ValueType >
storm : : dd : : Add < DdType , ValueType > HybridCtmcCslHelper < DdType , ValueType > : : computeProbabilityMatrix ( storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector ) {
storm : : dd : : Add < DdType , ValueType > HybridCtmcCslHelper : : computeProbabilityMatrix ( storm : : dd : : Add < DdType , ValueType > const & rateMatrix , storm : : dd : : Add < DdType , ValueType > const & exitRateVector ) {
return rateMatrix / exitRateVector ;
}
template class HybridCtmcCslHelper < storm : : dd : : DdType : : CUDD , double > ;
template class HybridCtmcCslHelper < storm : : dd : : DdType : : Sylvan , double > ;
// Explicit instantiations.
// Cudd, double.
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeBoundedUntilProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > const & phiStates , storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > const & psiStates , bool qualitative , double lowerBound , double upperBound , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeInstantaneousRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : CUDD , double > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeCumulativeRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : CUDD , double > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeUntilProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > const & phiStates , storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > const & psiStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeReachabilityRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : CUDD , double > : : RewardModelType const & rewardModel , storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > const & targetStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > const & psiStates , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeNextProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > const & nextStates ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : CUDD , double > : : RewardModelType const & rewardModel , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > HybridCtmcCslHelper : : computeProbabilityMatrix ( storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector ) ;
template storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > HybridCtmcCslHelper : : computeUniformizedMatrix ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : CUDD , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & transitionMatrix , storm : : dd : : Add < storm : : dd : : DdType : : CUDD , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD > const & maybeStates , double uniformizationRate ) ;
// Sylvan, double.
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeBoundedUntilProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & phiStates , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , bool qualitative , double lowerBound , double upperBound , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeInstantaneousRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , double > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeCumulativeRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , double > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeUntilProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & phiStates , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeReachabilityRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , double > : : RewardModelType const & rewardModel , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & targetStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeNextProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & nextStates ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , double > : : RewardModelType const & rewardModel , storm : : solver : : LinearEquationSolverFactory < double > const & linearEquationSolverFactory ) ;
template storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > HybridCtmcCslHelper : : computeProbabilityMatrix ( storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector ) ;
template storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > HybridCtmcCslHelper : : computeUniformizedMatrix ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , double > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & transitionMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , double > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & maybeStates , double uniformizationRate ) ;
// Sylvan, rational number.
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeBoundedUntilProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & phiStates , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , bool qualitative , double lowerBound , double upperBound , storm : : solver : : LinearEquationSolverFactory < storm : : RationalNumber > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeInstantaneousRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < storm : : RationalNumber > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeCumulativeRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < storm : : RationalNumber > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeUntilProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & phiStates , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < storm : : RationalNumber > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeReachabilityRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > : : RewardModelType const & rewardModel , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & targetStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < storm : : RationalNumber > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , storm : : solver : : LinearEquationSolverFactory < storm : : RationalNumber > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeNextProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & nextStates ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > : : RewardModelType const & rewardModel , storm : : solver : : LinearEquationSolverFactory < storm : : RationalNumber > const & linearEquationSolverFactory ) ;
template storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > HybridCtmcCslHelper : : computeProbabilityMatrix ( storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector ) ;
template storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > HybridCtmcCslHelper : : computeUniformizedMatrix ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & transitionMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalNumber > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & maybeStates , storm : : RationalNumber uniformizationRate ) ;
// Sylvan, rational function.
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeBoundedUntilProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & phiStates , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , bool qualitative , double lowerBound , double upperBound , storm : : solver : : LinearEquationSolverFactory < storm : : RationalFunction > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeInstantaneousRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < storm : : RationalFunction > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeCumulativeRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > : : RewardModelType const & rewardModel , double timeBound , storm : : solver : : LinearEquationSolverFactory < storm : : RationalFunction > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeUntilProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & phiStates , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < storm : : RationalFunction > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeReachabilityRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > : : RewardModelType const & rewardModel , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & targetStates , bool qualitative , storm : : solver : : LinearEquationSolverFactory < storm : : RationalFunction > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & psiStates , storm : : solver : : LinearEquationSolverFactory < storm : : RationalFunction > const & linearEquationSolverFactory ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeNextProbabilities ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & nextStates ) ;
template std : : unique_ptr < CheckResult > HybridCtmcCslHelper : : computeLongRunAverageRewards ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , typename storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > : : RewardModelType const & rewardModel , storm : : solver : : LinearEquationSolverFactory < storm : : RationalFunction > const & linearEquationSolverFactory ) ;
template storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > HybridCtmcCslHelper : : computeProbabilityMatrix ( storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & rateMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector ) ;
template storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > HybridCtmcCslHelper : : computeUniformizedMatrix ( storm : : models : : symbolic : : Ctmc < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & model , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & transitionMatrix , storm : : dd : : Add < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > const & exitRateVector , storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan > const & maybeStates , storm : : RationalFunction uniformizationRate ) ;
}
}
}