| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -191,7 +191,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ValueType SparseMarkovAutomatonCslHelper::poisson(ValueType lambda, uint64_t i) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType res = pow(lambda, i); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType fac = 1; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (long j = i ; j>0 ; j--){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (uint64_t j = i ; j>0 ; j--){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    fac = fac *j; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                res = res / fac ; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -206,7 +206,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                auto rowGroupIndices = fullTransitionMatrix.getRowGroupIndices(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType res =0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (uint_fast64_t i = k ; i < N ; i++ ){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (uint64_t i = k ; i < N ; i++ ){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (wu[N-1-(i-k)][node]==-1){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        calculateWu((N-1-(i-k)),node,lambda,wu,fullTransitionMatrix,markovianStates,psiStates); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -287,9 +287,10 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //goal state
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (psiStates[node]){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    res = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    res = storm::utility::zero<ValueType>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    for (uint64_t i = k ; i<N ; i++){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        res+=poisson(lambda,i); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        ValueType between = poisson(lambda,i); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        res+=between; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    vd[k][node]=res; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    logfile << "goal state node " << node << " res = " << res << "\n"; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -352,14 +353,42 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::vector<std::vector<ValueType>> vd,vu,wu; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //transition matrix with diagonal entries. The values can be changed during uniformisation
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::vector<ValueType> exitRate{exitRateVector}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                typename storm::storage::SparseMatrix<ValueType> fullTransitionMatrix = transitionMatrix.getSubmatrix(true, allStates , allStates , true); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                auto rowGroupIndices = fullTransitionMatrix.getRowGroupIndices(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::vector<ValueType> exitRate{exitRateVector}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //delete prob-diagonal entries
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (uint64_t i =0; i<fullTransitionMatrix.getRowGroupCount(); i++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (markovianStates[i]) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    auto from = rowGroupIndices[i]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    auto to = rowGroupIndices[i + 1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    for (uint64_t j = from; j < to; j++) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        ValueType selfLoop = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        for (auto& element: fullTransitionMatrix.getRow(j)){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            if (element.getColumn()==i){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                selfLoop = element.getValue(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (selfLoop==0){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        for (auto& element : fullTransitionMatrix.getRow(j)){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            if (element.getColumn()!=i && selfLoop!=1){ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                element.setValue(element.getValue()/(1-selfLoop)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                element.setValue(0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                //(1) define horizon, epsilon, kappa , N, lambda,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                uint64_t numberOfStates = fullTransitionMatrix.getRowGroupCount(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                double T = boundsPair.second; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType kappa = storm::utility::one<ValueType>() /10; // would be better as option-parameter
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                uint64_t numberOfStates = fullTransitionMatrix.getRowGroupCount(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType epsilon = storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                ValueType lambda = exitRateVector[0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (ValueType act: exitRateVector) { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |