You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
4.9 KiB
82 lines
4.9 KiB
#include "storm-pars/settings/modules/RegionSettings.h"
|
|
|
|
#include "storm/settings/Option.h"
|
|
#include "storm/settings/OptionBuilder.h"
|
|
#include "storm/settings/ArgumentBuilder.h"
|
|
#include "storm/settings/Argument.h"
|
|
|
|
#include "storm/utility/macros.h"
|
|
#include "storm/exceptions/IllegalArgumentValueException.h"
|
|
|
|
namespace storm {
|
|
namespace settings {
|
|
namespace modules {
|
|
|
|
const std::string RegionSettings::moduleName = "region";
|
|
const std::string RegionSettings::regionOptionName = "region";
|
|
const std::string RegionSettings::refineOptionName = "refine";
|
|
const std::string RegionSettings::checkEngineOptionName = "engine";
|
|
const std::string RegionSettings::printNoIllustrationOptionName = "noillustration";
|
|
const std::string RegionSettings::printFullResultOptionName = "printfullresult";
|
|
|
|
RegionSettings::RegionSettings() : ModuleSettings(moduleName) {
|
|
this->addOption(storm::settings::OptionBuilder(moduleName, regionOptionName, true, "Sets the region(s) considered for analysis.")
|
|
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("regioninput", "The region(s) given in format a<=x<=b,c<=y<=d seperated by ';'. Can also be point to a file.").build()).build());
|
|
|
|
this->addOption(storm::settings::OptionBuilder(moduleName, refineOptionName, true, "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());
|
|
|
|
std::vector<std::string> engines = {"pl", "exactpl", "validatingpl"};
|
|
this->addOption(storm::settings::OptionBuilder(moduleName, checkEngineOptionName, false, "Sets which engine is used for analyzing regions.")
|
|
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name", "The name of the engine to use.").addValidatorString(ArgumentValidatorFactory::createMultipleChoiceValidator(engines)).setDefaultValueString("pl").build()).build());
|
|
|
|
this->addOption(storm::settings::OptionBuilder(moduleName, printNoIllustrationOptionName, true, "If set, no illustration of the result is printed.").build());
|
|
|
|
this->addOption(storm::settings::OptionBuilder(moduleName, printFullResultOptionName, true, "If set, the full result for every region is printed.").build());
|
|
}
|
|
|
|
bool RegionSettings::isRegionSet() const {
|
|
return this->getOption(regionOptionName).getHasOptionBeenSet();
|
|
}
|
|
|
|
std::string RegionSettings::getRegionString() const {
|
|
return this->getOption(regionOptionName).getArgumentByName("regioninput").getValueAsString();
|
|
}
|
|
|
|
bool RegionSettings::isRefineSet() const {
|
|
return this->getOption(refineOptionName).getHasOptionBeenSet();
|
|
}
|
|
|
|
double RegionSettings::getRefinementThreshold() const {
|
|
return this->getOption(refineOptionName).getArgumentByName("threshold").getValueAsDouble();
|
|
}
|
|
|
|
storm::modelchecker::RegionCheckEngine RegionSettings::getRegionCheckEngine() const {
|
|
std::string engineString = this->getOption(regionOptionName).getArgumentByName("regioninput").getValueAsString();
|
|
|
|
storm::modelchecker::RegionCheckEngine result;
|
|
if (engineString == "pl") {
|
|
result = storm::modelchecker::RegionCheckEngine::ParameterLifting;
|
|
} else if (engineString == "exactpl") {
|
|
result = storm::modelchecker::RegionCheckEngine::ExactParameterLifting;
|
|
} else if (engineString == "validatingpl") {
|
|
result = storm::modelchecker::RegionCheckEngine::ValidatingParameterLifting;
|
|
} else {
|
|
STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown region check engine '" << engineString << "'.");
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
bool RegionSettings::isPrintNoIllustrationSet() const {
|
|
return this->getOption(printNoIllustrationOptionName).getHasOptionBeenSet();
|
|
}
|
|
|
|
bool RegionSettings::isPrintFullResultSet() const {
|
|
return this->getOption(printFullResultOptionName).getHasOptionBeenSet();
|
|
}
|
|
|
|
|
|
} // namespace modules
|
|
} // namespace settings
|
|
} // namespace storm
|