|
|
@ -258,6 +258,7 @@ namespace storm { |
|
|
|
logfile << "calculating vector " << kind << " for k = " << k << " node "<< node << " \t"; |
|
|
|
|
|
|
|
auto probabilisticStates = ~markovianStates; |
|
|
|
auto numberOfProbStates = probabilisticStates.getNumberOfSetBits(); |
|
|
|
auto numberOfStates=fullTransitionMatrix.getRowGroupCount(); |
|
|
|
uint64_t N = unifVectors[kind].size()-1; |
|
|
|
auto const& rowGroupIndices = fullTransitionMatrix.getRowGroupIndices(); |
|
|
@ -309,7 +310,7 @@ namespace storm { |
|
|
|
//probabilistic non-goal State
|
|
|
|
if (probabilisticStates[node]){ |
|
|
|
logfile << "probabilistic state: "; |
|
|
|
std::vector<ValueType> b(probSize, 0), x(probabilisticStates.getNumberOfSetBits(),0); |
|
|
|
std::vector<ValueType> b(probSize, 0), x(numberOfProbStates,0); |
|
|
|
//calculate b
|
|
|
|
uint64_t lineCounter=0; |
|
|
|
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); |
|
|
|
unifVectors[kind][k][trueI]=x[i]; |
|
|
|
} |
|
|
@ -460,11 +461,12 @@ namespace storm { |
|
|
|
continue; |
|
|
|
} |
|
|
|
for (auto& element : transitionMatrix.getRow(j)){ |
|
|
|
if (element.getColumn()!=i && selfLoop!=1){ |
|
|
|
element.setValue(element.getValue()/(1-selfLoop)); |
|
|
|
if (element.getColumn()!=i ){ |
|
|
|
if (selfLoop!=1){ |
|
|
|
element.setValue(element.getValue()/(1-selfLoop)); |
|
|
|
} |
|
|
|
} else { |
|
|
|
element.setValue(0); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -490,6 +492,8 @@ namespace storm { |
|
|
|
//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); |
|
|
|
// delete diagonals
|
|
|
|
deleteProbDiagonals(fullTransitionMatrix, markovianStates); |
|
|
|
typename storm::storage::SparseMatrix<ValueType> probMatrix{}; |
|
|
|
uint64_t probSize =0; |
|
|
|
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); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//calculate relative reachability
|
|
|
|
|
|
|
|
for(uint64_t i=0 ; i<numberOfStates; i++){ |
|
|
@ -536,7 +541,7 @@ namespace storm { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//create equitation solver
|
|
|
|
//create equitation solver
|
|
|
|
storm::solver::MinMaxLinearEquationSolverRequirements requirements = minMaxLinearEquationSolverFactory.getRequirements(true, dir); |
|
|
|
requirements.clearBounds(); |
|
|
|
STORM_LOG_THROW(requirements.empty(), storm::exceptions::UncheckedRequirementException, "Cannot establish requirements for solver."); |
|
|
@ -593,9 +598,6 @@ namespace storm { |
|
|
|
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
|
|
|
|
// (5) calculate vectors and maxNorm
|
|
|
|
for (uint64_t i = 0; i < numberOfStates; i++) { |
|
|
@ -608,7 +610,6 @@ namespace storm { |
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|