@ -595,48 +595,6 @@ namespace storm { 
		
	
		
			
				                    // If we arrived at this point, it means that we have all qualitative and quantitative information
                     // 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.
                     // about the game, but we could not yet answer the query. In this case, we need to refine.
  
		
	
		
			
				                                         
		
	
		
			
									// Redirect all player 1 choices of the min strategy to that of the max strategy if this leads to a player 2 state that has the same prob.
  
		
	
		
			
									// Get all relevant strategies.
  
		
	
		
			
									/*storm::dd::Add<Type, ValueType> matrix = game.getTransitionMatrix();
  
		
	
		
			
									 
		
	
		
			
									storm : : dd : : Add < Type ,  ValueType >  minResultTmp  =  minResult . swapVariables ( game . getRowColumnMetaVariablePairs ( ) ) ;  
		
	
		
			
									storm : : dd : : Add < Type ,  ValueType >  minValuesForPlayer1UnderMinP1Strategy  =  ( matrix  *  minMaybeStateResult . player1Strategy . template  toAdd < ValueType > ( )  *  minMaybeStateResult . player2Strategy . template  toAdd < ValueType > ( )  *  minResultTmp ) . sumAbstract ( game . getColumnVariables ( ) ) . sumAbstract ( game . getPlayer2Variables ( ) ) . sumAbstract ( game . getPlayer1Variables ( ) ) ;  
		
	
		
			
									storm : : dd : : Add < Type ,  ValueType >  minValuesForPlayer1UnderMaxP1P2Strategy  =  ( matrix  *  maxMaybeStateResult . player1Strategy . template  toAdd < ValueType > ( )  *  maxMaybeStateResult . player2Strategy . template  toAdd < ValueType > ( )  *  minResultTmp ) . sumAbstract ( game . getColumnVariables ( ) ) . sumAbstract ( game . getPlayer2Variables ( ) ) . sumAbstract ( game . getPlayer1Variables ( ) ) ;  
		
	
		
			
									storm : : dd : : Add < Type ,  ValueType >  minValuesForPlayer1UnderMaxP1Strategy  =  ( matrix  *  maxMaybeStateResult . player1Strategy . template  toAdd < ValueType > ( )  *  minMaybeStateResult . player2Strategy . template  toAdd < ValueType > ( )  *  minResultTmp ) . sumAbstract ( game . getColumnVariables ( ) ) . sumAbstract ( game . getPlayer2Variables ( ) ) . sumAbstract ( game . getPlayer1Variables ( ) ) ;  
		
	
		
			
									 
		
	
		
			
									minValuesForPlayer1UnderMinP1Strategy  =  prob01 . min . first . getPlayer1States ( ) . ite ( game . getManager ( ) . template  getAddZero < ValueType > ( ) ,  prob01 . min . second . getPlayer1States ( ) . ite ( game . getManager ( ) . template  getAddOne < ValueType > ( ) ,  minValuesForPlayer1UnderMinP1Strategy ) ) ;  
		
	
		
			
									minValuesForPlayer1UnderMaxP1Strategy  =  prob01 . min . first . getPlayer1States ( ) . ite ( game . getManager ( ) . template  getAddZero < ValueType > ( ) ,  prob01 . min . second . getPlayer1States ( ) . ite ( game . getManager ( ) . template  getAddOne < ValueType > ( ) ,  minValuesForPlayer1UnderMaxP1Strategy ) ) ;  
		
	
		
			
				
 
		
	
		
			
									// This BDD has a 1 for every state (s) that can switch the strategy.
  
		
	
		
			
									storm : : dd : : Bdd < Type >  minIsGreaterOrEqual  =  minValuesForPlayer1UnderMinP1Strategy . greaterOrEqual ( minValuesForPlayer1UnderMaxP1Strategy ) ;  
		
	
		
			
									 
		
	
		
			
									minMaybeStateResult . player1Strategy  =  minIsGreaterOrEqual . ite ( maxMaybeStateResult . player1Strategy ,  minMaybeStateResult . player1Strategy ) ; */  
		
	
		
			
									 
		
	
		
			
				                    // 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();
  
		
	
		
			
				                    //maxMaybeStateResult.player2Strategy |= prob01.max.first.getPlayer2Strategy() || prob01.max.second.getPlayer2Strategy();
  
		
	
		
			
				                     
		
	
		
			
				                    // Make sure that all strategies are still valid strategies.
                     // Make sure that all strategies are still valid strategies.
  
		
	
		
			
				                    STORM_LOG_ASSERT ( minMaybeStateResult . player1Strategy . template  toAdd < ValueType > ( ) . sumAbstract ( game . getPlayer1Variables ( ) ) . getMax ( )  < =  1 ,  " Player 1 strategy for min is illegal. " ) ;                     STORM_LOG_ASSERT ( minMaybeStateResult . player1Strategy . template  toAdd < ValueType > ( ) . sumAbstract ( game . getPlayer1Variables ( ) ) . getMax ( )  < =  1 ,  " Player 1 strategy for min is illegal. " ) ;  
		
	
		
			
				                    STORM_LOG_ASSERT ( maxMaybeStateResult . player1Strategy . template  toAdd < ValueType > ( ) . sumAbstract ( game . getPlayer1Variables ( ) ) . getMax ( )  < =  1 ,  " Player 1 strategy for max is illegal. " ) ;                     STORM_LOG_ASSERT ( maxMaybeStateResult . player1Strategy . template  toAdd < ValueType > ( ) . sumAbstract ( game . getPlayer1Variables ( ) ) . getMax ( )  < =  1 ,  " Player 1 strategy for max is illegal. " ) ;