STORM_LOG_THROW(program.getModelType()==storm::prism::Program::ModelType::DTMC||program.getModelType()==storm::prism::Program::ModelType::MDP,storm::exceptions::InvalidSettingsException,"Currently learning-based verification is only available for DTMCs and MDPs.");
STORM_LOG_THROW(program.getModelType()==storm::prism::Program::ModelType::DTMC||program.getModelType()==storm::prism::Program::ModelType::MDP,storm::exceptions::InvalidSettingsException,"Currently exploration-based verification is only available for DTMCs and MDPs.");
STORM_LOG_THROW(false,storm::exceptions::InvalidOperationException,"Cannot assemble expression from formula that contains illegal elements.");
STORM_LOG_THROW(false,storm::exceptions::InvalidOperationException,"Cannot assemble expression, because the undefined atomic label '"<<f.getLabel()<<"' appears in the formula.");
STORM_LOG_THROW(program.isDeterministicModel()||checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"For nondeterministic systems, an optimization direction (min/max) must be given in the property.");
STORM_LOG_THROW(program.isDeterministicModel()||checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"For nondeterministic systems, an optimization direction (min/max) must be given in the property.");
STORM_LOG_THROW(explorationInformation.getNumberOfInitialStates()==1,storm::exceptions::NotSupportedException,"Currently only models with one initial state are supported by the learning engine.");
STORM_LOG_THROW(explorationInformation.getNumberOfInitialStates()==1,storm::exceptions::NotSupportedException,"Currently only models with one initial state are supported by the exploration engine.");
STORM_LOG_TRACE("Initializing bounds of state "<<currentStateId<<" to "<<bounds.getLowerBoundForState(currentStateId,explorationInformation)<<" and "<<bounds.getUpperBoundForState(currentStateId,explorationInformation)<<".");
STORM_LOG_TRACE("Initializing bounds of state "<<currentStateId<<" to "<<bounds.getLowerBoundForState(currentStateId,explorationInformation)<<" and "<<bounds.getUpperBoundForState(currentStateId,explorationInformation)<<".");
}
}
}else{
// In this case, the state is neither a target state nor a condition state and therefore a rejecting
this->addOption(storm::settings::OptionBuilder(moduleName,precomputationTypeOptionName,true,"Sets the kind of precomputation used. Available are: { local, global }.").addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the type to use.").addValidationFunctionString(storm::settings::ArgumentValidators::stringInListValidator(types)).setDefaultValueString("global").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,precomputationTypeOptionName,true,"Sets the kind of precomputation used. Available are: { local, global }.").addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the type to use.").addValidationFunctionString(storm::settings::ArgumentValidators::stringInListValidator(types)).setDefaultValueString("global").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,numberOfExplorationStepsUntilPrecomputationOptionName,false,"Sets the number of exploration steps to perform until a precomputation is triggered.").addArgument(storm::settings::ArgumentBuilder::createUnsignedIntegerArgument("count","The number of exploration steps to perform.").setDefaultValueUnsignedInteger(100000).build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,numberOfExplorationStepsUntilPrecomputationOptionName,false,"Sets the number of exploration steps to perform until a precomputation is triggered.").addArgument(storm::settings::ArgumentBuilder::createUnsignedIntegerArgument("count","The number of exploration steps to perform.").setDefaultValueUnsignedInteger(100000).build()).build());
@ -26,58 +26,58 @@ namespace storm {
this->addOption(storm::settings::OptionBuilder(moduleName,nextStateHeuristicOptionName,true,"Sets the next-state heuristic to use. Available are: { probdiff, prob } where 'prob' samples according to the probabilities in the system and 'probdiff' weights the probabilities with the differences between the current bounds.").addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the heuristic to use.").addValidationFunctionString(storm::settings::ArgumentValidators::stringInListValidator(nextStateHeuristics)).setDefaultValueString("probdiff").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,nextStateHeuristicOptionName,true,"Sets the next-state heuristic to use. Available are: { probdiff, prob } where 'prob' samples according to the probabilities in the system and 'probdiff' weights the probabilities with the differences between the current bounds.").addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the heuristic to use.").addValidationFunctionString(storm::settings::ArgumentValidators::stringInListValidator(nextStateHeuristics)).setDefaultValueString("probdiff").build()).build());
STORM_LOG_WARN_COND(storm::settings::generalSettings().getEngine()==storm::settings::modules::GeneralSettings::Engine::Learning||!optionsSet,"Learning engine is not selected, so setting options for it has no effect.");
STORM_LOG_WARN_COND(storm::settings::generalSettings().getEngine()==storm::settings::modules::GeneralSettings::Engine::Exploration||!optionsSet,"Exploration engine is not selected, so setting options for it has no effect.");
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename","The file from which to read the choice labels.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build());
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename","The file from which to read the choice labels.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,dontFixDeadlockOptionName,false,"If the model contains deadlock states, they need to be fixed by setting this option.").setShortName(dontFixDeadlockOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,dontFixDeadlockOptionName,false,"If the model contains deadlock states, they need to be fixed by setting this option.").setShortName(dontFixDeadlockOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,engineOptionName,false,"Sets which engine is used for model building and model checking.").setShortName(engineOptionShortName)
this->addOption(storm::settings::OptionBuilder(moduleName,engineOptionName,false,"Sets which engine is used for model building and model checking.").setShortName(engineOptionShortName)
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the engine to use. Available are {sparse, hybrid, dd, learn, abs}.").addValidationFunctionString(storm::settings::ArgumentValidators::stringInListValidator(engines)).setDefaultValueString("sparse").build()).build());
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of the engine to use. Available are {sparse, hybrid, dd, expl, abs}.").addValidationFunctionString(storm::settings::ArgumentValidators::stringInListValidator(engines)).setDefaultValueString("sparse").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,eqSolverOptionName,false,"Sets which solver is preferred for solving systems of linear equations.")
this->addOption(storm::settings::OptionBuilder(moduleName,eqSolverOptionName,false,"Sets which solver is preferred for solving systems of linear equations.")