| 
					
					
						
							
						
					
					
				 | 
				@ -133,41 +133,53 @@ int main(const int argc, const char** argv) { | 
			
		
		
	
		
			
				 | 
				 | 
				                    storm::analysis::QualitativeAnalysis<storm::RationalNumber> qualitativeAnalysis(*pomdp); | 
				 | 
				 | 
				                    storm::analysis::QualitativeAnalysis<storm::RationalNumber> qualitativeAnalysis(*pomdp); | 
			
		
		
	
		
			
				 | 
				 | 
				                    STORM_PRINT_AND_LOG("Computing states with probability 0 ..."); | 
				 | 
				 | 
				                    STORM_PRINT_AND_LOG("Computing states with probability 0 ..."); | 
			
		
		
	
		
			
				 | 
				 | 
				                    std::cout << qualitativeAnalysis.analyseProb0(formula->asProbabilityOperatorFormula()) << std::endl; | 
				 | 
				 | 
				                    std::cout << qualitativeAnalysis.analyseProb0(formula->asProbabilityOperatorFormula()) << std::endl; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    STORM_PRINT_AND_LOG(" done." << std::endl); | 
			
		
		
	
		
			
				 | 
				 | 
				                    STORM_PRINT_AND_LOG("Computing states with probability 1 ..."); | 
				 | 
				 | 
				                    STORM_PRINT_AND_LOG("Computing states with probability 1 ..."); | 
			
		
		
	
		
			
				 | 
				 | 
				                    std::cout << qualitativeAnalysis.analyseProb1(formula->asProbabilityOperatorFormula()) << std::endl; | 
				 | 
				 | 
				                    std::cout << qualitativeAnalysis.analyseProb1(formula->asProbabilityOperatorFormula()) << std::endl; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    STORM_PRINT_AND_LOG(" done." << std::endl); | 
			
		
		
	
		
			
				 | 
				 | 
				                    std::cout << "actual reduction not yet implemented..." << std::endl; | 
				 | 
				 | 
				                    std::cout << "actual reduction not yet implemented..." << std::endl; | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				                } | 
			
		
		
	
		
			
				 | 
				 | 
				                if (pomdpSettings.getMemoryBound() > 1) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    storm::transformer::PomdpMemoryUnfolder<storm::RationalNumber> memoryUnfolder(*pomdp, pomdpSettings.getMemoryBound()); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    pomdp = memoryUnfolder.transform(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                // From now on the pomdp is considered memoryless
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                if (pomdpSettings.isMecReductionSet()) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    STORM_PRINT_AND_LOG("Eliminating mec choices ..."); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    // Note: Elimination of mec choices only preserves memoryless schedulers.
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    uint64_t oldChoiceCount = pomdp->getNumberOfChoices(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    storm::transformer::GlobalPomdpMecChoiceEliminator<storm::RationalNumber> mecChoiceEliminator(*pomdp); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    pomdp = mecChoiceEliminator.transform(*formula); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    STORM_PRINT_AND_LOG(oldChoiceCount - pomdp->getNumberOfChoices() << " choices eliminated through MEC choice elimination." << std::endl); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                if (pomdpSettings.isExportToParametricSet()) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    storm::transformer::ApplyFiniteSchedulerToPomdp<storm::RationalNumber> toPMCTransformer(*pomdp); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    auto const &pmc = toPMCTransformer.transform(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    storm::analysis::ConstraintCollector<storm::RationalFunction> constraints(*pmc); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    pmc->printModelInformationToStream(std::cout); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    auto const& parameterSet = constraints.getVariables(); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    std::vector<storm::RationalFunctionVariable> parameters(parameterSet.begin(), parameterSet.end()); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    std::vector<std::string> parameterNames; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    for (auto const& parameter : parameters) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                        parameterNames.push_back(parameter.getName()); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    } | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				                    storm::api::exportSparseModelAsDrn(pmc, pomdpSettings.getExportToParametricFilename(), parameterNames); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            if (pomdpSettings.getMemoryBound() > 1) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG("Computing the unfolding for memory bound " << pomdpSettings.getMemoryBound() << "..."); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                storm::transformer::PomdpMemoryUnfolder<storm::RationalNumber> memoryUnfolder(*pomdp, pomdpSettings.getMemoryBound()); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                pomdp = memoryUnfolder.transform(); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG(" done." << std::endl); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                pomdp->printModelInformationToStream(std::cout); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } else { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG("Assumming memoryless schedulers.") | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				             | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            // From now on the pomdp is considered memoryless
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				             | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            if (pomdpSettings.isMecReductionSet()) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG("Eliminating mec choices ..."); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                // Note: Elimination of mec choices only preserves memoryless schedulers.
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                uint64_t oldChoiceCount = pomdp->getNumberOfChoices(); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                storm::transformer::GlobalPomdpMecChoiceEliminator<storm::RationalNumber> mecChoiceEliminator(*pomdp); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                pomdp = mecChoiceEliminator.transform(*formula); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG(" done." << std::endl); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG(oldChoiceCount - pomdp->getNumberOfChoices() << " choices eliminated through MEC choice elimination." << std::endl); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				             | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            if (pomdpSettings.isExportToParametricSet()) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG("Transforming memoryless POMDP to pMC..."); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                storm::transformer::ApplyFiniteSchedulerToPomdp<storm::RationalNumber> toPMCTransformer(*pomdp); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                auto pmc = toPMCTransformer.transform(); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG(" done." << std::endl); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                pmc->printModelInformationToStream(std::cout); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG("Exporting pMC..."); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                storm::analysis::ConstraintCollector<storm::RationalFunction> constraints(*pmc); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                auto const& parameterSet = constraints.getVariables(); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                std::vector<storm::RationalFunctionVariable> parameters(parameterSet.begin(), parameterSet.end()); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                std::vector<std::string> parameterNames; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                for (auto const& parameter : parameters) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    parameterNames.push_back(parameter.getName()); | 
			
		
		
	
		
			
				 | 
				 | 
				                } | 
				 | 
				 | 
				                } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                storm::api::exportSparseModelAsDrn(pmc, pomdpSettings.getExportToParametricFilename(), parameterNames); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_PRINT_AND_LOG(" done." << std::endl); | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        // All operations have now been performed, so we clean up everything and terminate.
 | 
				 | 
				 | 
				        // All operations have now been performed, so we clean up everything and terminate.
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |