Added macros that can be used for printing and warnings. Included Dennis' fix for model checking of Markov automata. Added check methods to the settings modules that check whether the specified options are non-contradictive.
this->addOption(storm::settings::OptionBuilder(moduleName,schedulerCutsOptionName,true,"Sets whether to add the scheduler cuts for MILP-based minimal command counterexample generation.").build());
// Ensure that the model was given either symbolically or explicitly.
STORM_LOG_THROW(!isMinimalCommandSetGenerationSet()||storm::settings::generalSettings().isSymbolicSet(),storm::exceptions::InvalidSettingsException,"For the generation of a minimal command set, the model has to be specified symbolically.");
if(isMinimalCommandSetGenerationSet()){
STORM_LOG_WARN_COND(isUseMaxSatBasedMinimalCommandSetGenerationSet()||!isEncodeReachabilitySet(),"Encoding reachability is only available for the MaxSat-based minimal command set generation, so selecting it has no effect.");
STORM_LOG_WARN_COND(isUseMilpBasedMinimalCommandSetGenerationSet()||!isUseSchedulerCutsSet(),"Using scheduler cuts is only available for the MaxSat-based minimal command set generation, so selecting it has no effect.");
// Ensure that the model was given either symbolically or explicitly.
STORM_LOG_THROW(!isSymbolicSet()||!isExplicitSet(),storm::exceptions::InvalidSettingsException,"The model may be either given in an explicit or a symbolic format, but not both.");
// Make sure that one "source" for properties is given.
STORM_LOG_WARN_COND(storm::settings::generalSettings().getLpSolver()==storm::settings::modules::GeneralSettings::LpSolver::glpk,"glpk is not selected as the used LP solver, so setting options for glpk has no effect.");
this->addOption(storm::settings::OptionBuilder(moduleName,absoluteOptionName,false,"Sets whether the relative or the absolute error is considered for detecting convergence.").build());
STORM_LOG_WARN_COND(storm::settings::generalSettings().getEquationSolver()==storm::settings::modules::GeneralSettings::EquationSolver::Gmmxx||!optionsSet,"gmm++ is not selected as the equation solver, so setting options for gmm++ has no effect.");
this->addOption(storm::settings::OptionBuilder(moduleName,integerToleranceOption,true,"Sets Gurobi's precision for integer variables.").addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("value","The precision to achieve.").setDefaultValueDouble(1e-06).addValidationFunctionDouble(storm::settings::ArgumentValidators::doubleRangeValidatorExcluding(0.0,1.0)).build()).build());
STORM_LOG_WARN_COND(storm::settings::generalSettings().getLpSolver()==storm::settings::modules::GeneralSettings::LpSolver::Gurobi,"Gurobi is not selected as the used LP solver, so setting options for Gurobi has no effect.");
this->addOption(storm::settings::OptionBuilder(moduleName,absoluteOptionName,false,"Sets whether the relative or the absolute error is considered for detecting convergence.").build());
STORM_LOG_WARN_COND(storm::settings::generalSettings().getEquationSolver()==storm::settings::modules::GeneralSettings::EquationSolver::Native||!optionSet,"Native is not selected as the equation solver, so setting options for native has no effect.");
STORM_LOG_THROW(model->getType()==storm::models::MDP,storm::exceptions::InvalidTypeException,"Minimal command set generation is only available for MDPs.");
STORM_LOG_THROW(storm::settings::generalSettings().isSymbolicSet(),storm::exceptions::InvalidSettingsException,"Minimal command set generation is only available for symbolic models.");