@ -561,10 +561,8 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                ValueType  precision  =  storm : : utility : : convertNumber < ValueType > ( storm : : settings : : getModule < storm : : settings : : modules : : GeneralSettings > ( ) . getPrecision ( ) )  /  uniformizationRate ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                std : : vector < ValueType >  v ( aMarkovian . getRowCount ( ) ,  storm : : utility : : zero < ValueType > ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                std : : vector < ValueType >  vOld  =  v ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                std : : vector < ValueType >  w  =  v ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                std : : vector < ValueType >  x ( aProbabilistic . getRowGroupCount ( ) ,  storm : : utility : : zero < ValueType > ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                std : : vector < ValueType >  xPrime  =  x ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                std : : vector < ValueType >  b  =  probabilisticChoiceRewards ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                auto  solver  =  minMaxLinearEquationSolverFactory . create ( std : : move ( aProbabilistic ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                solver - > setCachingEnabled ( true ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -574,22 +572,22 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // Compute the expected total rewards for the probabilistic states
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    solver - > solveEquations ( dir ,  x ,  b ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                     
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // now compute the values for the markovian states
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    for  ( uint_fast64_t  row  =  0 ;  row  <  aMarkovian . getRowCount ( ) ;  + + row )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        v [ row ]  =  markovianChoiceRewards [ row ]  +  aMarkovianToProbabilistic . multiplyRowWithVector ( row ,  x )  +  aMarkovian . multiplyRowWithVector ( row ,  w ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // Check for convergence
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // now compute the values for the markovian states. We also keep track of the maximal and minimal difference between two values (for convergence checking)
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    auto  vIt  =  v . begin ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    auto  vEndIt  =  v . end ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    auto  vOldIt  =  vOld . begin ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    ValueType  maxDiff  =  * vIt   -  * vOld It ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    uint_fast64_t  row  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    ValueType  newValue  =  markovianChoiceRewards [ row ]  +  aMarkovianToProbabilistic . multiplyRowWithVector ( row ,  x )  +  aMarkovian . multiplyRowWithVector ( row ,  w ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    ValueType  maxDiff  =  newValue  -  * vIt ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    ValueType  minDiff  =  maxDiff ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    for  ( + + vIt ,  + + vOldIt ;  vIt  ! =  vEndIt ;  + + vIt ,  + + vOldIt )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        ValueType  diff  =  * vIt  -  * vOldIt ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    * vIt  =  newValue ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    for  ( + + vIt ,  + + row ;  row  <  aMarkovian . getRowCount ( ) ;  + + vIt ,  + + row )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        newValue  =  markovianChoiceRewards [ row ]  +  aMarkovianToProbabilistic . multiplyRowWithVector ( row ,  x )  +  aMarkovian . multiplyRowWithVector ( row ,  w ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        ValueType  diff  =  newValue  -  * vIt ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        maxDiff  =  std : : max ( maxDiff ,  diff ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        minDiff  =  std : : min ( minDiff ,  diff ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        * vIt  =  newValue ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // Check for convergence
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( maxDiff  -  minDiff  <  precision )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -600,7 +598,6 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    aProbabilisticToMarkovian . multiplyWithVector ( w ,  b ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    storm : : utility : : vector : : addVectors ( b ,  probabilisticChoiceRewards ,  b ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    vOld  =  v ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                return  v . front ( )  *  uniformizationRate ;