@ -329,6 +329,38 @@ namespace storm {
return storm : : modelchecker : : helper : : SparseDtmcPrctlHelper < ValueType > : : computeReachabilityRewards ( env , std : : move ( goal ) , probabilityMatrix , backwardTransitions , totalRewardVector , targetStates , qualitative ) ;
}
template < typename ValueType , typename RewardModelType >
std : : vector < ValueType > SparseCtmcCslHelper : : 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 ) {
STORM_LOG_THROW ( ! rewardModel . empty ( ) , storm : : exceptions : : InvalidPropertyException , " Missing reward model for formula. Skipping formula. " ) ;
storm : : storage : : SparseMatrix < ValueType > probabilityMatrix = computeProbabilityMatrix ( rateMatrix , exitRateVector ) ;
std : : vector < ValueType > totalRewardVector ;
if ( rewardModel . hasStateRewards ( ) ) {
totalRewardVector = rewardModel . getStateRewardVector ( ) ;
typename std : : vector < ValueType > : : const_iterator it2 = exitRateVector . begin ( ) ;
for ( typename std : : vector < ValueType > : : iterator it1 = totalRewardVector . begin ( ) , ite1 = totalRewardVector . end ( ) ; it1 ! = ite1 ; + + it1 , + + it2 ) {
* it1 / = * it2 ;
}
if ( rewardModel . hasStateActionRewards ( ) ) {
storm : : utility : : vector : : addVectors ( totalRewardVector , rewardModel . getStateActionRewardVector ( ) , totalRewardVector ) ;
}
if ( rewardModel . hasTransitionRewards ( ) ) {
storm : : utility : : vector : : addVectors ( totalRewardVector , probabilityMatrix . getPointwiseProductRowSumVector ( rewardModel . getTransitionRewardMatrix ( ) ) , totalRewardVector ) ;
}
} else if ( rewardModel . hasTransitionRewards ( ) ) {
totalRewardVector = probabilityMatrix . getPointwiseProductRowSumVector ( rewardModel . getTransitionRewardMatrix ( ) ) ;
if ( rewardModel . hasStateActionRewards ( ) ) {
storm : : utility : : vector : : addVectors ( totalRewardVector , rewardModel . getStateActionRewardVector ( ) , totalRewardVector ) ;
}
} else {
totalRewardVector = rewardModel . getStateActionRewardVector ( ) ;
}
RewardModelType dtmcRewardModel ( std : : move ( totalRewardVector ) ) ;
return storm : : modelchecker : : helper : : SparseDtmcPrctlHelper < ValueType > : : computeTotalRewards ( env , std : : move ( goal ) , probabilityMatrix , backwardTransitions , dtmcRewardModel , qualitative ) ;
}
template < typename ValueType >
std : : vector < ValueType > SparseCtmcCslHelper : : computeLongRunAverageProbabilities ( Environment const & env , storm : : solver : : SolveGoal < ValueType > & & goal , storm : : storage : : SparseMatrix < ValueType > const & probabilityMatrix , storm : : storage : : BitVector const & psiStates , std : : vector < ValueType > const * exitRateVector ) {
@ -743,6 +775,8 @@ namespace storm {
template std : : vector < double > SparseCtmcCslHelper : : computeReachabilityRewards ( Environment const & env , storm : : solver : : SolveGoal < double > & & goal , storm : : storage : : SparseMatrix < double > const & rateMatrix , storm : : storage : : SparseMatrix < double > const & backwardTransitions , std : : vector < double > const & exitRateVector , storm : : models : : sparse : : StandardRewardModel < double > const & rewardModel , storm : : storage : : BitVector const & targetStates , bool qualitative ) ;
template std : : vector < double > SparseCtmcCslHelper : : computeTotalRewards ( Environment const & env , storm : : solver : : SolveGoal < double > & & goal , storm : : storage : : SparseMatrix < double > const & rateMatrix , storm : : storage : : SparseMatrix < double > const & backwardTransitions , std : : vector < double > const & exitRateVector , storm : : models : : sparse : : StandardRewardModel < double > const & rewardModel , bool qualitative ) ;
template std : : vector < double > SparseCtmcCslHelper : : computeLongRunAverageProbabilities ( Environment const & env , storm : : solver : : SolveGoal < double > & & goal , storm : : storage : : SparseMatrix < double > const & probabilityMatrix , storm : : storage : : BitVector const & psiStates , std : : vector < double > const * exitRateVector ) ;
template std : : vector < double > SparseCtmcCslHelper : : computeLongRunAverageRewards ( Environment const & env , storm : : solver : : SolveGoal < double > & & goal , storm : : storage : : SparseMatrix < double > const & probabilityMatrix , storm : : models : : sparse : : StandardRewardModel < double > const & rewardModel , std : : vector < double > const * exitRateVector ) ;
template std : : vector < double > SparseCtmcCslHelper : : computeLongRunAverageRewards ( Environment const & env , storm : : solver : : SolveGoal < double > & & goal , storm : : storage : : SparseMatrix < double > const & probabilityMatrix , std : : vector < double > const & stateRewardVector , std : : vector < double > const * exitRateVector ) ;
@ -772,6 +806,9 @@ namespace storm {
template std : : vector < storm : : RationalNumber > SparseCtmcCslHelper : : computeReachabilityRewards ( Environment const & env , storm : : solver : : SolveGoal < storm : : RationalNumber > & & goal , storm : : storage : : SparseMatrix < storm : : RationalNumber > const & rateMatrix , storm : : storage : : SparseMatrix < storm : : RationalNumber > const & backwardTransitions , std : : vector < storm : : RationalNumber > const & exitRateVector , storm : : models : : sparse : : StandardRewardModel < storm : : RationalNumber > const & rewardModel , storm : : storage : : BitVector const & targetStates , bool qualitative ) ;
template std : : vector < storm : : RationalFunction > SparseCtmcCslHelper : : computeReachabilityRewards ( Environment const & env , storm : : solver : : SolveGoal < storm : : RationalFunction > & & goal , storm : : storage : : SparseMatrix < storm : : RationalFunction > const & rateMatrix , storm : : storage : : SparseMatrix < storm : : RationalFunction > const & backwardTransitions , std : : vector < storm : : RationalFunction > const & exitRateVector , storm : : models : : sparse : : StandardRewardModel < storm : : RationalFunction > const & rewardModel , storm : : storage : : BitVector const & targetStates , bool qualitative ) ;
template std : : vector < storm : : RationalNumber > SparseCtmcCslHelper : : computeTotalRewards ( Environment const & env , storm : : solver : : SolveGoal < storm : : RationalNumber > & & goal , storm : : storage : : SparseMatrix < storm : : RationalNumber > const & rateMatrix , storm : : storage : : SparseMatrix < storm : : RationalNumber > const & backwardTransitions , std : : vector < storm : : RationalNumber > const & exitRateVector , storm : : models : : sparse : : StandardRewardModel < storm : : RationalNumber > const & rewardModel , bool qualitative ) ;
template std : : vector < storm : : RationalFunction > SparseCtmcCslHelper : : computeTotalRewards ( Environment const & env , storm : : solver : : SolveGoal < storm : : RationalFunction > & & goal , storm : : storage : : SparseMatrix < storm : : RationalFunction > const & rateMatrix , storm : : storage : : SparseMatrix < storm : : RationalFunction > const & backwardTransitions , std : : vector < storm : : RationalFunction > const & exitRateVector , storm : : models : : sparse : : StandardRewardModel < storm : : RationalFunction > const & rewardModel , bool qualitative ) ;
template std : : vector < storm : : RationalNumber > SparseCtmcCslHelper : : computeLongRunAverageProbabilities ( Environment const & env , storm : : solver : : SolveGoal < storm : : RationalNumber > & & goal , storm : : storage : : SparseMatrix < storm : : RationalNumber > const & probabilityMatrix , storm : : storage : : BitVector const & psiStates , std : : vector < storm : : RationalNumber > const * exitRateVector ) ;
template std : : vector < storm : : RationalFunction > SparseCtmcCslHelper : : computeLongRunAverageProbabilities ( Environment const & env , storm : : solver : : SolveGoal < storm : : RationalFunction > & & goal , storm : : storage : : SparseMatrix < storm : : RationalFunction > const & probabilityMatrix , storm : : storage : : BitVector const & psiStates , std : : vector < storm : : RationalFunction > const * exitRateVector ) ;