|  |  | @ -319,8 +319,6 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |             // Then restrict the pivot states by requiring existing and different player 2 choices.
 | 
			
		
	
		
			
				
					|  |  |  |             pivotStates &= ((minPlayer1Strategy || maxPlayer1Strategy) && constraint).existsAbstract(game.getNondeterminismVariables()); | 
			
		
	
		
			
				
					|  |  |  |              | 
			
		
	
		
			
				
					|  |  |  |             ((minPlayer1Strategy || maxPlayer1Strategy) && constraint).existsAbstract(game.getNondeterminismVariables()).template toAdd<ValueType>().exportToDot("a.dot"); | 
			
		
	
		
			
				
					|  |  |  |              | 
			
		
	
		
			
				
					|  |  |  |             STORM_LOG_ASSERT(!pivotStates.isZero(), "Unable to refine without pivot state candidates."); | 
			
		
	
		
			
				
					|  |  |  |              | 
			
		
	
		
			
				
					|  |  |  |             // Now that we have the pivot state candidates, we need to pick one.
 | 
			
		
	
	
		
			
				
					|  |  | @ -339,7 +337,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | //            
 | 
			
		
	
		
			
				
					|  |  |  | //            minResult.exportToDot("minresult.dot");
 | 
			
		
	
		
			
				
					|  |  |  | //            maxResult.exportToDot("maxresult.dot");
 | 
			
		
	
		
			
				
					|  |  |  | //            pivotState.template toAdd<ValueType>().exportToDot("pivot.dot");
 | 
			
		
	
		
			
				
					|  |  |  |             pivotState.template toAdd<ValueType>().exportToDot("pivot.dot"); | 
			
		
	
		
			
				
					|  |  |  | //            pivotStateLower.exportToDot("pivot_lower.dot");
 | 
			
		
	
		
			
				
					|  |  |  | //            pivotStateUpper.exportToDot("pivot_upper.dot");
 | 
			
		
	
		
			
				
					|  |  |  | //            pivotStateIsMinProb0.template toAdd<ValueType>().exportToDot("pivot_is_minprob0.dot");
 | 
			
		
	
	
		
			
				
					|  |  | @ -477,7 +475,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |                     targetStates |= game.getBottomStates(); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  | 				 | 
			
		
	
		
			
				
					|  |  |  |                 abstractor.exportToDot("game" + std::to_string(iterations) + ".dot", targetStates, game.getManager().getBddOne()); | 
			
		
	
		
			
				
					|  |  |  | 				abstractor.exportToDot("game" + std::to_string(iterations) + ".dot"); | 
			
		
	
		
			
				
					|  |  |  | 				 | 
			
		
	
		
			
				
					|  |  |  |                 prob01.min = computeProb01States(player1Direction, storm::OptimizationDirection::Minimize, game, transitionMatrixBdd, game.getStates(constraintExpression), targetStates); | 
			
		
	
		
			
				
					|  |  |  |                 std::unique_ptr<CheckResult> result = checkForResultAfterQualitativeCheck<Type, ValueType>(checkTask, storm::OptimizationDirection::Minimize, game.getInitialStates(), prob01.min.first.getPlayer1States(), prob01.min.second.getPlayer1States()); | 
			
		
	
	
		
			
				
					|  |  | @ -617,6 +615,23 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |                     // Start by extending the quantitative strategies by the qualitative ones.
 | 
			
		
	
		
			
				
					|  |  |  |                     //minMaybeStateResult.player1Strategy |= prob01.min.first.getPlayer1Strategy() || prob01.min.second.getPlayer1Strategy();
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                     storm::dd::Bdd<Type> tmp = (prob01.min.first.getPlayer2Strategy().existsAbstract(game.getPlayer2Variables()) && prob01.min.second.getPlayer2Strategy().existsAbstract(game.getPlayer2Variables())); | 
			
		
	
		
			
				
					|  |  |  |                     STORM_LOG_ASSERT(tmp.isZero(), "wth?"); | 
			
		
	
		
			
				
					|  |  |  |                     tmp = prob01.min.first.getPlayer2Strategy().existsAbstract(game.getPlayer2Variables()) && minMaybeStateResult.player2Strategy.existsAbstract(game.getPlayer2Variables()); | 
			
		
	
		
			
				
					|  |  |  |                     if (!tmp.isZero()) { | 
			
		
	
		
			
				
					|  |  |  |                         tmp = tmp && prob01.min.first.getPlayer2Strategy().exclusiveOr(minMaybeStateResult.player2Strategy).existsAbstract(game.getPlayer2Variables()); | 
			
		
	
		
			
				
					|  |  |  |                         (tmp && prob01.min.first.getPlayer2Strategy()).template toAdd<ValueType>().exportToDot("prob0_strat.dot"); | 
			
		
	
		
			
				
					|  |  |  |                         (tmp && minMaybeStateResult.player2Strategy).template toAdd<ValueType>().exportToDot("maybe_strat.dot"); | 
			
		
	
		
			
				
					|  |  |  |                         if (!tmp.isZero()) { | 
			
		
	
		
			
				
					|  |  |  |                             storm::dd::Add<Type, ValueType> values = (tmp.template toAdd<ValueType>() * game.getTransitionMatrix() * minResult.swapVariables(game.getRowColumnMetaVariablePairs())).sumAbstract(game.getColumnVariables()); | 
			
		
	
		
			
				
					|  |  |  |                             tmp.template toAdd<ValueType>().exportToDot("illegal.dot"); | 
			
		
	
		
			
				
					|  |  |  |                             minResult.exportToDot("vals.dot"); | 
			
		
	
		
			
				
					|  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |                         STORM_LOG_ASSERT(tmp.isZero(), "ddduuuudde?"); | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                     STORM_LOG_ASSERT(tmp.isZero(), "wth2?"); | 
			
		
	
		
			
				
					|  |  |  |                     tmp = prob01.min.second.getPlayer2Strategy().existsAbstract(game.getPlayer2Variables()) && minMaybeStateResult.player2Strategy; | 
			
		
	
		
			
				
					|  |  |  |                      | 
			
		
	
		
			
				
					|  |  |  |                     //(minMaybeStateResult.player2Strategy && (prob01.min.first.getPlayer2Strategy() || prob01.min.second.getPlayer2Strategy())).template toAdd<ValueType>().exportToDot("strat_overlap.dot");
 | 
			
		
	
		
			
				
					|  |  |  |                     //minMaybeStateResult.player2Strategy |= prob01.min.first.getPlayer2Strategy() || prob01.min.second.getPlayer2Strategy();
 | 
			
		
	
		
			
				
					|  |  |  |                     //maxMaybeStateResult.player1Strategy |= prob01.max.first.getPlayer1Strategy() || prob01.max.second.getPlayer1Strategy();
 | 
			
		
	
	
		
			
				
					|  |  | @ -631,8 +646,8 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  | 					// Check whether the strategies coincide over the reachable parts.
 | 
			
		
	
		
			
				
					|  |  |  | 					storm::dd::Bdd<Type> tmp = game.getTransitionMatrix().toBdd() && (minMaybeStateResult.player1Strategy || maxMaybeStateResult.player1Strategy) && (minMaybeStateResult.player2Strategy || maxMaybeStateResult.player2Strategy); | 
			
		
	
		
			
				
					|  |  |  | 					storm::dd::Bdd<Type> commonReach = storm::utility::dd::computeReachableStates(game.getInitialStates(), tmp.existsAbstract(game.getNondeterminismVariables()), game.getRowVariables(), game.getColumnVariables()); | 
			
		
	
		
			
				
					|  |  |  |                     std::cout << "diff one? " << ((commonReach && minMaybeStateResult.player1Strategy) != (commonReach && maxMaybeStateResult.player1Strategy)) << std::endl; | 
			
		
	
		
			
				
					|  |  |  |                     std::cout << "diff one? " << ((commonReach && minMaybeStateResult.player2Strategy) != (commonReach && maxMaybeStateResult.player2Strategy)) << std::endl; | 
			
		
	
		
			
				
					|  |  |  | 					//std::cout << "diff one? " << ((commonReach && minMaybeStateResult.player1Strategy) != (commonReach && maxMaybeStateResult.player1Strategy)) << std::endl;
 | 
			
		
	
		
			
				
					|  |  |  | 					//std::cout << "diff one? " << ((commonReach && minMaybeStateResult.player2Strategy) != (commonReach && maxMaybeStateResult.player2Strategy)) << std::endl;
 | 
			
		
	
		
			
				
					|  |  |  | 					STORM_LOG_ASSERT((commonReach && minMaybeStateResult.player1Strategy) != (commonReach && maxMaybeStateResult.player1Strategy) || (commonReach && minMaybeStateResult.player2Strategy) != (commonReach && maxMaybeStateResult.player2Strategy), "The strategies fully coincide."); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 					abstractor.exportToDot("lowerlower" + std::to_string(iterations) + ".dot", targetStates, minMaybeStateResult.player1Strategy && minMaybeStateResult.player2Strategy); | 
			
		
	
	
		
			
				
					|  |  | 
 |