|  |  | @ -15,7 +15,7 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |     namespace modelchecker { | 
			
		
	
		
			
				
					|  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |         template <typename SparseModelType, typename ConstantType> | 
			
		
	
		
			
				
					|  |  |  |         SparseMdpInstantiationModelChecker<SparseModelType, ConstantType>::SparseMdpInstantiationModelChecker(SparseModelType const& parametricModel) : SparseInstantiationModelChecker<SparseModelType, ConstantType>(parametricModel), modelInstantiator(parametricModel) { | 
			
		
	
		
			
				
					|  |  |  |         SparseMdpInstantiationModelChecker<SparseModelType, ConstantType>::SparseMdpInstantiationModelChecker(SparseModelType const& parametricModel, bool produceScheduler) : SparseInstantiationModelChecker<SparseModelType, ConstantType>(parametricModel), modelInstantiator(parametricModel), produceScheduler(produceScheduler) { | 
			
		
	
		
			
				
					|  |  |  |             //Intentionally left empty
 | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -41,7 +41,9 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |         template <typename SparseModelType, typename ConstantType> | 
			
		
	
		
			
				
					|  |  |  |         std::unique_ptr<CheckResult> SparseMdpInstantiationModelChecker<SparseModelType, ConstantType>::checkReachabilityProbabilityFormula(Environment const& env, storm::modelchecker::SparseMdpPrctlModelChecker<storm::models::sparse::Mdp<ConstantType>>& modelChecker, storm::models::sparse::Mdp<ConstantType> const& instantiatedModel) { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             this->currentCheckTask->setProduceSchedulers(true); | 
			
		
	
		
			
				
					|  |  |  |             if (produceScheduler) { | 
			
		
	
		
			
				
					|  |  |  |                 this->currentCheckTask->setProduceSchedulers(true); | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             if (!this->currentCheckTask->getHint().isExplicitModelCheckerHint()) { | 
			
		
	
		
			
				
					|  |  |  |                 this->currentCheckTask->setHint(std::make_shared<ExplicitModelCheckerHint<ConstantType>>()); | 
			
		
	
	
		
			
				
					|  |  | @ -82,16 +84,21 @@ namespace storm { | 
			
		
	
		
			
				
					|  |  |  |             // For qualitative properties, we still want a quantitative result hint. Hence we perform the check on the subformula
 | 
			
		
	
		
			
				
					|  |  |  |             if (this->currentCheckTask->getFormula().asOperatorFormula().hasQuantitativeResult()) { | 
			
		
	
		
			
				
					|  |  |  |                 result = modelChecker.check(env, *this->currentCheckTask); | 
			
		
	
		
			
				
					|  |  |  |                 storm::storage::Scheduler<ConstantType> const& scheduler = result->template asExplicitQuantitativeCheckResult<ConstantType>().getScheduler(); | 
			
		
	
		
			
				
					|  |  |  |                 hint.setResultHint(result->template asExplicitQuantitativeCheckResult<ConstantType>().getValueVector()); | 
			
		
	
		
			
				
					|  |  |  |                 hint.setSchedulerHint(dynamic_cast<storm::storage::Scheduler<ConstantType> const&>(scheduler)); | 
			
		
	
		
			
				
					|  |  |  |                 if (produceScheduler) { | 
			
		
	
		
			
				
					|  |  |  |                     storm::storage::Scheduler<ConstantType> const& scheduler = result->template asExplicitQuantitativeCheckResult<ConstantType>().getScheduler(); | 
			
		
	
		
			
				
					|  |  |  |                     hint.setSchedulerHint(dynamic_cast<storm::storage::Scheduler<ConstantType> const &>(scheduler)); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } else { | 
			
		
	
		
			
				
					|  |  |  |                 auto newCheckTask = this->currentCheckTask->substituteFormula(this->currentCheckTask->getFormula().asOperatorFormula().getSubformula()).setOnlyInitialStatesRelevant(false); | 
			
		
	
		
			
				
					|  |  |  |                 std::unique_ptr<storm::modelchecker::CheckResult> quantitativeResult = modelChecker.computeProbabilities(env, newCheckTask); | 
			
		
	
		
			
				
					|  |  |  |                 result = quantitativeResult->template asExplicitQuantitativeCheckResult<ConstantType>().compareAgainstBound(this->currentCheckTask->getFormula().asOperatorFormula().getComparisonType(), this->currentCheckTask->getFormula().asOperatorFormula().template getThresholdAs<ConstantType>()); | 
			
		
	
		
			
				
					|  |  |  |                 storm::storage::Scheduler<ConstantType>& scheduler = quantitativeResult->template asExplicitQuantitativeCheckResult<ConstantType>().getScheduler(); | 
			
		
	
		
			
				
					|  |  |  |                 hint.setResultHint(std::move(quantitativeResult->template asExplicitQuantitativeCheckResult<ConstantType>().getValueVector())); | 
			
		
	
		
			
				
					|  |  |  |                 hint.setSchedulerHint(std::move(dynamic_cast<storm::storage::Scheduler<ConstantType>&>(scheduler))); | 
			
		
	
		
			
				
					|  |  |  |                 if (produceScheduler) { | 
			
		
	
		
			
				
					|  |  |  |                     storm::storage::Scheduler<ConstantType>& scheduler = quantitativeResult->template asExplicitQuantitativeCheckResult<ConstantType>().getScheduler(); | 
			
		
	
		
			
				
					|  |  |  |                     hint.setSchedulerHint( | 
			
		
	
		
			
				
					|  |  |  |                             std::move(dynamic_cast<storm::storage::Scheduler<ConstantType> &>(scheduler))); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |              | 
			
		
	
		
			
				
					|  |  |  |             return result; | 
			
		
	
	
		
			
				
					|  |  | 
 |