From d1cd11121a13770da22a531dc184ece9902fc636 Mon Sep 17 00:00:00 2001 From: dehnert Date: Thu, 24 Nov 2016 16:24:55 +0100 Subject: [PATCH] more refactoring --- .../abstraction/GameBasedMdpModelChecker.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/storm/modelchecker/abstraction/GameBasedMdpModelChecker.cpp b/src/storm/modelchecker/abstraction/GameBasedMdpModelChecker.cpp index f33002332..8740f4761 100644 --- a/src/storm/modelchecker/abstraction/GameBasedMdpModelChecker.cpp +++ b/src/storm/modelchecker/abstraction/GameBasedMdpModelChecker.cpp @@ -429,6 +429,7 @@ namespace storm { // (2) Prepare transition matrix BDD and target state BDD for later use. storm::dd::Bdd transitionMatrixBdd = game.getTransitionMatrix().toBdd(); + storm::dd::Bdd initialStates = game.getInitialStates(); storm::dd::Bdd constraintStates = game.getStates(constraintExpression); storm::dd::Bdd targetStates = game.getStates(targetStateExpression); if (player1Direction == storm::OptimizationDirection::Minimize) { @@ -442,7 +443,7 @@ namespace storm { // (3) compute all states with probability 0/1 wrt. to the two different player 2 goals (min/max). auto qualitativeStart = std::chrono::high_resolution_clock::now(); detail::GameProb01ResultMinMax qualitativeResult; - std::unique_ptr result = computeProb01States(checkTask, qualitativeResult, game, player1Direction, transitionMatrixBdd, game.getInitialStates(), constraintStates, targetStates); + std::unique_ptr result = computeProb01States(checkTask, qualitativeResult, game, player1Direction, transitionMatrixBdd, initialStates, constraintStates, targetStates); if (result) { return result; } @@ -454,13 +455,13 @@ namespace storm { storm::dd::Bdd maybeMax = !(qualitativeResult.prob0Max.getPlayer1States() || qualitativeResult.prob1Max.getPlayer1States()) && game.getReachableStates(); // (5) if the initial states are not maybe states, then we can refine at this point. - storm::dd::Bdd initialMaybeStates = (game.getInitialStates() && maybeMin) || (game.getInitialStates() && maybeMax); + storm::dd::Bdd initialMaybeStates = (initialStates && maybeMin) || (initialStates && maybeMax); bool qualitativeRefinement = false; if (initialMaybeStates.isZero()) { // In this case, we know the result for the initial states for both player 2 minimizing and maximizing. STORM_LOG_TRACE("No initial state is a 'maybe' state. Refining abstraction based on qualitative check."); - result = checkForResultAfterQualitativeCheck(checkTask, game.getInitialStates(), qualitativeResult); + result = checkForResultAfterQualitativeCheck(checkTask, initialStates, qualitativeResult); if (result) { return result; } else { @@ -480,7 +481,7 @@ namespace storm { // Prepare some storage that we use on-demand during the quantitative solving step. storm::dd::Add minResult = qualitativeResult.prob1Min.getPlayer1States().template toAdd(); storm::dd::Add maxResult = qualitativeResult.prob1Max.getPlayer1States().template toAdd(); - storm::dd::Add initialStatesAdd = game.getInitialStates().template toAdd(); + storm::dd::Add initialStatesAdd = initialStates.template toAdd(); storm::dd::Bdd combinedMinPlayer1QualitativeStrategies = (qualitativeResult.prob0Min.getPlayer1Strategy() || qualitativeResult.prob1Min.getPlayer1Strategy()); storm::dd::Bdd combinedMinPlayer2QualitativeStrategies = (qualitativeResult.prob0Min.getPlayer2Strategy() || qualitativeResult.prob1Min.getPlayer2Strategy()); @@ -562,7 +563,7 @@ namespace storm { // Check whether the strategies coincide over the reachable parts. storm::dd::Bdd tmp = game.getTransitionMatrix().toBdd() && (minMaybeStateResult.player1Strategy || maxMaybeStateResult.player1Strategy) && (minMaybeStateResult.player2Strategy || maxMaybeStateResult.player2Strategy); - storm::dd::Bdd commonReach = storm::utility::dd::computeReachableStates(game.getInitialStates(), tmp.existsAbstract(game.getNondeterminismVariables()), game.getRowVariables(), game.getColumnVariables()); + storm::dd::Bdd commonReach = storm::utility::dd::computeReachableStates(initialStates, tmp.existsAbstract(game.getNondeterminismVariables()), game.getRowVariables(), game.getColumnVariables()); STORM_LOG_ASSERT((commonReach && minMaybeStateResult.player1Strategy) != (commonReach && maxMaybeStateResult.player1Strategy) || (commonReach && minMaybeStateResult.player2Strategy) != (commonReach && maxMaybeStateResult.player2Strategy), "The strategies fully coincide."); refineAfterQuantitativeCheck(abstractor, game, minResult, maxResult, qualitativeResult, std::make_pair(minMaybeStateResult.player1Strategy, minMaybeStateResult.player2Strategy), std::make_pair(maxMaybeStateResult.player1Strategy, maxMaybeStateResult.player2Strategy), transitionMatrixBdd);