@ -137,6 +137,84 @@ namespace storm { 
			
		
	
		
			
				
					            out  < <  " ___________________________________________________________________ "  < <  std : : endl ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					       
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template  < typename  ValueType >  
			
		
	
		
			
				
					        void  PreScheduler < ValueType > : : printJsonToStream ( std : : ostream &  out ,  std : : shared_ptr < storm : : models : : sparse : : Model < ValueType > >  model ,  bool  skipUniqueChoices )  const  {  
			
		
	
		
			
				
					            STORM_LOG_THROW ( model  = =  nullptr  | |  model - > getNumberOfStates ( )  = =  schedulerChoices . front ( ) . size ( ) ,  storm : : exceptions : : InvalidOperationException ,  " The given model is not compatible with this scheduler. " ) ;  
			
		
	
		
			
				
					            STORM_LOG_WARN_COND ( ! ( skipUniqueChoices  & &  model  = =  nullptr ) ,  " Can not skip unique choices if the model is not given. " ) ;  
			
		
	
		
			
				
					            storm : : json < storm : : RationalNumber >  output ;  
			
		
	
		
			
				
					            for  ( uint64_t  state  =  0 ;  state  <  schedulerChoices . front ( ) . size ( ) ;  + + state )  {  
			
		
	
		
			
				
					                // Check whether the state is skipped
  
			
		
	
		
			
				
					                if  ( skipUniqueChoices  & &  model  ! =  nullptr  & &  model - > getTransitionMatrix ( ) . getRowGroupSize ( state )  = =  1 )  {  
			
		
	
		
			
				
					                    continue ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                for  ( uint_fast64_t  memoryState  =  0 ;  memoryState  <  getNumberOfMemoryStates ( ) ;  + + memoryState )  {  
			
		
	
		
			
				
					                    storm : : json < storm : : RationalNumber >  stateChoicesJson ;  
			
		
	
		
			
				
					                    if  ( model  & &  model - > hasStateValuations ( ) )  {  
			
		
	
		
			
				
					                        stateChoicesJson [ " s " ]  =  model - > getStateValuations ( ) . template  toJson < storm : : RationalNumber > ( state ) ;  
			
		
	
		
			
				
					                    }  else  {  
			
		
	
		
			
				
					                        stateChoicesJson [ " s " ]  =  state ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    if  ( ! isMemorylessScheduler ( ) )  {  
			
		
	
		
			
				
					                        stateChoicesJson [ " m " ]  =  memoryState ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    auto  const  & choice  =  schedulerChoices [ memoryState ] [ state ] ;  
			
		
	
		
			
				
					                    storm : : json < storm : : RationalNumber >  choicesJson ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    for  ( auto  const  & choiceProbPair  :  choice . getChoiceMap ( ) )  {  
			
		
	
		
			
				
					                        uint64_t  globalChoiceIndex  =  model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) [ state ]  ; //+ choiceProbPair.first;
  
			
		
	
		
			
				
					                        storm : : json < storm : : RationalNumber >  choiceJson ;  
			
		
	
		
			
				
					                        if  ( model  & &  model - > hasChoiceOrigins ( )  & &  
			
		
	
		
			
				
					                            model - > getChoiceOrigins ( ) - > getIdentifier ( globalChoiceIndex )  ! =  
			
		
	
		
			
				
					                            model - > getChoiceOrigins ( ) - > getIdentifierForChoicesWithNoOrigin ( ) )  {  
			
		
	
		
			
				
					                            choiceJson [ " origin " ]  =  model - > getChoiceOrigins ( ) - > getChoiceAsJson ( globalChoiceIndex ) ;  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                        if  ( model  & &  model - > hasChoiceLabeling ( ) )  {  
			
		
	
		
			
				
					                            auto  choiceLabels  =  model - > getChoiceLabeling ( ) . getLabelsOfChoice ( globalChoiceIndex ) ;  
			
		
	
		
			
				
					                            choiceJson [ " labels " ]  =  std : : vector < std : : string > ( choiceLabels . begin ( ) ,  
			
		
	
		
			
				
					                                                                            choiceLabels . end ( ) ) ;  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                        choiceJson [ " index " ]  =  globalChoiceIndex ;  
			
		
	
		
			
				
					                        choiceJson [ " prob " ]  =  storm : : utility : : convertNumber < storm : : RationalNumber > (  
			
		
	
		
			
				
					                                std : : get < 1 > ( choiceProbPair ) ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                        // Memory updates
  
			
		
	
		
			
				
					                        if ( ! isMemorylessScheduler ( ) )  {  
			
		
	
		
			
				
					                            choiceJson [ " memory-updates " ]  =  std : : vector < storm : : json < storm : : RationalNumber > > ( ) ;  
			
		
	
		
			
				
					                            uint64_t  row  =  model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) [ state ] ;  //+ std::get<0>(choiceProbPair);
  
			
		
	
		
			
				
					                            for  ( auto  entryIt  =  model - > getTransitionMatrix ( ) . getRow ( row ) . begin ( ) ;  entryIt  <  model - > getTransitionMatrix ( ) . getRow ( row ) . end ( ) ;  + + entryIt )  {  
			
		
	
		
			
				
					                                storm : : json < storm : : RationalNumber >  updateJson ;  
			
		
	
		
			
				
					                                // next model state
  
			
		
	
		
			
				
					                                if  ( model  & &  model - > hasStateValuations ( ) )  {  
			
		
	
		
			
				
					                                    updateJson [ " s' " ]  =  model - > getStateValuations ( ) . template  toJson < storm : : RationalNumber > ( entryIt - > getColumn ( ) ) ;  
			
		
	
		
			
				
					                                }  else  {  
			
		
	
		
			
				
					                                    updateJson [ " s' " ]  =  entryIt - > getColumn ( ) ;  
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                                // next memory state
  
			
		
	
		
			
				
					                                updateJson [ " m' " ]  =  this - > memoryStructure - > getSuccessorMemoryState ( memoryState ,  entryIt  -  model - > getTransitionMatrix ( ) . begin ( ) ) ;  
			
		
	
		
			
				
					                                choiceJson [ " memory-updates " ] . push_back ( std : : move ( updateJson ) ) ;  
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                        choicesJson . push_back ( std : : move ( choiceJson ) ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                    if  ( ! choicesJson . is_null ( ) )  {  
			
		
	
		
			
				
					                        stateChoicesJson [ " c " ]  =  std : : move ( choicesJson ) ;  
			
		
	
		
			
				
					                        output . push_back ( std : : move ( stateChoicesJson ) ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            out  < <  output . dump ( 4 ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template  class  PreScheduler < double > ;  
			
		
	
		
			
				
					# ifdef STORM_HAVE_CARL 
  
			
		
	
		
			
				
					        template  class  PreScheduler < storm : : RationalNumber > ;