| 
					
					
						
							
						
					
					
				 | 
				@ -258,6 +258,7 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                logfile << "calculating vector " << kind   <<  " for k = " << k << " node "<< node << " \t"; | 
				 | 
				 | 
				                logfile << "calculating vector " << kind   <<  " for k = " << k << " node "<< node << " \t"; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				                auto probabilisticStates = ~markovianStates; | 
				 | 
				 | 
				                auto probabilisticStates = ~markovianStates; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                auto numberOfProbStates = probabilisticStates.getNumberOfSetBits(); | 
			
		
		
	
		
			
				 | 
				 | 
				                auto numberOfStates=fullTransitionMatrix.getRowGroupCount(); | 
				 | 
				 | 
				                auto numberOfStates=fullTransitionMatrix.getRowGroupCount(); | 
			
		
		
	
		
			
				 | 
				 | 
				                uint64_t N = unifVectors[kind].size()-1; | 
				 | 
				 | 
				                uint64_t N = unifVectors[kind].size()-1; | 
			
		
		
	
		
			
				 | 
				 | 
				                auto const& rowGroupIndices = fullTransitionMatrix.getRowGroupIndices(); | 
				 | 
				 | 
				                auto const& rowGroupIndices = fullTransitionMatrix.getRowGroupIndices(); | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -309,7 +310,7 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                //probabilistic non-goal State
 | 
				 | 
				 | 
				                //probabilistic non-goal State
 | 
			
		
		
	
		
			
				 | 
				 | 
				                if (probabilisticStates[node]){ | 
				 | 
				 | 
				                if (probabilisticStates[node]){ | 
			
		
		
	
		
			
				 | 
				 | 
				                    logfile << "probabilistic state: "; | 
				 | 
				 | 
				                    logfile << "probabilistic state: "; | 
			
		
		
	
		
			
				 | 
				 | 
				                    std::vector<ValueType> b(probSize, 0), x(probabilisticStates.getNumberOfSetBits(),0); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    std::vector<ValueType> b(probSize, 0), x(numberOfProbStates,0); | 
			
		
		
	
		
			
				 | 
				 | 
				                    //calculate b
 | 
				 | 
				 | 
				                    //calculate b
 | 
			
		
		
	
		
			
				 | 
				 | 
				                    uint64_t  lineCounter=0; | 
				 | 
				 | 
				                    uint64_t  lineCounter=0; | 
			
		
		
	
		
			
				 | 
				 | 
				                    for (int i =0; i<numberOfStates; i++) { | 
				 | 
				 | 
				                    for (int i =0; i<numberOfStates; i++) { | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -341,7 +342,7 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				                    for (uint64_t i =0 ; i<probSize ; i++){ | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    for (uint64_t i =0 ; i<numberOfProbStates; i++){ | 
			
		
		
	
		
			
				 | 
				 | 
				                        auto trueI = transformIndice(probabilisticStates,i); | 
				 | 
				 | 
				                        auto trueI = transformIndice(probabilisticStates,i); | 
			
		
		
	
		
			
				 | 
				 | 
				                        unifVectors[kind][k][trueI]=x[i]; | 
				 | 
				 | 
				                        unifVectors[kind][k][trueI]=x[i]; | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				                    } | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -460,11 +461,12 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                            continue; | 
				 | 
				 | 
				                            continue; | 
			
		
		
	
		
			
				 | 
				 | 
				                        } | 
				 | 
				 | 
				                        } | 
			
		
		
	
		
			
				 | 
				 | 
				                        for (auto& element : transitionMatrix.getRow(j)){ | 
				 | 
				 | 
				                        for (auto& element : transitionMatrix.getRow(j)){ | 
			
		
		
	
		
			
				 | 
				 | 
				                            if (element.getColumn()!=i && selfLoop!=1){ | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            if (element.getColumn()!=i ){ | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                                if (selfLoop!=1){ | 
			
		
		
	
		
			
				 | 
				 | 
				                                    element.setValue(element.getValue()/(1-selfLoop)); | 
				 | 
				 | 
				                                    element.setValue(element.getValue()/(1-selfLoop)); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                                } | 
			
		
		
	
		
			
				 | 
				 | 
				                            } else { | 
				 | 
				 | 
				                            } else { | 
			
		
		
	
		
			
				 | 
				 | 
				                                element.setValue(0); | 
				 | 
				 | 
				                                element.setValue(0); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                            } | 
				 | 
				 | 
				                            } | 
			
		
		
	
		
			
				 | 
				 | 
				                        } | 
				 | 
				 | 
				                        } | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				                    } | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -490,6 +492,8 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                //transition matrix with diagonal entries. The values can be changed during uniformisation
 | 
				 | 
				 | 
				                //transition matrix with diagonal entries. The values can be changed during uniformisation
 | 
			
		
		
	
		
			
				 | 
				 | 
				                std::vector<ValueType> exitRate{exitRateVector}; | 
				 | 
				 | 
				                std::vector<ValueType> exitRate{exitRateVector}; | 
			
		
		
	
		
			
				 | 
				 | 
				                typename storm::storage::SparseMatrix<ValueType> fullTransitionMatrix = transitionMatrix.getSubmatrix(true, allStates , allStates , true); | 
				 | 
				 | 
				                typename storm::storage::SparseMatrix<ValueType> fullTransitionMatrix = transitionMatrix.getSubmatrix(true, allStates , allStates , true); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    // delete diagonals
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    deleteProbDiagonals(fullTransitionMatrix, markovianStates); | 
			
		
		
	
		
			
				 | 
				 | 
				                typename storm::storage::SparseMatrix<ValueType> probMatrix{}; | 
				 | 
				 | 
				                typename storm::storage::SparseMatrix<ValueType> probMatrix{}; | 
			
		
		
	
		
			
				 | 
				 | 
				                uint64_t  probSize =0; | 
				 | 
				 | 
				                uint64_t  probSize =0; | 
			
		
		
	
		
			
				 | 
				 | 
				                if (probabilisticStates.getNumberOfSetBits()!=0){ //work around in case there are no prob states
 | 
				 | 
				 | 
				                if (probabilisticStates.getNumberOfSetBits()!=0){ //work around in case there are no prob states
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -518,6 +522,7 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                std::vector<std::vector<ValueType>> relReachability(fullTransitionMatrix.getRowCount(),in); | 
				 | 
				 | 
				                std::vector<std::vector<ValueType>> relReachability(fullTransitionMatrix.getRowCount(),in); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				                //calculate relative reachability
 | 
				 | 
				 | 
				                //calculate relative reachability
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				                for(uint64_t i=0 ; i<numberOfStates; i++){ | 
				 | 
				 | 
				                for(uint64_t i=0 ; i<numberOfStates; i++){ | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -593,9 +598,6 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                    unifVectors.push_back(vd); | 
				 | 
				 | 
				                    unifVectors.push_back(vd); | 
			
		
		
	
		
			
				 | 
				 | 
				                    unifVectors.push_back(vd); | 
				 | 
				 | 
				                    unifVectors.push_back(vd); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                   printTransitions(fullTransitionMatrix,exitRate,markovianStates,psiStates,relReachability,psiStates, psiStates,unifVectors); //TODO remove
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    //define 0=vd 1=vu 2=wu
 | 
				 | 
				 | 
				                    //define 0=vd 1=vu 2=wu
 | 
			
		
		
	
		
			
				 | 
				 | 
				                    // (5) calculate vectors and maxNorm
 | 
				 | 
				 | 
				                    // (5) calculate vectors and maxNorm
 | 
			
		
		
	
		
			
				 | 
				 | 
				                    for (uint64_t i = 0; i < numberOfStates; i++) { | 
				 | 
				 | 
				                    for (uint64_t i = 0; i < numberOfStates; i++) { | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -608,7 +610,6 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				                                maxNorm  = std::max(maxNorm, diff); | 
				 | 
				 | 
				                                maxNorm  = std::max(maxNorm, diff); | 
			
		
		
	
		
			
				 | 
				 | 
				                            } | 
				 | 
				 | 
				                            } | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				                    } | 
			
		
		
	
		
			
				 | 
				 | 
				                    std::cout << "\nTBU was " << unifVectors[0][0][0] << "\n"; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    printTransitions(fullTransitionMatrix,exitRate,markovianStates,psiStates,relReachability,psiStates, psiStates,unifVectors); //TODO remove
 | 
				 | 
				 | 
				                    printTransitions(fullTransitionMatrix,exitRate,markovianStates,psiStates,relReachability,psiStates, psiStates,unifVectors); //TODO remove
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |