@ -103,7 +103,7 @@ namespace storm {
* with precision parameters as given by the environment env .
* with precision parameters as given by the environment env .
*/
*/
template < typename ValueType , typename ValueIterationCallback , typename SingleIterationCallback >
template < typename ValueType , typename ValueIterationCallback , typename SingleIterationCallback >
std : : pair < SolverStatus , uint64_t > solveEquationsOptimisticValueIteration ( Environment const & env , std : : vector < ValueType > * lowerX , std : : vector < ValueType > * upperX , std : : vector < ValueType > * auxVector , ValueIterationCallback const & valueIterationCallback , SingleIterationCallback const & singleIterationCallback , boost : : optional < storm : : storage : : BitVector > relevantValues = boost : : none ) {
std : : pair < SolverStatus , uint64_t > solveEquationsOptimisticValueIteration ( Environment const & env , std : : vector < ValueType > * lowerX , std : : vector < ValueType > * upperX , std : : vector < ValueType > * auxVector , ValueIterationCallback const & valueIterationCallback , SingleIterationCallback const & singleIterationCallback , bool relative , ValueType precision , uint64_t maxOverallIterations , boost : : optional < storm : : storage : : BitVector > relevantValues = boost : : none ) {
STORM_LOG_ASSERT ( lowerX - > size ( ) = = upperX - > size ( ) , " Dimension missmatch. " ) ;
STORM_LOG_ASSERT ( lowerX - > size ( ) = = upperX - > size ( ) , " Dimension missmatch. " ) ;
STORM_LOG_ASSERT ( lowerX - > size ( ) = = auxVector - > size ( ) , " Dimension missmatch. " ) ;
STORM_LOG_ASSERT ( lowerX - > size ( ) = = auxVector - > size ( ) , " Dimension missmatch. " ) ;
@ -120,18 +120,12 @@ namespace storm {
/ / Get some parameters for the algorithm
/ / Get some parameters for the algorithm
/ / 2
/ / 2
ValueType two = storm : : utility : : convertNumber < ValueType > ( 2.0 ) ;
ValueType two = storm : : utility : : convertNumber < ValueType > ( 2.0 ) ;
/ / Relative errors
bool relative = env . solver ( ) . minMax ( ) . getRelativeTerminationCriterion ( ) ;
/ / Use no termination guaranteed upper bound iteration method
/ / Use no termination guaranteed upper bound iteration method
bool noTerminationGuarantee = env . solver ( ) . ovi ( ) . useNoTerminationGuaranteeMinimumMethod ( ) ;
bool noTerminationGuarantee = env . solver ( ) . ovi ( ) . useNoTerminationGuaranteeMinimumMethod ( ) ;
/ / Goal precision
ValueType precision = storm : : utility : : convertNumber < ValueType > ( env . solver ( ) . minMax ( ) . getPrecision ( ) ) ;
/ / Desired max difference between upperX and lowerX
/ / Desired max difference between upperX and lowerX
ValueType doublePrecision = precision * two ;
ValueType doublePrecision = precision * two ;
/ / Upper bound only iterations
/ / Upper bound only iterations
uint64_t upperBoundOnlyIterations = env . solver ( ) . ovi ( ) . getUpperBoundOnlyIterations ( ) ;
uint64_t upperBoundOnlyIterations = env . solver ( ) . ovi ( ) . getUpperBoundOnlyIterations ( ) ;
/ / Maximum number of iterations done overall
uint64_t maxOverallIterations = env . solver ( ) . minMax ( ) . getMaximalNumberOfIterations ( ) ;
ValueType relativeBoundGuessingScaler = ( storm : : utility : : one < ValueType > ( ) + storm : : utility : : convertNumber < ValueType > ( env . solver ( ) . ovi ( ) . getUpperBoundGuessingFactor ( ) ) * precision ) ;
ValueType relativeBoundGuessingScaler = ( storm : : utility : : one < ValueType > ( ) + storm : : utility : : convertNumber < ValueType > ( env . solver ( ) . ovi ( ) . getUpperBoundGuessingFactor ( ) ) * precision ) ;
/ / Initial precision for the value iteration calls
/ / Initial precision for the value iteration calls
ValueType iterationPrecision = precision ;
ValueType iterationPrecision = precision ;