@ -138,12 +138,26 @@ namespace storm { 
			
		
	
		
			
				
					                    STORM_LOG_THROW ( obj . formula - > hasBound ( ) ,  storm : : exceptions : : InvalidOperationException ,  " Invoked achievability query but no bound was specified for at least one objective. " ) ;  
			
		
	
		
			
				
					                    STORM_LOG_THROW ( obj . formula - > asRewardOperatorFormula ( ) . hasRewardModelName ( ) ,  storm : : exceptions : : InvalidOperationException ,  " Expected reward operator with a reward model name. Got  "  < <  * obj . formula  < <  "  instead. " ) ;  
			
		
	
		
			
				
					                    std : : vector < ValueType >  rewards  =  getActionBasedExpectedRewards ( obj . formula - > asRewardOperatorFormula ( ) . getRewardModelName ( ) ) ;  
			
		
	
		
			
				
					                    storm : : expressions : : Expression  objValue  =  zero  ;  
			
		
	
		
			
				
					                    std : : vector < storm : : expressions : : Expression >  objectiveValues  ;  
			
		
	
		
			
				
					                    for  ( uint_fast64_t  choice  =  0 ;  choice  <  rewards . size ( ) ;  + + choice )  {  
			
		
	
		
			
				
					                        if  ( ! storm : : utility : : isZero ( rewards [ choice ] ) )  {  
			
		
	
		
			
				
					                            objValue  =  objValue  +   ( this - > expressionManager - > rational ( rewards [ choice ] )  *  expectedChoiceVariables [ choice ] . getExpression ( ) ) ;  
			
		
	
		
			
				
					                            objectiveValues . push_back  ( this - > expressionManager - > rational ( rewards [ choice ] )  *  expectedChoiceVariables [ choice ] . getExpression ( ) ) ;  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                     
			
		
	
		
			
				
					                    // Get the sum of all objective values
  
			
		
	
		
			
				
					                    // As the sum can potentially have many summands, we want to make sure that the formula tree is (roughly balanced)
  
			
		
	
		
			
				
					                    auto  vIt  =  objectiveValues . begin ( ) ;  
			
		
	
		
			
				
					                    while  ( objectiveValues . size ( )  >  1 )  {  
			
		
	
		
			
				
					                        if  ( vIt  = =  objectiveValues . end ( )  | |  vIt  = =  objectiveValues . end ( )  -  1 )  {  
			
		
	
		
			
				
					                            vIt  =  objectiveValues . begin ( ) ;  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                        * vIt  =  * vIt  +  objectiveValues . back ( ) ;  
			
		
	
		
			
				
					                        objectiveValues . pop_back ( ) ;  
			
		
	
		
			
				
					                        + + vIt ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                    storm : : expressions : : Expression  objValue  =  objectiveValues . empty ( )  ?  zero  :  objectiveValues . front ( ) ;  
			
		
	
		
			
				
					                     
			
		
	
		
			
				
					                    // We need to actually evaluate the threshold as rational number. Otherwise a threshold like '<=16/9' might be considered as 1 due to integer division
  
			
		
	
		
			
				
					                    storm : : expressions : : Expression  threshold  =  this - > expressionManager - > rational ( obj . formula - > getThreshold ( ) . evaluateAsRational ( ) ) ;  
			
		
	
		
			
				
					                    switch  ( obj . formula - > getBound ( ) . comparisonType )  {