| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -570,15 +570,12 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                double T = boundsPair.second; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType kappa = storm::utility::one<ValueType>() / 10; // would be better as option-parameter
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType epsilon = storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType lambda = exitRateVector[0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (ValueType act: exitRateVector) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType lambda = exitRate[0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (ValueType act: exitRate) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    lambda = std::max(act, lambda); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                uint64_t N; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //calculate relative ReachabilityVectors
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::vector<ValueType> in{}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::vector<std::vector<ValueType>> relReachability(transitionMatrix.getRowCount(), in); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -621,10 +618,11 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    //logfile << "starting iteration\n";
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    maxNorm = storm::utility::zero<ValueType>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // (2) update parameter
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    N = ceil(lambda * T * exp(2) - log(kappa * epsilon)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // (3) uniform  - just applied to markovian states
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    for (uint_fast64_t i = 0; i < fullTransitionMatrix.getRowGroupCount(); i++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (!markovianStates[i]) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    for (uint64_t i = 0; i < fullTransitionMatrix.getRowGroupCount(); i++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (!markovianStates[i] || psiStates[i]) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        uint64_t from = rowGroupIndices[i]; //markovian state -> no Nondeterminism -> only one row
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -638,7 +636,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        ValueType exitNew = lambda; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        for (auto &v : line) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            if (v.getColumn() == i) { //diagonal element
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                ValueType newSelfLoop = exitNew - exitOld + v.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                ValueType newSelfLoop = exitNew - exitOld + v.getValue()*exitOld; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                ValueType newRate = newSelfLoop / exitNew; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                v.setValue(newRate); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            } else { //modify probability
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -654,8 +652,6 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    storm::utility::numerical::FoxGlynnResult<ValueType> foxGlynnResult = storm::utility::numerical::foxGlynn(lambda*T, epsilon*kappa); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    N = std::max(ceil(lambda * T * exp(2) - log(kappa * epsilon)), ceil(foxGlynnResult.right - foxGlynnResult.left +1 )); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // Scale the weights so they add up to one.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    for (auto& element : foxGlynnResult.weights) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        element /= foxGlynnResult.totalWeight; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -695,8 +691,8 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            maxNorm = std::max(maxNorm, diff); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    printTransitions(N, maxNorm, fullTransitionMatrix, exitRate, markovianStates, psiStates, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    relReachability, psiStates, psiStates, unifVectors, logfile); //TODO remove
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    //printTransitions(N, maxNorm, fullTransitionMatrix, exitRate, markovianStates, psiStates,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    //                relReachability, psiStates, psiStates, unifVectors, logfile); //TODO remove
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // (6) double lambda
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |