@ -19,6 +19,7 @@
# include "storm/solver/MinMaxLinearEquationSolver.h"
# include "storm/exceptions/InvalidPropertyException.h"
# include "storm/exceptions/UncheckedRequirementException.h"
namespace storm {
namespace modelchecker {
@ -77,7 +78,12 @@ namespace storm {
// Translate the symbolic matrix/vector to their explicit representations and solve the equation system.
std : : pair < storm : : storage : : SparseMatrix < ValueType > , std : : vector < ValueType > > explicitRepresentation = submatrix . toMatrixVector ( subvector , std : : move ( rowGroupSizes ) , model . getNondeterminismVariables ( ) , odd , odd ) ;
// Check for requirements of the solver.
std : : vector < storm : : solver : : MinMaxLinearEquationSolverRequirement > requirements = linearEquationSolverFactory . getRequirements ( ) ;
STORM_LOG_THROW ( requirements . empty ( ) , storm : : exceptions : : UncheckedRequirementException , " Cannot establish requirements for solver. " ) ;
std : : unique_ptr < storm : : solver : : MinMaxLinearEquationSolver < ValueType > > solver = linearEquationSolverFactory . create ( std : : move ( explicitRepresentation . first ) ) ;
solver - > setRequirementsChecked ( ) ;
solver - > solveEquations ( dir , x , explicitRepresentation . second ) ;
// Return a hybrid check result that stores the numerical values explicitly.
@ -141,6 +147,10 @@ namespace storm {
// Translate the symbolic matrix/vector to their explicit representations.
std : : pair < storm : : storage : : SparseMatrix < ValueType > , std : : vector < ValueType > > explicitRepresentation = submatrix . toMatrixVector ( subvector , std : : move ( rowGroupSizes ) , model . getNondeterminismVariables ( ) , odd , odd ) ;
// Check for requirements of the solver.
std : : vector < storm : : solver : : MinMaxLinearEquationSolverRequirement > requirements = linearEquationSolverFactory . getRequirements ( ) ;
STORM_LOG_THROW ( requirements . empty ( ) , storm : : exceptions : : UncheckedRequirementException , " Cannot establish requirements for solver. " ) ;
std : : unique_ptr < storm : : solver : : MinMaxLinearEquationSolver < ValueType > > solver = linearEquationSolverFactory . create ( std : : move ( explicitRepresentation . first ) ) ;
solver - > repeatedMultiply ( dir , x , & explicitRepresentation . second , stepBound ) ;
@ -267,8 +277,13 @@ namespace storm {
// Translate the symbolic matrix/vector to their explicit representations.
std : : pair < storm : : storage : : SparseMatrix < ValueType > , std : : vector < ValueType > > explicitRepresentation = submatrix . toMatrixVector ( subvector , std : : move ( rowGroupSizes ) , model . getNondeterminismVariables ( ) , odd , odd ) ;
// Check for requirements of the solver.
std : : vector < storm : : solver : : MinMaxLinearEquationSolverRequirement > requirements = linearEquationSolverFactory . getRequirements ( ) ;
STORM_LOG_THROW ( requirements . empty ( ) , storm : : exceptions : : UncheckedRequirementException , " Cannot establish requirements for solver. " ) ;
// Now solve the resulting equation system.
std : : unique_ptr < storm : : solver : : MinMaxLinearEquationSolver < ValueType > > solver = linearEquationSolverFactory . create ( std : : move ( explicitRepresentation . first ) ) ;
solver - > setRequirementsChecked ( ) ;
solver - > solveEquations ( dir , x , explicitRepresentation . second ) ;
// Return a hybrid check result that stores the numerical values explicitly.