STORM_LOG_DEBUG("Obtained quantitative bounds ["<<minResult.initialStateValue<<", "<<maxResult.initialStateValue<<"] on the actual value for the initial states in "<<std::chrono::duration_cast<std::chrono::milliseconds>(quantitativeEnd-quantitativeStart).count()<<"ms.");
STORM_LOG_DEBUG("Obtained quantitative bounds ["<<quantitativeResult.min.initialStateValue<<", "<<quantitativeResult.max.initialStateValue<<"] on the actual value for the initial states in "<<std::chrono::duration_cast<std::chrono::milliseconds>(quantitativeEnd-quantitativeStart).count()<<"ms.");
// (9) Check whether the lower and upper bounds are close enough to terminate with an answer.
// (9) Check whether the lower and upper bounds are close enough to terminate with an answer.
// Make sure that all strategies are still valid strategies.
// Make sure that all strategies are still valid strategies.
STORM_LOG_ASSERT(minResult.player1Strategy.templatetoAdd<ValueType>().sumAbstract(game.getPlayer1Variables()).getMax()<=1,"Player 1 strategy for min is illegal.");
STORM_LOG_ASSERT(maxResult.player1Strategy.templatetoAdd<ValueType>().sumAbstract(game.getPlayer1Variables()).getMax()<=1,"Player 1 strategy for max is illegal.");
STORM_LOG_ASSERT(minResult.player2Strategy.templatetoAdd<ValueType>().sumAbstract(game.getPlayer2Variables()).getMax()<=1,"Player 2 strategy for min is illegal.");
STORM_LOG_ASSERT(maxResult.player2Strategy.templatetoAdd<ValueType>().sumAbstract(game.getPlayer2Variables()).getMax()<=1,"Player 2 strategy for max is illegal.");
STORM_LOG_ASSERT(quantitativeResult.min.player1Strategy.templatetoAdd<ValueType>().sumAbstract(game.getPlayer1Variables()).getMax()<=1,"Player 1 strategy for min is illegal.");
STORM_LOG_ASSERT(quantitativeResult.max.player1Strategy.templatetoAdd<ValueType>().sumAbstract(game.getPlayer1Variables()).getMax()<=1,"Player 1 strategy for max is illegal.");
STORM_LOG_ASSERT(quantitativeResult.min.player2Strategy.templatetoAdd<ValueType>().sumAbstract(game.getPlayer2Variables()).getMax()<=1,"Player 2 strategy for min is illegal.");
STORM_LOG_ASSERT(quantitativeResult.max.player2Strategy.templatetoAdd<ValueType>().sumAbstract(game.getPlayer2Variables()).getMax()<=1,"Player 2 strategy for max is illegal.");
// (10) If we arrived at this point, it means that we have all qualitative and quantitative
// (10) If we arrived at this point, it means that we have all qualitative and quantitative
// information about the game, but we could not yet answer the query. In this case, we need to refine.
// information about the game, but we could not yet answer the query. In this case, we need to refine.
STORM_LOG_DEBUG("Iteration "<<iterations<<" took "<<std::chrono::duration_cast<std::chrono::milliseconds>(iterationEnd-iterationStart).count()<<"ms.");
STORM_LOG_DEBUG("Iteration "<<iterations<<" took "<<std::chrono::duration_cast<std::chrono::milliseconds>(iterationEnd-iterationStart).count()<<"ms.");