@ -292,7 +292,7 @@ namespace storm { 
		
	
		
			
				            // TODO: fix min strategies to take the max strategies if possible.
             // TODO: fix min strategies to take the max strategies if possible.
  
		
	
		
			
				                         
		
	
		
			
				            // Build the fragment of transitions that is reachable by both the min and the max strategies.
             // Build the fragment of transitions that is reachable by both the min and the max strategies.
  
		
	
		
			
				            storm : : dd : : Bdd < Type >  reachableTransitions  =  transitionMatrixBdd  & &  minPlayer1Strategy  & &  minPlayer2Strategy  & &  maxPlayer1 Strategy& &  maxPlayer2Strategy ;  
		
	
		
			
				            storm : : dd : : Bdd < Type >  reachableTransitions  =  transitionMatrixBdd  & &  ( minPlayer1Strategy  | |  maxPlayer1Strategy )  & &  minPlayer2 Strategy& &  maxPlayer2Strategy ;  
		
	
		
			
				            reachableTransitions  =  reachableTransitions . existsAbstract ( game . getNondeterminismVariables ( ) ) ;             reachableTransitions  =  reachableTransitions . existsAbstract ( game . getNondeterminismVariables ( ) ) ;  
		
	
		
			
				            storm : : dd : : Bdd < Type >  pivotStates  =  storm : : utility : : dd : : computeReachableStates ( game . getInitialStates ( ) ,  reachableTransitions ,  game . getRowVariables ( ) ,  game . getColumnVariables ( ) ) ;             storm : : dd : : Bdd < Type >  pivotStates  =  storm : : utility : : dd : : computeReachableStates ( game . getInitialStates ( ) ,  reachableTransitions ,  game . getRowVariables ( ) ,  game . getColumnVariables ( ) ) ;  
		
	
		
			
				                         
		
	
	
		
			
				
					
						
							 
					
					
						
							 
					
					
				 
				@ -480,9 +480,9 @@ namespace storm { 
		
	
		
			
				                if  ( result )  {                 if  ( result )  {  
		
	
		
			
				                    return  result ;                     return  result ;  
		
	
		
			
				                }                 }  
		
	
		
			
				                if  ( iterations  = =  18 )  {  
		
	
		
			
				                /*if (iterations == 18) {
  
		
	
		
			
				                    exit ( - 1 ) ;                     exit ( - 1 ) ;  
		
	
		
			
				                }  
		
	
		
			
				                } */  
		
	
		
			
				                prob01 . max  =  computeProb01States ( player1Direction ,  storm : : OptimizationDirection : : Maximize ,  game ,  transitionMatrixBdd ,  game . getStates ( constraintExpression ) ,  targetStates ) ;                 prob01 . max  =  computeProb01States ( player1Direction ,  storm : : OptimizationDirection : : Maximize ,  game ,  transitionMatrixBdd ,  game . getStates ( constraintExpression ) ,  targetStates ) ;  
		
	
		
			
				                result  =  checkForResultAfterQualitativeCheck < Type ,  ValueType > ( checkTask ,  storm : : OptimizationDirection : : Maximize ,  game . getInitialStates ( ) ,  prob01 . max . first . getPlayer1States ( ) ,  prob01 . max . second . getPlayer1States ( ) ) ;                 result  =  checkForResultAfterQualitativeCheck < Type ,  ValueType > ( checkTask ,  storm : : OptimizationDirection : : Maximize ,  game . getInitialStates ( ) ,  prob01 . max . first . getPlayer1States ( ) ,  prob01 . max . second . getPlayer1States ( ) ) ;  
		
	
		
			
				                if  ( result )  {                 if  ( result )  {  
		
	
	
		
			
				
					
						
							 
					
					
						
							 
					
					
				 
				@ -596,7 +596,7 @@ namespace storm { 
		
	
		
			
				                                         
		
	
		
			
									// 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.
 					// 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.
 					// Get all relevant strategies.
  
		
	
		
			
									storm : : dd : : Add < Type ,  ValueType >  matrix  =  game . getTransitionMatrix ( ) ;  
		
	
		
			
									/*storm::dd::Add<Type, ValueType> matrix = game.getTransitionMatrix();
  
		
	
		
			
														 
		
	
		
			
									storm : : dd : : Add < Type ,  ValueType >  minResultTmp  =  minResult . swapVariables ( game . getRowColumnMetaVariablePairs ( ) ) ; 					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 >  minValuesForPlayer1UnderMinP1Strategy  =  ( matrix  *  minMaybeStateResult . player1Strategy . template  toAdd < ValueType > ( )  *  minMaybeStateResult . player2Strategy . template  toAdd < ValueType > ( )  *  minResultTmp ) . sumAbstract ( game . getColumnVariables ( ) ) . sumAbstract ( game . getPlayer2Variables ( ) ) . sumAbstract ( game . getPlayer1Variables ( ) ) ;  
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -609,7 +609,7 @@ namespace storm { 
		
	
		
			
									// This BDD has a 1 for every state (s) that can switch the strategy.
 					// This BDD has a 1 for every state (s) that can switch the strategy.
  
		
	
		
			
									storm : : dd : : Bdd < Type >  minIsGreaterOrEqual  =  minValuesForPlayer1UnderMinP1Strategy . greaterOrEqual ( minValuesForPlayer1UnderMaxP1Strategy ) ; 					storm : : dd : : Bdd < Type >  minIsGreaterOrEqual  =  minValuesForPlayer1UnderMinP1Strategy . greaterOrEqual ( minValuesForPlayer1UnderMaxP1Strategy ) ;  
		
	
		
			
														 
		
	
		
			
									minMaybeStateResult . player1Strategy  =  minIsGreaterOrEqual . ite ( maxMaybeStateResult . player1Strategy ,  minMaybeStateResult . player1Strategy ) ;  
		
	
		
			
									minMaybeStateResult . player1Strategy  =  minIsGreaterOrEqual . ite ( maxMaybeStateResult . player1Strategy ,  minMaybeStateResult . player1Strategy ) ; */  
		
	
		
			
														 
		
	
		
			
				                    // Start by extending the quantitative strategies by the qualitative ones.
                     // Start by extending the quantitative strategies by the qualitative ones.
  
		
	
		
			
				                    //minMaybeStateResult.player1Strategy |= prob01.min.first.getPlayer1Strategy() || prob01.min.second.getPlayer1Strategy();
                     //minMaybeStateResult.player1Strategy |= prob01.min.first.getPlayer1Strategy() || prob01.min.second.getPlayer1Strategy();
  
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -631,10 +631,10 @@ namespace storm { 
		
	
		
			
				                    STORM_LOG_ASSERT ( tmp . isZero ( ) ,  " wth2? " ) ;                     STORM_LOG_ASSERT ( tmp . isZero ( ) ,  " wth2? " ) ;  
		
	
		
			
				                    tmp  =  prob01 . min . second . getPlayer2Strategy ( ) . existsAbstract ( game . getPlayer2Variables ( ) )  & &  minMaybeStateResult . player2Strategy ;                     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 ( ) ;  
		
	
		
			
				                    //(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. " ) ;