@ -20,9 +20,8 @@ 
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# include  "storm/utility/Stopwatch.h" 
  
				 
				 
				# include  "storm/utility/Stopwatch.h" 
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# include  "storm/exceptions/InvalidStateException.h" 
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				# include  "storm/exceptions/InvalidPropertyException.h" 
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				# include  "storm/exceptions/InvalidOperationException.h" 
  
				 
				 
				# include  "storm/exceptions/InvalidOperationException.h" 
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				# include  "storm/exceptions/NotSupportedException.h" 
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				namespace  storm  {  
				 
				 
				namespace  storm  {  
			
		 
		
	
		
			
				 
				 
				    namespace  modelchecker  {  
				 
				 
				    namespace  modelchecker  {  
			
		 
		
	
	
		
			
				
					
						
							 
						 
					
					
						
							 
						 
					
					
				 
				@ -77,67 +76,73 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				          /*  template<storm::dd::DdType DdType, class ValueType>
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageProbabilities ( Environment  const &  env ,  storm : : models : : symbolic : : MarkovAutomaton < DdType ,  ValueType >  const &  model ,  storm : : dd : : Add < DdType ,  ValueType >  const &  rateMatrix ,  storm : : dd : : Add < DdType ,  ValueType >  const &  exitRateVector ,  storm : : dd : : Bdd < DdType >  const &  psiStates )  {  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            template < storm : : dd : : DdType  DdType ,  class  ValueType >   
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < DdType ,  ValueType >  const &  model ,  storm : : dd : : Add < DdType ,  ValueType >  const &  transitionMatrix ,  storm : : dd : : Bdd < DdType >  const &  markovianStates ,  storm : : dd : : Add < DdType ,  ValueType >  const &  exitRateVector ,  storm : : dd : : Bdd < DdType >  const &  psiStates )  {  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				                 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                // Convert this query to an instance for the sparse engine.
  
			
		 
		
	
		
			
				 
				 
				                storm : : utility : : Stopwatch  conversionWatch ( true ) ;  
				 
				 
				                storm : : utility : : Stopwatch  conversionWatch ( true ) ;  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                // Create ODD for the translation.
  
				 
				 
				                // Create ODD for the translation.
  
			
		 
		
	
		
			
				 
				 
				                storm : : dd : : Odd  odd  =  model . getReachableStates ( ) . createOdd ( ) ;  
				 
				 
				                storm : : dd : : Odd  odd  =  model . getReachableStates ( ) . createOdd ( ) ;  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                storm : : storage : : SparseMatrix < ValueType >  explicitRateMatrix  =  rateMatrix . toMatrix ( odd ,  odd ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                storm : : storage : : SparseMatrix < ValueType >  explicitTransitionMatrix  =  transitionMatrix . toMatrix ( model . getNondeterminismVariables ( ) ,  odd ,  odd ) ;  
			
		 
		
	
		
			
				 
				 
				                std : : vector < ValueType >  explicitExitRateVector  =  exitRateVector . toVector ( odd ) ;  
				 
				 
				                std : : vector < ValueType >  explicitExitRateVector  =  exitRateVector . toVector ( odd ) ;  
			
		 
		
	
		
			
				 
				 
				                conversionWatch . stop ( ) ;  
				 
				 
				                conversionWatch . stop ( ) ;  
			
		 
		
	
		
			
				 
				 
				                STORM_LOG_INFO ( " Converting symbolic matrix/vector  to explicit representation done in  "  < <  conversionWatch . getTimeInMilliseconds ( )  < <  " ms. " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                std : : vector < ValueType >  r esult  =  storm : : modelchecker : : helper : : SparseMarkovAutomatonCslHelper : : computeLongRunAverageProbabilities ( env ,  storm : : solver : : SolveGoal < ValueType > ( ) ,  explicitRateMatrix ,  psi States. toVector ( odd ) ,  & explicitExitRateVector ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                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 ) ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                STORM_LOG_INFO ( " Converting symbolic matrix to explicit representation done in  "  < <  conversionWatch . getTimeInMilliseconds ( )  < <  " ms. " ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                auto  explicitR esult  =  storm : : modelchecker : : helper : : SparseMarkovAutomatonCslHelper : : computeLongRunAverageProbabilities ( env ,  dir ,  explicitTransitionMatrix ,  explicitTransitionMatrix . transpose ( true ) ,  explicitExitRateVector ,  markovian States. toVector ( odd ) ,  psiStates . toVector ( odd ) ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                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 ( explicitResult ) ) ) ;   
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                 
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            template < storm : : dd : : DdType  DdType ,  class  ValueType >  
				 
				 
				            template < storm : : dd : : DdType  DdType ,  class  ValueType >  
			
		 
		
	
		
			
				 
				 
				            std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( Environment  const &  env ,  storm : : models : : symbolic : : MarkovAutomaton < 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_LOG_THROW ( ! rewardModel . empty ( ) ,  storm : : exceptions : : InvalidPropertyException ,  " Missing reward model for formula. Skipping formula. " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                storm : : dd : : Add < DdType ,  ValueType >  probabilityMatrix  =  computeProbabilityMatrix ( rateMatrix ,  exitRateVector ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < DdType ,  ValueType >  const &  model ,  storm : : dd : : Add < DdType ,  ValueType >  const &  transitionMatrix ,  storm : : dd : : Bdd < DdType >  const &  markovianStates ,  storm : : dd : : Add < DdType ,  ValueType >  const &  exitRateVector ,  typename  storm : : models : : symbolic : : Model < DdType ,  ValueType > : : RewardModelType  const &  rewardModel )  {  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				                 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                // Convert this query to an instance for the sparse engine.
  
			
		 
		
	
		
			
				 
				 
				                storm : : utility : : Stopwatch  conversionWatch ( true ) ;  
				 
				 
				                storm : : utility : : Stopwatch  conversionWatch ( true ) ;  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                // Create ODD for the translation.
  
				 
				 
				                // Create ODD for the translation.
  
			
		 
		
	
		
			
				 
				 
				                storm : : dd : : Odd  odd  =  model . getReachableStates ( ) . createOdd ( ) ;  
				 
				 
				                storm : : dd : : Odd  odd  =  model . getReachableStates ( ) . createOdd ( ) ;  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                storm : : storage : : SparseMatrix < ValueType >  explicitRateMatrix  =  rateMatrix . toMatrix ( odd ,  odd ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                std : : vector < ValueType >  explicitExitRateVector  =  exitRateVector . toVector ( odd ) ;  
				 
				 
				                std : : vector < ValueType >  explicitExitRateVector  =  exitRateVector . toVector ( odd ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                storm : : storage : : SparseMatrix < ValueType >  explicitTransitionMatrix ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                boost : : optional < std : : vector < ValueType > >  optionalStateRewards ,  optionalStateActionRewards ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                if  ( rewardModel . hasStateRewards ( ) )  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    optionalStateRewards  =  rewardModel . getStateRewardVector ( ) . toVector ( odd ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                }  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                if  ( rewardModel . hasStateActionRewards ( ) )  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    auto  matrixRewards  =  transitionMatrix . toMatrixVector ( rewardModel . getStateActionRewardVector ( ) ,  model . getNondeterminismVariables ( ) ,  odd ,  odd ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    explicitTransitionMatrix  =  std : : move ( matrixRewards . first ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    optionalStateActionRewards  =  std : : move ( matrixRewards . second ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                }  else  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    explicitTransitionMatrix  =  transitionMatrix . toMatrix ( model . getNondeterminismVariables ( ) ,  odd ,  odd ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                }  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                STORM_LOG_THROW ( ! rewardModel . hasTransitionRewards ( ) ,  storm : : exceptions : : NotSupportedException ,  " Transition rewards are not supported in this engine. " ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                storm : : models : : sparse : : StandardRewardModel < ValueType >  explicitRewardModel ( optionalStateRewards ,  optionalStateActionRewards ) ;  
			
		 
		
	
		
			
				 
				 
				                conversionWatch . stop ( ) ;  
				 
				 
				                conversionWatch . stop ( ) ;  
			
		 
		
	
		
			
				 
				 
				                STORM_LOG_INFO ( " Converting symbolic matrix/vector to explicit representation done in  "  < <  conversionWatch . getTimeInMilliseconds ( )  < <  " ms. " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				                std : : vector < ValueType >  result  =  storm : : modelchecker : : helper : : SparseMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( env ,  storm : : solver : : SolveGoal < ValueType > ( ) ,  explicitRateMatrix ,  rewardModel . getTotalRewardVector ( probabilityMatrix ,  model . getColumnVariables ( ) ,  exitRateVector ,  true ) . toVector ( odd ) ,  & explicitExitRateVector ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                STORM_LOG_INFO ( " Converting symbolic matrix to explicit representation done in  "  < <  conversionWatch . getTimeInMilliseconds ( )  < <  " ms. " ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                auto  explicitResult  =  storm : : modelchecker : : helper : : SparseMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( env ,  dir ,  explicitTransitionMatrix ,  explicitTransitionMatrix . transpose ( true ) ,  explicitExitRateVector ,  markovianStates . toVector ( odd ) ,  explicitRewardModel ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                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 ( explicitResult ) ) ) ;  
			
		 
		
	
		
			
				 
				 
				                 
				 
				 
				                 
			
		 
		
	
		
			
				 
				 
				                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 ) ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				            */  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				  
				 
				 
				  
			
		 
		
	
		
			
				 
				 
				            // Explicit instantiations.
  
				 
				 
				            // Explicit instantiations.
  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            // Cudd, double.
  
				 
				 
				            // Cudd, double.
  
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeReachabilityRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : CUDD ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  markovianStates ,  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 ) ;  
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeReachabilityRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : CUDD ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  markovianStates ,  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 ) ;  
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeBoundedUntilProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : CUDD ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  psiStates ,  bool  qualitative ,  double  lowerBound ,  double  upperBound ) ;  
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeBoundedUntilProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : CUDD ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  psiStates ,  bool  qualitative ,  double  lowerBound ,  double  upperBound ) ;  
			
		 
		
	
		
			
				 
				 
				            /*
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageProbabilities ( Environment  const &  env ,  storm : : models : : symbolic : : MarkovAutomaton < 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 ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( Environment  const &  env ,  storm : : models : : symbolic : : MarkovAutomaton < 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 ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				*/  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : CUDD ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  psiStates ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : CUDD ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : CUDD >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : CUDD ,  double >  const &  exitRateVector ,  typename  storm : : models : : symbolic : : Model < storm : : dd : : DdType : : CUDD ,  double > : : RewardModelType  const &  rewardModel ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				  
			
		 
		
	
		
			
				 
				 
				            // Sylvan, double.
  
				 
				 
				            // Sylvan, double.
  
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeReachabilityRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  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 ) ;  
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeReachabilityRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  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 ) ;  
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeBoundedUntilProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  psiStates ,  bool  qualitative ,  double  lowerBound ,  double  upperBound ) ;  
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeBoundedUntilProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  psiStates ,  bool  qualitative ,  double  lowerBound ,  double  upperBound ) ;  
			
		 
		
	
		
			
				 
				 
				  /*          template std::unique_ptr<CheckResult> HybridMarkovAutomatonCslHelper::computeLongRunAverageProbabilities(Environment const& env, storm::models::symbolic::MarkovAutomaton<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);
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( Environment  const &  env ,  storm : : models : : symbolic : : MarkovAutomaton < 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 ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				*/  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  psiStates ) ;   
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  double >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  double >  const &  exitRateVector ,  typename  storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan ,  double > : : RewardModelType  const &  rewardModel ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				    
			
		 
		
	
		
			
				 
				 
				            // Sylvan, rational number.
  
				 
				 
				            // Sylvan, rational number.
  
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeReachabilityRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  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 ) ;  
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeReachabilityRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  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 ) ;  
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeBoundedUntilProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  psiStates ,  bool  qualitative ,  double  lowerBound ,  double  upperBound ) ;  
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeBoundedUntilProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  psiStates ,  bool  qualitative ,  double  lowerBound ,  double  upperBound ) ;  
			
		 
		
	
		
			
				 
				 
				  /*          template std::unique_ptr<CheckResult> HybridMarkovAutomatonCslHelper::computeLongRunAverageProbabilities(Environment const& env, storm::models::symbolic::MarkovAutomaton<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);
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( Environment  const &  env ,  storm : : models : : symbolic : : MarkovAutomaton < 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 ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				*/  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageProbabilities ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  exitRateVector ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  psiStates ) ;   
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            template  std : : unique_ptr < CheckResult >  HybridMarkovAutomatonCslHelper : : computeLongRunAverageRewards ( Environment  const &  env ,  OptimizationDirection  dir ,  storm : : models : : symbolic : : MarkovAutomaton < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  model ,  storm : : dd : : Add < storm : : dd : : DdType : : Sylvan ,  storm : : RationalNumber >  const &  transitionMatrix ,  storm : : dd : : Bdd < storm : : dd : : DdType : : Sylvan >  const &  markovianStates ,  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 ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				    }  
				 
				 
				    }