@ -456,10 +456,14 @@ namespace storm { 
		
	
		
			
				                return  upperValueBounds [ getCurrentMdpState ( ) ] ;                 return  upperValueBounds [ getCurrentMdpState ( ) ] ;  
		
	
		
			
				            }             }  
		
	
		
			
				
 
		
	
		
			
				            / / /  This  requires  that  we  either  over - approximate  the  scheduler  behavior  in  this  direction  ( e . g .  grid  approximation  for  minimizing  properties )  
		
	
		
			
				            / / /  Or  that  the  pomdpLowerValueBounds  are  based  on  a  memoryless  scheduler .  Otherwise ,  such  a  triangulation  would  not  be  valid .  
		
	
		
			
				            ValueType  computeLowerValueBoundAtBelief ( BeliefId  const &  beliefId )  const  {             ValueType  computeLowerValueBoundAtBelief ( BeliefId  const &  beliefId )  const  {  
		
	
		
			
				                return  beliefManager - > getWeightedSum ( beliefId ,  pomdpLowerValueBounds ) ;                 return  beliefManager - > getWeightedSum ( beliefId ,  pomdpLowerValueBounds ) ;  
		
	
		
			
				            }             }  
		
	
		
			
				   
		
	
		
			
				            / / /  This  requires  that  we  either  over - approximate  the  scheduler  behavior  in  this  direction  ( e . g .  grid  approximation  for  maximizing  properties )  
		
	
		
			
				            / / /  Or  that  the  pomdpUpperValueBounds  are  based  on  a  memoryless  scheduler .  Otherwise ,  such  a  triangulation  would  not  be  valid .  
		
	
		
			
				            ValueType  computeUpperValueBoundAtBelief ( BeliefId  const &  beliefId )  const  {             ValueType  computeUpperValueBoundAtBelief ( BeliefId  const &  beliefId )  const  {  
		
	
		
			
				                 return  beliefManager - > getWeightedSum ( beliefId ,  pomdpUpperValueBounds ) ;                  return  beliefManager - > getWeightedSum ( beliefId ,  pomdpUpperValueBounds ) ;  
		
	
		
			
				            }             }  
		
	
	
		
			
				
					
						
							 
					
					
						
							 
					
					
				 
				@ -507,7 +511,7 @@ namespace storm { 
		
	
		
			
				                    / /  Intentionally  left  empty .                     / /  Intentionally  left  empty .  
		
	
		
			
				                }                 }  
		
	
		
			
				                                 
		
	
		
			
				                void  join ( SuccessorObservationInformation  other )  {  
		
	
		
			
				                void  join ( SuccessorObservationInformation  other )  {  / / /  Does  not  join  support  ( for  performance  reasons )   
		
	
		
			
				                    observationProbability  + =  other . observationProbability ;                     observationProbability  + =  other . observationProbability ;  
		
	
		
			
				                    maxProbabilityToSuccessorWithObs  =  std : : max ( maxProbabilityToSuccessorWithObs ,  other . maxProbabilityToSuccessorWithObs ) ;                     maxProbabilityToSuccessorWithObs  =  std : : max ( maxProbabilityToSuccessorWithObs ,  other . maxProbabilityToSuccessorWithObs ) ;  
		
	
		
			
				                    successorWithObsCount  + =  other . successorWithObsCount ;                     successorWithObsCount  + =  other . successorWithObsCount ;  
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -515,17 +519,19 @@ namespace storm { 
		
	
		
			
				                                 
		
	
		
			
				                ValueType  observationProbability ;  / / /  The  probability  we  move  to  the  corresponding  observation .                 ValueType  observationProbability ;  / / /  The  probability  we  move  to  the  corresponding  observation .  
		
	
		
			
				                ValueType  maxProbabilityToSuccessorWithObs ;  / / /  The  maximal  probability  to  move  to  a  successor  with  the  corresponding  observation .                 ValueType  maxProbabilityToSuccessorWithObs ;  / / /  The  maximal  probability  to  move  to  a  successor  with  the  corresponding  observation .  
		
	
		
			
				                uint64_t  successorWithObsCount ;  / / /  The  number  of  successors  with  this  observation  
		
	
		
			
				                uint64_t  successorWithObsCount ;  / / /  The  number  of  successor  beliefstates  with  this  observation  
		
	
		
			
				                typename  BeliefManagerType : : BeliefSupportType  support ;  
		
	
		
			
				            } ;             } ;  
		
	
		
			
				                         
		
	
		
			
				            void  gatherSuccessorObservationInformationAtCurrentState ( uint64_t  localActionIndex ,  std : : map < uint32_t ,  SuccessorObservationInformation >  gatheredSuccessorObservations )  {  
		
	
		
			
				            void  gatherSuccessorObservationInformationAtCurrentState ( uint64_t  localActionIndex ,  std : : map < uint32_t ,  SuccessorObservationInformation > & gatheredSuccessorObservations )  {  
		
	
		
			
				                STORM_LOG_ASSERT ( status  = =  Status : : Exploring ,  " Method call is invalid in current status. " ) ;                 STORM_LOG_ASSERT ( status  = =  Status : : Exploring ,  " Method call is invalid in current status. " ) ;  
		
	
		
			
				                STORM_LOG_ASSERT ( currentStateHasOldBehavior ( ) ,  " Method call is invalid since the current state has no old behavior " ) ;                 STORM_LOG_ASSERT ( currentStateHasOldBehavior ( ) ,  " Method call is invalid since the current state has no old behavior " ) ;  
		
	
		
			
				                uint64_t  mdpChoice  =  getStartOfCurrentRowGroup ( )  +  localActionIndex ;                 uint64_t  mdpChoice  =  getStartOfCurrentRowGroup ( )  +  localActionIndex ;  
		
	
		
			
				                gatherSuccessorObservationInformationAtMdpChoice ( mdpChoice ,  gatheredSuccessorObservations ) ;                 gatherSuccessorObservationInformationAtMdpChoice ( mdpChoice ,  gatheredSuccessorObservations ) ;  
		
	
		
			
				                 
		
	
		
			
				            }             }  
		
	
		
			
				                         
		
	
		
			
				            void  gatherSuccessorObservationInformationAtMdpChoice ( uint64_t  mdpChoice ,  std : : map < uint32_t ,  SuccessorObservationInformation >  gatheredSuccessorObservations )  {  
		
	
		
			
				            void  gatherSuccessorObservationInformationAtMdpChoice ( uint64_t  mdpChoice ,  std : : map < uint32_t ,  SuccessorObservationInformation > & gatheredSuccessorObservations )  {  
		
	
		
			
				                STORM_LOG_ASSERT ( exploredMdp ,  " Method call is invalid if no MDP has been explored before " ) ;                 STORM_LOG_ASSERT ( exploredMdp ,  " Method call is invalid if no MDP has been explored before " ) ;  
		
	
		
			
				                for  ( auto  const &  entry  :  exploredMdp - > getTransitionMatrix ( ) . getRow ( mdpChoice ) )  {                 for  ( auto  const &  entry  :  exploredMdp - > getTransitionMatrix ( ) . getRow ( mdpChoice ) )  {  
		
	
		
			
				                    auto  const &  beliefId  =  getBeliefId ( entry . getColumn ( ) ) ;                     auto  const &  beliefId  =  getBeliefId ( entry . getColumn ( ) ) ;  
		
	
	
		
			
				
					
					
					
						
							 
					
				 
				@ -537,6 +543,7 @@ namespace storm { 
		
	
		
			
				                            / /  There  already  is  an  entry  for  this  observation ,  so  join  the  two  informations                             / /  There  already  is  an  entry  for  this  observation ,  so  join  the  two  informations  
		
	
		
			
				                            obsInsertion . first - > second . join ( info ) ;                             obsInsertion . first - > second . join ( info ) ;  
		
	
		
			
				                        }                         }  
		
	
		
			
				                        beliefManager - > joinSupport ( beliefId ,  obsInsertion . first - > second . support ) ;  
		
	
		
			
				                    }                     }  
		
	
		
			
				                }                 }  
		
	
		
			
				            }             }