@ -130,74 +130,62 @@ namespace storm { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template  < typename  ValueType >  
			
		
	
		
			
				
					        void  PostScheduler < 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);
  
			
		
	
		
			
				
					            STORM_LOG_THROW ( model  = =  nullptr  | |  model - > getNumberOfStates ( )  = =  schedulerChoiceMapping . 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  <  schedulerChoiceMapping . front ( ) . size ( ) ;  + + state )  {  
			
		
	
		
			
				
					                // Check whether the state is skipped
  
			
		
	
		
			
				
					                if  ( skipUniqueChoices  & &  model  ! =  nullptr  & &  model - > getTransitionMatrix ( ) . getRowGroupSize ( state )  = =  1 )  {  
			
		
	
		
			
				
					                    continue ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                storm : : json < storm : : RationalNumber >  stateChoicesJson ;  
			
		
	
		
			
				
					                if  ( model  & &  model - > hasStateValuations ( ) )  {  
			
		
	
		
			
				
					                    stateChoicesJson [ " s " ]  =  model - > getStateValuations ( ) . template  toJson < storm : : RationalNumber > ( state ) ;  
			
		
	
		
			
				
					                }  else  {  
			
		
	
		
			
				
					                    stateChoicesJson [ " s " ]  =  state ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                auto  const  & choice  =  schedulerChoiceMapping [ 0 ] [ state ] ;  
			
		
	
		
			
				
					                storm : : json < storm : : RationalNumber >  choicesJson ;  
			
		
	
		
			
				
					                if  ( ! choice . getChoiceMap ( ) . empty ( ) )  {  
			
		
	
		
			
				
					                    for  ( auto  const  & choiceProbPair  :  choice . getChoiceMap ( ) )  {  
			
		
	
		
			
				
					                        uint64_t  globalChoiceIndex  =  model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) [ state ]  +  std : : get < 0 > ( choiceProbPair ) ;  
			
		
	
		
			
				
					                        uint64_t  globalChoiceCorrectionIndex  =  model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) [ state ]  +  std : : get < 1 > ( choiceProbPair ) ;  
			
		
	
		
			
				
					                        storm : : json < storm : : RationalNumber >  choiceJson ;  
			
		
	
		
			
				
					                        if  ( model  & &  model - > hasChoiceOrigins ( )  & &  
			
		
	
		
			
				
					                            model - > getChoiceOrigins ( ) - > getIdentifier ( globalChoiceIndex )  ! =  
			
		
	
		
			
				
					                            model - > getChoiceOrigins ( ) - > getIdentifierForChoicesWithNoOrigin ( ) )  {  
			
		
	
		
			
				
					                            auto  choiceOriginJson  =  model - > getChoiceOrigins ( ) - > getChoiceAsJson ( globalChoiceIndex ) ;  
			
		
	
		
			
				
					                            auto  choiceOriginCorrectionJson  =  model - > getChoiceOrigins ( ) - > getChoiceAsJson ( globalChoiceCorrectionIndex ) ;  
			
		
	
		
			
				
					                            std : : string  choiceActionLabel  =  choiceOriginJson [ " action-label " ] ;  
			
		
	
		
			
				
					                            std : : string  choiceCorrectionActionLabel  =  choiceOriginCorrectionJson [ " action-label " ] ;  
			
		
	
		
			
				
					                            choiceOriginJson [ " action-label " ]  =  choiceActionLabel . append ( " :  " ) . append ( choiceCorrectionActionLabel ) ;  
			
		
	
		
			
				
					                            choiceJson [ " origin " ]  =  choiceOriginJson ;                              
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                        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 ) ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                        choicesJson . push_back ( std : : move ( choiceJson ) ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                }  else  {  
			
		
	
		
			
				
					                    choicesJson  =  " undefined " ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					                 
			
		
	
		
			
				
					                stateChoicesJson [ " c " ]  =  std : : move ( choicesJson ) ;  
			
		
	
		
			
				
					                output . push_back ( std : : move ( stateChoicesJson ) ) ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            out  < <  output . dump ( 4 ) ;  
			
		
	
		
			
				
					        }