| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -267,7 +267,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        // Vd
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        res = storm::utility::zero<ValueType>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        for (uint64_t i = k ; i<N ; i++){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            if (i < poisson.size()){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            if (poisson[i]>1e-300){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                ValueType between = poisson[i]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                res+=between; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            } | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -652,6 +652,8 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    std::vector<double> poisson = foxGlynnProb(lambda*T, N+1, epsilon*kappa); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // (4) define vectors/matrices
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    std::vector<ValueType> init(numberOfStates, -1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    vd = std::vector<std::vector<ValueType>>(N + 1, init); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -669,13 +671,13 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        for (uint64_t k = N; k <= N; k--) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            calculateUnifPlusVector(k, i, 0, lambda, probSize, relReachability, dir, unifVectors, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                    fullTransitionMatrix, markovianStates, psiStates, solver, logfile, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                    std::get<3>(foxGlynnResult)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                    poisson); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            calculateUnifPlusVector(k, i, 2, lambda, probSize, relReachability, dir, unifVectors, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                    fullTransitionMatrix, markovianStates, psiStates, solver, logfile, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                    std::get<3>(foxGlynnResult)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                    poisson); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            calculateVu(relReachability, dir, k, i, 1, lambda, probSize, unifVectors, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                        fullTransitionMatrix, markovianStates, psiStates, solver, logfile, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                        std::get<3>(foxGlynnResult)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                        poisson); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            //also use iteration to keep maxNorm of vd and vup to date, so the loop-condition is easy to prove
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            ValueType diff = std::abs(unifVectors[0][k][i] - unifVectors[1][k][i]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            maxNorm = std::max(maxNorm, diff); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -700,7 +702,6 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logfile.close(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return unifVectors[0][0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            template <typename ValueType, typename std::enable_if<storm::NumberTraits<ValueType>::SupportsExponential, int>::type> | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |