|  | @ -8,7 +8,7 @@ namespace storm { | 
		
	
		
			
				|  |  |         namespace bisimulation { |  |  |         namespace bisimulation { | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
		
			
				|  |  |             template<storm::dd::DdType DdType, typename ValueType> |  |  |             template<storm::dd::DdType DdType, typename ValueType> | 
		
	
		
			
				|  |  |             NondeterministicModelPartitionRefiner<DdType, ValueType>::NondeterministicModelPartitionRefiner(storm::models::symbolic::NondeterministicModel<DdType, ValueType> const& model, Partition<DdType, ValueType> const& initialStatePartition) : PartitionRefiner<DdType, ValueType>(model, initialStatePartition), model(model), choicePartition(Partition<DdType, ValueType>::createTrivialChoicePartition(model, initialStatePartition.getBlockVariables())), stateSignatureRefiner(model.getManager(), this->statePartition.getBlockVariable(), model.getRowVariables(), model.getColumnVariables(), true) { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             NondeterministicModelPartitionRefiner<DdType, ValueType>::NondeterministicModelPartitionRefiner(storm::models::symbolic::NondeterministicModel<DdType, ValueType> const& model, Partition<DdType, ValueType> const& initialStatePartition) : PartitionRefiner<DdType, ValueType>(model, initialStatePartition), model(model), choicePartition(Partition<DdType, ValueType>::createTrivialChoicePartition(model, initialStatePartition.getBlockVariables())), stateSignatureRefiner(model.getManager(), this->statePartition.getBlockVariable(), model.getRowVariables(), model.getColumnVariables(), true), statePartitonHasBeenRefinedOnce(false) { | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |                 // For Markov automata, we refine the state partition wrt. to their exit rates.
 |  |  |                 // For Markov automata, we refine the state partition wrt. to their exit rates.
 | 
		
	
		
			
				|  |  |                 if (model.isOfType(storm::models::ModelType::MarkovAutomaton)) { |  |  |                 if (model.isOfType(storm::models::ModelType::MarkovAutomaton)) { | 
		
	
	
		
			
				|  | @ -29,7 +29,9 @@ namespace storm { | 
		
	
		
			
				|  |  |                 STORM_LOG_TRACE("Refining choice partition."); |  |  |                 STORM_LOG_TRACE("Refining choice partition."); | 
		
	
		
			
				|  |  |                 Partition<DdType, ValueType> newChoicePartition = this->internalRefine(this->signatureComputer, this->signatureRefiner, this->choicePartition, this->statePartition, mode); |  |  |                 Partition<DdType, ValueType> newChoicePartition = this->internalRefine(this->signatureComputer, this->signatureRefiner, this->choicePartition, this->statePartition, mode); | 
		
	
		
			
				|  |  |                  |  |  |                  | 
		
	
		
			
				|  |  |                 if (newChoicePartition.getNumberOfBlocks() == choicePartition.getNumberOfBlocks()) { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                 // If the choice partition has become stable in an iteration that is not the starting one, we have
 | 
		
	
		
			
				|  |  |  |  |  |                 // reached a fixed point and can return.
 | 
		
	
		
			
				|  |  |  |  |  |                 if (newChoicePartition.getNumberOfBlocks() == choicePartition.getNumberOfBlocks() && statePartitonHasBeenRefinedOnce) { | 
		
	
		
			
				|  |  |                     this->status = Status::FixedPoint; |  |  |                     this->status = Status::FixedPoint; | 
		
	
		
			
				|  |  |                     return false; |  |  |                     return false; | 
		
	
		
			
				|  |  |                 } else { |  |  |                 } else { | 
		
	
	
		
			
				|  | @ -52,6 +54,7 @@ namespace storm { | 
		
	
		
			
				|  |  |                     STORM_LOG_TRACE("Refining state partition."); |  |  |                     STORM_LOG_TRACE("Refining state partition."); | 
		
	
		
			
				|  |  |                     auto refinementStart = std::chrono::high_resolution_clock::now(); |  |  |                     auto refinementStart = std::chrono::high_resolution_clock::now(); | 
		
	
		
			
				|  |  |                     Partition<DdType, ValueType> newStatePartition = this->internalRefine(stateSignature, this->stateSignatureRefiner, this->statePartition); |  |  |                     Partition<DdType, ValueType> newStatePartition = this->internalRefine(stateSignature, this->stateSignatureRefiner, this->statePartition); | 
		
	
		
			
				|  |  |  |  |  |                     statePartitonHasBeenRefinedOnce = true; | 
		
	
		
			
				|  |  |                     auto refinementEnd = std::chrono::high_resolution_clock::now(); |  |  |                     auto refinementEnd = std::chrono::high_resolution_clock::now(); | 
		
	
		
			
				|  |  |                      |  |  |                      | 
		
	
		
			
				|  |  |                     auto signatureTime = std::chrono::duration_cast<std::chrono::milliseconds>(signatureEnd - signatureStart).count(); |  |  |                     auto signatureTime = std::chrono::duration_cast<std::chrono::milliseconds>(signatureEnd - signatureStart).count(); | 
		
	
	
		
			
				|  | 
 |