@ -211,10 +211,16 @@ namespace storm {
std : : unique_ptr < MinMaxLinearEquationSolver < storm : : RationalNumber > > GeneralMinMaxLinearEquationSolverFactory < storm : : RationalNumber > : : selectSolver ( MatrixType & & matrix ) const {
std : : unique_ptr < MinMaxLinearEquationSolver < storm : : RationalNumber > > GeneralMinMaxLinearEquationSolverFactory < storm : : RationalNumber > : : selectSolver ( MatrixType & & matrix ) const {
std : : unique_ptr < MinMaxLinearEquationSolver < storm : : RationalNumber > > result ;
std : : unique_ptr < MinMaxLinearEquationSolver < storm : : RationalNumber > > result ;
auto method = this - > getMinMaxMethod ( ) ;
auto method = this - > getMinMaxMethod ( ) ;
STORM_LOG_THROW ( method = = MinMaxMethod : : ValueIteration | | method = = MinMaxMethod : : PolicyIteration | | method = = MinMaxMethod : : Acyclic , storm : : exceptions : : InvalidSettingsException , " For this data type only value iteration, policy iteration, and acyclic value iteration are available. " ) ;
IterativeMinMaxLinearEquationSolverSettings < storm : : RationalNumber > iterativeSolverSettings ;
iterativeSolverSettings . setSolutionMethod ( method ) ;
return std : : make_unique < IterativeMinMaxLinearEquationSolver < storm : : RationalNumber > > ( std : : forward < MatrixType > ( matrix ) , std : : make_unique < GeneralLinearEquationSolverFactory < storm : : RationalNumber > > ( ) , iterativeSolverSettings ) ;
if ( method = = MinMaxMethod : : ValueIteration | | method = = MinMaxMethod : : PolicyIteration | | method = = MinMaxMethod : : Acyclic ) {
IterativeMinMaxLinearEquationSolverSettings < storm : : RationalNumber > iterativeSolverSettings ;
iterativeSolverSettings . setSolutionMethod ( method ) ;
result = std : : make_unique < IterativeMinMaxLinearEquationSolver < storm : : RationalNumber > > ( std : : forward < MatrixType > ( matrix ) , std : : make_unique < GeneralLinearEquationSolverFactory < storm : : RationalNumber > > ( ) , iterativeSolverSettings ) ;
} else if ( method = = MinMaxMethod : : LinearProgramming ) {
result = std : : make_unique < LpMinMaxLinearEquationSolver < storm : : RationalNumber > > ( std : : forward < MatrixType > ( matrix ) , std : : make_unique < GeneralLinearEquationSolverFactory < storm : : RationalNumber > > ( ) , std : : make_unique < storm : : utility : : solver : : LpSolverFactory < storm : : RationalNumber > > ( ) ) ;
} else {
STORM_LOG_THROW ( false , storm : : exceptions : : InvalidSettingsException , " The selected method is not available for this data type. " ) ;
}
return result ;
}
}
# endif
# endif
template class MinMaxLinearEquationSolver < float > ;
template class MinMaxLinearEquationSolver < float > ;