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.
 
 
 
 

93 lines
6.6 KiB

#include "src/settings/modules/CuddSettings.h"
#include "src/settings/SettingsManager.h"
namespace storm {
namespace settings {
namespace modules {
const std::string CuddSettings::moduleName = "cudd";
const std::string CuddSettings::precisionOptionName = "precision";
const std::string CuddSettings::maximalMemoryOptionName = "maxmem";
const std::string CuddSettings::reorderOptionName = "reorder";
CuddSettings::CuddSettings(storm::settings::SettingsManager& settingsManager) : ModuleSettings(settingsManager, moduleName) {
this->addOption(storm::settings::OptionBuilder(moduleName, precisionOptionName, true, "Sets the precision used by Cudd.").addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("value", "The precision up to which to constants are considered to be different.").setDefaultValueDouble(1e-15).addValidationFunctionDouble(storm::settings::ArgumentValidators::doubleRangeValidatorExcluding(0.0, 1.0)).build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName, maximalMemoryOptionName, true, "Sets the upper bound of memory available to Cudd in MB.").addArgument(storm::settings::ArgumentBuilder::createUnsignedIntegerArgument("value", "The memory available to Cudd (0 means unlimited).").setDefaultValueUnsignedInteger(2048).build()).build());
std::vector<std::string> reorderingTechniques;
reorderingTechniques.push_back("none");
reorderingTechniques.push_back("random");
reorderingTechniques.push_back("randompivot");
reorderingTechniques.push_back("sift");
reorderingTechniques.push_back("siftconv");
reorderingTechniques.push_back("ssift");
reorderingTechniques.push_back("ssiftconv");
reorderingTechniques.push_back("gsift");
reorderingTechniques.push_back("gsiftconv");
reorderingTechniques.push_back("win2");
reorderingTechniques.push_back("win2conv");
reorderingTechniques.push_back("win3");
reorderingTechniques.push_back("win3conv");
reorderingTechniques.push_back("win4");
reorderingTechniques.push_back("win4conv");
reorderingTechniques.push_back("annealing");
reorderingTechniques.push_back("genetic");
reorderingTechniques.push_back("exact");
this->addOption(storm::settings::OptionBuilder(moduleName, reorderOptionName, true, "Sets the reordering technique used by Cudd.").addArgument(storm::settings::ArgumentBuilder::createStringArgument("method", "Sets which technique is used by Cudd's reordering routines. Must be in {none, random, randompivot, sift, siftconv, ssift, ssiftconv, gsift, gsiftconv, win2, win2conv, win3, win3conv, win4, win4conv, annealing, genetic, exact}.").setDefaultValueString("gsift").addValidationFunctionString(storm::settings::ArgumentValidators::stringInListValidator(reorderingTechniques)).build()).build());
}
double CuddSettings::getConstantPrecision() const {
return this->getOption(precisionOptionName).getArgumentByName("value").getValueAsDouble();
}
uint_fast64_t CuddSettings::getMaximalMemory() const {
return this->getOption(maximalMemoryOptionName).getArgumentByName("value").getValueAsUnsignedInteger();
}
CuddSettings::ReorderingTechnique CuddSettings::getReorderingTechnique() const {
std::string reorderingTechniqueAsString = this->getOption(reorderOptionName).getArgumentByName("method").getValueAsString();
if (reorderingTechniqueAsString == "none") {
return CuddSettings::ReorderingTechnique::None;
} else if (reorderingTechniqueAsString == "random") {
return CuddSettings::ReorderingTechnique::Random;
} else if (reorderingTechniqueAsString == "randompivot") {
return CuddSettings::ReorderingTechnique::RandomPivot;
} else if (reorderingTechniqueAsString == "sift") {
return CuddSettings::ReorderingTechnique::Sift;
} else if (reorderingTechniqueAsString == "siftconv") {
return CuddSettings::ReorderingTechnique::SiftConv;
} else if (reorderingTechniqueAsString == "ssift") {
return CuddSettings::ReorderingTechnique::SymmetricSift;
} else if (reorderingTechniqueAsString == "ssiftconv") {
return CuddSettings::ReorderingTechnique::SymmetricSiftConv;
} else if (reorderingTechniqueAsString == "gsift") {
return CuddSettings::ReorderingTechnique::GroupSift;
} else if (reorderingTechniqueAsString == "gsiftconv") {
return CuddSettings::ReorderingTechnique::GroupSiftConv;
} else if (reorderingTechniqueAsString == "win2") {
return CuddSettings::ReorderingTechnique::Win2;
} else if (reorderingTechniqueAsString == "win2conv") {
return CuddSettings::ReorderingTechnique::Win2Conv;
} else if (reorderingTechniqueAsString == "win3") {
return CuddSettings::ReorderingTechnique::Win3;
} else if (reorderingTechniqueAsString == "win3conv") {
return CuddSettings::ReorderingTechnique::Win3Conv;
} else if (reorderingTechniqueAsString == "win4") {
return CuddSettings::ReorderingTechnique::Win4;
} else if (reorderingTechniqueAsString == "win4conv") {
return CuddSettings::ReorderingTechnique::Win4Conv;
} else if (reorderingTechniqueAsString == "annealing") {
return CuddSettings::ReorderingTechnique::Annealing;
} else if (reorderingTechniqueAsString == "genetic") {
return CuddSettings::ReorderingTechnique::Genetic;
} else if (reorderingTechniqueAsString == "exact") {
return CuddSettings::ReorderingTechnique::Exact;
}
STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Illegal value '" << reorderingTechniqueAsString << "' set as reordering technique of Cudd.");
}
} // namespace modules
} // namespace settings
} // namespace storm