STORM_LOG_WARN_COND(transformToJani||!transformToJaniForJit,"The JIT-based model builder is only available for JANI models, automatically converting the PRISM input model.");
STORM_LOG_THROW(engine==storm::settings::modules::CoreSettings::Engine::Sparse,storm::exceptions::InvalidSettingsException,"Can only use sparse engine with explicit input.");
STORM_LOG_THROW(engine==storm::settings::modules::CoreSettings::Engine::Sparse,storm::exceptions::InvalidSettingsException,"Can only use sparse engine with explicit input.");
STORM_LOG_THROW(engine==storm::settings::modules::CoreSettings::Engine::Sparse||engine==storm::settings::modules::CoreSettings::Engine::Hybrid||engine==storm::settings::modules::CoreSettings::Engine::Dd,storm::exceptions::InvalidSettingsException,"The selected engine is not supported for parametric models.");
STORM_LOG_THROW(!this->isDiscreteTimeModel()||!this->comparator.isConstant(probabilitySum)||this->comparator.isOne(probabilitySum),storm::exceptions::WrongFormatException,"Sum of update probabilities do not sum to one for some command (actually sum to "<<probabilitySum<<").");
}
// Dispose of the temporary maps.
deletecurrentTargetStates;
deletenewTargetStates;
// Now, check whether there is one more command combination to consider.
// If the solver still requires no end-components, we have to eliminate them later.
if(requirements.requiresNoEndComponents()){
STORM_LOG_ASSERT(!result.hasUniqueSolution(),"The solver requires to eliminate the end components although the solution is already assumed to be unique.");
STORM_LOG_DEBUG("Scheduling EC elimination, because the solver requires it.");
result.eliminateEndComponents=true;
requirements.clearNoEndComponents();
@ -256,9 +269,9 @@ namespace storm {
}
// Finally, we have information on the bounds depending on the problem type.
this->addOption(storm::settings::OptionBuilder(moduleName,prismCompatibilityOptionName,false,"Enables PRISM compatibility. This may be necessary to process some PRISM models.").setShortName(prismCompatibilityOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,jitOptionName,false,"If set, the model is built using the JIT model builder.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,fullModelBuildOptionName,false,"If set, include all rewards and labels.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,buildChoiceLabelOptionName,false,"If set, also build the choice labels").build());
this->addOption(storm::settings::OptionBuilder(moduleName,buildStateValuationsOptionName,false,"If set, also build the state valuations").build());
this->addOption(storm::settings::OptionBuilder(moduleName,noBuildOptionName,false,"If set, do not build the model.").build());
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,prismCompatibilityOptionName,false,"Enables PRISM compatibility. This may be necessary to process some PRISM models.").setShortName(prismCompatibilityOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,exportDotOptionName,"","If given, the loaded model will be written to the specified file in the dot format.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename","The name of the file to which the model is to be written.").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,exportJaniDotOptionName,"","If given, the loaded jani model will be written to the specified file in the dot format.")
@ -73,19 +63,10 @@ namespace storm {
this->addOption(storm::settings::OptionBuilder(moduleName,janiInputOptionName,false,"Parses the model given in the JANI format.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename","The name of the file from which to read the JANI input.").addValidatorString(ArgumentValidatorFactory::createExistingFileValidator()).build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,prismToJaniOptionName,false,"If set, the input PRISM model is transformed to JANI.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,jitOptionName,false,"If set, the model is built using the JIT model builder.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,fullModelBuildOptionName,false,"If set, include all rewards and labels.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,buildChoiceLabelOptionName,false,"If set, also build the choice labels").build());
this->addOption(storm::settings::OptionBuilder(moduleName,buildStateValuationsOptionName,false,"If set, also build the state valuations").build());
this->addOption(storm::settings::OptionBuilder(moduleName,noBuildOptionName,false,"If set, do not build the model.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,propertyOptionName,false,"Specifies the properties to be checked on the model.").setShortName(propertyOptionShortName)
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("property or filename","The formula or the file containing the formulas.").build())
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("filter","The names of the properties to check.").setDefaultValueString("all").build())
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,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());
STORM_LOG_THROW(parsingOk,storm::exceptions::UnexpectedException,"Expression was not properly parsed by ExprTk: "<<expression<<". (Returned error: "<<parser->error()<<")");
STORM_LOG_THROW(parsingOk,storm::exceptions::UnexpectedException,"Expression was not properly parsed by ExprTk: "<<expression<<". (Returned error: "<<parser->error()<<")");
STORM_LOG_WARN_COND(false,"The model uses synchronizing Markovian commands. This may lead to unexpected verification results, because of unclear semantics.");
}else{
STORM_LOG_THROW(false,storm::exceptions::WrongFormatException,"The model uses synchronizing Markovian commands. This may lead to unexpected verification results, because of unclear semantics.");