|  | @ -17,7 +17,7 @@ namespace storm { | 
		
	
		
			
				|  |  |     namespace modelchecker { |  |  |     namespace modelchecker { | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |         template<typename ValueType> |  |  |         template<typename ValueType> | 
		
	
		
			
				|  |  |         typename DFTModelChecker<ValueType>::dft_results DFTModelChecker<ValueType>::check(storm::storage::DFT<ValueType> const& origDft, std::vector<std::shared_ptr<const storm::logic::Formula>> const& properties, bool symred, bool allowModularisation, bool enableDC, double approximationError) { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         typename DFTModelChecker<ValueType>::dft_results DFTModelChecker<ValueType>::check(storm::storage::DFT<ValueType> const& origDft, std::vector<std::shared_ptr<const storm::logic::Formula>> const& properties, bool symred, bool allowModularisation, bool enableDC, double approximationError, storm::builder::ApproximationHeuristic approximationHeuristic) { | 
		
	
		
			
				|  |  |             // Initialize
 |  |  |             // Initialize
 | 
		
	
		
			
				|  |  |             this->approximationError = approximationError; |  |  |             this->approximationError = approximationError; | 
		
	
		
			
				|  |  |             totalTimer.start(); |  |  |             totalTimer.start(); | 
		
	
	
		
			
				|  | @ -30,21 +30,21 @@ namespace storm { | 
		
	
		
			
				|  |  |             // Checking DFT
 |  |  |             // Checking DFT
 | 
		
	
		
			
				|  |  |             if (properties[0]->isTimeOperatorFormula() && allowModularisation) { |  |  |             if (properties[0]->isTimeOperatorFormula() && allowModularisation) { | 
		
	
		
			
				|  |  |                 // Use parallel composition as modularisation approach for expected time
 |  |  |                 // Use parallel composition as modularisation approach for expected time
 | 
		
	
		
			
				|  |  |                 std::shared_ptr<storm::models::sparse::Model<ValueType>> model = buildModelViaComposition(dft, properties, symred, true, enableDC, approximationError); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                 std::shared_ptr<storm::models::sparse::Model<ValueType>> model = buildModelViaComposition(dft, properties, symred, true, enableDC); | 
		
	
		
			
				|  |  |                 // Model checking
 |  |  |                 // Model checking
 | 
		
	
		
			
				|  |  |                 std::vector<ValueType> resultsValue = checkModel(model, properties); |  |  |                 std::vector<ValueType> resultsValue = checkModel(model, properties); | 
		
	
		
			
				|  |  |                 for (ValueType result : resultsValue) { |  |  |                 for (ValueType result : resultsValue) { | 
		
	
		
			
				|  |  |                     checkResults.push_back(result); |  |  |                     checkResults.push_back(result); | 
		
	
		
			
				|  |  |                 } |  |  |                 } | 
		
	
		
			
				|  |  |             } else { |  |  |             } else { | 
		
	
		
			
				|  |  |                 checkResults = checkHelper(dft, properties, symred, allowModularisation, enableDC, approximationError); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                 checkResults = checkHelper(dft, properties, symred, allowModularisation, enableDC, approximationError, approximationHeuristic); | 
		
	
		
			
				|  |  |             } |  |  |             } | 
		
	
		
			
				|  |  |             totalTimer.stop(); |  |  |             totalTimer.stop(); | 
		
	
		
			
				|  |  |             return checkResults; |  |  |             return checkResults; | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |         template<typename ValueType> |  |  |         template<typename ValueType> | 
		
	
		
			
				|  |  |         typename DFTModelChecker<ValueType>::dft_results DFTModelChecker<ValueType>::checkHelper(storm::storage::DFT<ValueType> const& dft, property_vector const& properties, bool symred, bool allowModularisation, bool enableDC, double approximationError)  { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         typename DFTModelChecker<ValueType>::dft_results DFTModelChecker<ValueType>::checkHelper(storm::storage::DFT<ValueType> const& dft, property_vector const& properties, bool symred, bool allowModularisation, bool enableDC, double approximationError, storm::builder::ApproximationHeuristic approximationHeuristic)  { | 
		
	
		
			
				|  |  |             STORM_LOG_TRACE("Check helper called"); |  |  |             STORM_LOG_TRACE("Check helper called"); | 
		
	
		
			
				|  |  |             std::vector<storm::storage::DFT<ValueType>> dfts; |  |  |             std::vector<storm::storage::DFT<ValueType>> dfts; | 
		
	
		
			
				|  |  |             bool invResults = false; |  |  |             bool invResults = false; | 
		
	
	
		
			
				|  | @ -138,12 +138,12 @@ namespace storm { | 
		
	
		
			
				|  |  |                 return results; |  |  |                 return results; | 
		
	
		
			
				|  |  |             } else { |  |  |             } else { | 
		
	
		
			
				|  |  |                 // No modularisation was possible
 |  |  |                 // No modularisation was possible
 | 
		
	
		
			
				|  |  |                 return checkDFT(dft, properties, symred, enableDC, approximationError); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                 return checkDFT(dft, properties, symred, enableDC, approximationError, approximationHeuristic); | 
		
	
		
			
				|  |  |             } |  |  |             } | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |         template<typename ValueType> |  |  |         template<typename ValueType> | 
		
	
		
			
				|  |  |         std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> DFTModelChecker<ValueType>::buildModelViaComposition(storm::storage::DFT<ValueType> const& dft, property_vector const& properties, bool symred, bool allowModularisation, bool enableDC, double approximationError)  { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         std::shared_ptr<storm::models::sparse::Ctmc<ValueType>> DFTModelChecker<ValueType>::buildModelViaComposition(storm::storage::DFT<ValueType> const& dft, property_vector const& properties, bool symred, bool allowModularisation, bool enableDC)  { | 
		
	
		
			
				|  |  |             // TODO Matthias: use approximation?
 |  |  |             // TODO Matthias: use approximation?
 | 
		
	
		
			
				|  |  |             STORM_LOG_TRACE("Build model via composition"); |  |  |             STORM_LOG_TRACE("Build model via composition"); | 
		
	
		
			
				|  |  |             std::vector<storm::storage::DFT<ValueType>> dfts; |  |  |             std::vector<storm::storage::DFT<ValueType>> dfts; | 
		
	
	
		
			
				|  | @ -258,7 +258,7 @@ namespace storm { | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |         template<typename ValueType> |  |  |         template<typename ValueType> | 
		
	
		
			
				|  |  |         typename DFTModelChecker<ValueType>::dft_results DFTModelChecker<ValueType>::checkDFT(storm::storage::DFT<ValueType> const& dft, property_vector const& properties, bool symred, bool enableDC, double approximationError) { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         typename DFTModelChecker<ValueType>::dft_results DFTModelChecker<ValueType>::checkDFT(storm::storage::DFT<ValueType> const& dft, property_vector const& properties, bool symred, bool enableDC, double approximationError, storm::builder::ApproximationHeuristic approximationHeuristic) { | 
		
	
		
			
				|  |  |             explorationTimer.start(); |  |  |             explorationTimer.start(); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |             // Find symmetries
 |  |  |             // Find symmetries
 | 
		
	
	
		
			
				|  | @ -297,7 +297,7 @@ namespace storm { | 
		
	
		
			
				|  |  |                     } |  |  |                     } | 
		
	
		
			
				|  |  |                     STORM_LOG_DEBUG("Building model..."); |  |  |                     STORM_LOG_DEBUG("Building model..."); | 
		
	
		
			
				|  |  |                     // TODO Matthias refine model using existing model and MC results
 |  |  |                     // TODO Matthias refine model using existing model and MC results
 | 
		
	
		
			
				|  |  |                     builder.buildModel(labeloptions, iteration, approximationError); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |                     builder.buildModel(labeloptions, iteration, approximationError, approximationHeuristic); | 
		
	
		
			
				|  |  |                     explorationTimer.stop(); |  |  |                     explorationTimer.stop(); | 
		
	
		
			
				|  |  |                     buildingTimer.start(); |  |  |                     buildingTimer.start(); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
	
		
			
				|  | 
 |