// Check the given set of regions with or without refinement
if(regionSettings.isRefineSet()){
STORM_LOG_THROW(regions.size()==1,storm::exceptions::NotSupportedException,"Region refinement is not supported for multiple initial regions.");
STORM_PRINT_AND_LOG(" with iterative refinement until "<<(1.0-regionSettings.getRefinementThreshold())*100.0<<"% is covered."<<std::endl);
STORM_PRINT_AND_LOG(" with iterative refinement until "<<(1.0-regionSettings.getCoverageThreshold())*100.0<<"% is covered."<<(regionSettings.isDepthLimitSet()?" Depth limit is "+std::to_string(regionSettings.getDepthLimit())+".":"")<<std::endl);
STORM_LOG_THROW(regionCheckResult!=nullptr,storm::exceptions::UnexpectedException,"Can not export region check result: The given checkresult does not have the expected type.");
STORM_LOG_THROW(regions.size()==hypotheses.size(),storm::exceptions::InvalidArgumentException,"The number of regions and the number of hypotheses do not match");
STORM_LOG_THROW(!unprocessedRegions.empty(),storm::exceptions::InvalidStateException,"Threshold for undiscovered area not reached but no unprocessed regions left.");
STORM_LOG_INFO("Analyzing region #"<<numOfAnalyzedRegions<<" ("<<storm::utility::convertNumber<double>(fractionOfUndiscoveredArea)*100<<"% still unknown)");
STORM_LOG_INFO("Analyzing region #"<<numOfAnalyzedRegions<<" (Refinement depth "<<currentDepth<<"; "<<storm::utility::convertNumber<double>(fractionOfUndiscoveredArea)*100<<"% still unknown)");
STORM_LOG_THROW(false,storm::exceptions::NotImplementedException,"Could not get a string from the region result hypothesis. The case has not been implemented");
STORM_LOG_THROW(this->currentCheckTask->isOnlyInitialStatesRelevantSet(),storm::exceptions::NotSupportedException,"Analyzing regions with parameter lifting requires a property where only the value in the initial states is relevant.");
STORM_LOG_THROW(this->currentCheckTask->isBoundSet(),storm::exceptions::NotSupportedException,"Analyzing regions with parameter lifting requires a bounded property.");
STORM_LOG_THROW(this->parametricModel->getInitialStates().getNumberOfSetBits()==1,storm::exceptions::NotSupportedException,"Analyzing regions with parameter lifting requires a model with a single initial state.");
@ -56,12 +56,12 @@ namespace storm {
RegionResultresult=initialResult;
// Check if we need to check the formula on one point to decide whether to show AllSat or AllViolated
this->addOption(storm::settings::OptionBuilder(moduleName,regionOptionName,false,"Sets the region(s) considered for analysis.").setShortName(regionShortOptionName)
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("regioninput","The region(s) given in format a<=x<=b,c<=y<=d seperated by ';'. Can also be a file.").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,hypothesisOptionName,false,"Sets a hypothesis for region analysis. If given, the region(s) are only analyzed w.r.t. that hypothesis.").setShortName(hypothesisShortOptionName)
this->addOption(storm::settings::OptionBuilder(moduleName,refineOptionName,false,"Enables region refinement.")
.addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("threshold","Refinement converges if the fraction of unknown area falls below this threshold.").setDefaultValueDouble(0.05).addValidatorDouble(storm::settings::ArgumentValidatorFactory::createDoubleRangeValidatorExcluding(0.0,1.0)).build()).build());
.addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("coverage-threshold","Refinement converges if the fraction of unknown area falls below this threshold.").setDefaultValueDouble(0.05).addValidatorDouble(storm::settings::ArgumentValidatorFactory::createDoubleRangeValidatorIncluding(0.0,1.0)).build())
.addArgument(storm::settings::ArgumentBuilder::createIntegerArgument("depth-limit","If given, limits the number of times a region is refined.").setDefaultValueInteger(-1).build()).build());
std::cout<<"Explored "<<numberOfExploredStates<<" states in "<<durationSinceStart<<" seconds (currently "<<statesPerSecond<<" states per second)."<<std::endl;
std::cout<<"Explored "<<numberOfExploredStates<<" states in "<<durationSinceStart<<" seconds (currently "<<statesPerSecond<<" states per second)."<<std::endl;
// Check whether we consider a multi-objective formula
// For multi-objective model checking, each initial state requires an individual scheduler (in contrast to single objective model checking). Let's exclude multiple initial states.
STORM_LOG_THROW(!data.originalModel.isOfType(storm::models::ModelType::MarkovAutomaton)||!formula.getTimeBoundReference().isStepBound(),storm::exceptions::InvalidPropertyException,"Multi-objective model checking currently does not support STEP-bounded properties for Markov automata.");
if(formula.hasLowerBound()){
STORM_LOG_THROW(!formula.getLowerBound().containsVariables(),storm::exceptions::InvalidPropertyException,"The lower time bound for the formula "<<formula<<" still contains variables");
STORM_LOG_THROW(!obj.timeBoundReference||obj.timeBoundReference->isTimeBound(),storm::exceptions::InvalidPropertyException,"Multi-objective model checking of Markov automata is only supported for time-bounded formulass.");
}
// Split the preprocessed model into transitions from/to probabilistic/Markovian states.
// Check whether we consider a multi-objective formula
// For multi-objective model checking, each initial state requires an individual scheduler (in contrast to single-objective model checking). Let's exclude multiple initial states.
this->addOption(storm::settings::OptionBuilder(moduleName,explorationOrderOptionName,false,"Sets which exploration order to use.").setShortName(explorationOrderOptionShortName)
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the exploration order to choose.").addValidatorString(ArgumentValidatorFactory::createMultipleChoiceValidator(explorationOrders)).setDefaultValueString("bfs").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,explorationChecksOptionName,false,"If set, additional checks (if available) are performed during model exploration to debug the model.").setShortName(explorationChecksOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,explorationShowProgressOptionName,false,"Sets when additional information (if available) about the exploration progress is printed.").setShortName(explorationShowProgressOptionShortName).addArgument(storm::settings::ArgumentBuilder::createUnsignedIntegerArgument("delay","The delay to wait between emitting information.").setDefaultValueUnsignedInteger(0).build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,transitionRewardsOptionName,false,"If given, the transition rewards are read from this file and added to the explicit model. Note that this requires the model to be given as an explicit model (i.e., via --"+explicitOptionName+").")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename","The file from which to read the transition rewards.").addValidatorString(ArgumentValidatorFactory::createExistingFileValidator()).build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,doctorOptionName,false,"Show debugging information on why the jit-based model builder is not working on your system.").build());
@ -33,6 +34,8 @@ namespace storm {
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("dir","The directory containing the carl headers.").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,compilerFlagsOptionName,false,"The flags passed to the compiler.")