Browse Source
Created settings module for TopologicalValueIterationNondeterministicLinearEquationSolver and integrated that with the solver.
Created settings module for TopologicalValueIterationNondeterministicLinearEquationSolver and integrated that with the solver.
Former-commit-id: fa1ad5ce2a
main
6 changed files with 179 additions and 17 deletions
-
5src/settings/SettingsManager.cpp
-
8src/settings/SettingsManager.h
-
58src/settings/modules/TopologicalValueIterationEquationSolverSettings.cpp
-
87src/settings/modules/TopologicalValueIterationEquationSolverSettings.h
-
14src/solver/TopologicalValueIterationNondeterministicLinearEquationSolver.cpp
-
16src/solver/TopologicalValueIterationNondeterministicLinearEquationSolver.h
@ -0,0 +1,58 @@ |
|||||
|
#include "src/settings/modules/TopologicalValueIterationEquationSolverSettings.h"
|
||||
|
|
||||
|
#include "src/settings/SettingsManager.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace settings { |
||||
|
namespace modules { |
||||
|
|
||||
|
const std::string TopologicalValueIterationEquationSolverSettings::moduleName = "topologicalValueIteration"; |
||||
|
const std::string TopologicalValueIterationEquationSolverSettings::maximalIterationsOptionName = "maxiter"; |
||||
|
const std::string TopologicalValueIterationEquationSolverSettings::maximalIterationsOptionShortName = "i"; |
||||
|
const std::string TopologicalValueIterationEquationSolverSettings::precisionOptionName = "precision"; |
||||
|
const std::string TopologicalValueIterationEquationSolverSettings::absoluteOptionName = "absolute"; |
||||
|
|
||||
|
TopologicalValueIterationEquationSolverSettings::TopologicalValueIterationEquationSolverSettings(storm::settings::SettingsManager& settingsManager) : ModuleSettings(settingsManager, moduleName) { |
||||
|
|
||||
|
this->addOption(storm::settings::OptionBuilder(moduleName, maximalIterationsOptionName, false, "The maximal number of iterations to perform before iterative solving is aborted.").setShortName(maximalIterationsOptionShortName).addArgument(storm::settings::ArgumentBuilder::createUnsignedIntegerArgument("count", "The maximal iteration count.").setDefaultValueUnsignedInteger(20000).build()).build()); |
||||
|
|
||||
|
this->addOption(storm::settings::OptionBuilder(moduleName, precisionOptionName, false, "The precision used for detecting convergence of iterative methods.").addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("value", "The precision to achieve.").setDefaultValueDouble(1e-06).addValidationFunctionDouble(storm::settings::ArgumentValidators::doubleRangeValidatorExcluding(0.0, 1.0)).build()).build()); |
||||
|
|
||||
|
this->addOption(storm::settings::OptionBuilder(moduleName, absoluteOptionName, false, "Sets whether the relative or the absolute error is considered for detecting convergence.").build()); |
||||
|
} |
||||
|
|
||||
|
bool TopologicalValueIterationEquationSolverSettings::isMaximalIterationCountSet() const { |
||||
|
return this->getOption(maximalIterationsOptionName).getHasOptionBeenSet(); |
||||
|
} |
||||
|
|
||||
|
uint_fast64_t TopologicalValueIterationEquationSolverSettings::getMaximalIterationCount() const { |
||||
|
return this->getOption(maximalIterationsOptionName).getArgumentByName("count").getValueAsUnsignedInteger(); |
||||
|
} |
||||
|
|
||||
|
bool TopologicalValueIterationEquationSolverSettings::isPrecisionSet() const { |
||||
|
return this->getOption(precisionOptionName).getHasOptionBeenSet(); |
||||
|
} |
||||
|
|
||||
|
double TopologicalValueIterationEquationSolverSettings::getPrecision() const { |
||||
|
return this->getOption(precisionOptionName).getArgumentByName("value").getValueAsDouble(); |
||||
|
} |
||||
|
|
||||
|
bool TopologicalValueIterationEquationSolverSettings::isConvergenceCriterionSet() const { |
||||
|
return this->getOption(absoluteOptionName).getHasOptionBeenSet(); |
||||
|
} |
||||
|
|
||||
|
TopologicalValueIterationEquationSolverSettings::ConvergenceCriterion TopologicalValueIterationEquationSolverSettings::getConvergenceCriterion() const { |
||||
|
return this->getOption(absoluteOptionName).getHasOptionBeenSet() ? TopologicalValueIterationEquationSolverSettings::ConvergenceCriterion::Absolute : TopologicalValueIterationEquationSolverSettings::ConvergenceCriterion::Relative; |
||||
|
} |
||||
|
|
||||
|
bool TopologicalValueIterationEquationSolverSettings::check() const { |
||||
|
bool optionsSet = isMaximalIterationCountSet() || isPrecisionSet() || isConvergenceCriterionSet(); |
||||
|
|
||||
|
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."); |
||||
|
|
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
} // namespace modules
|
||||
|
} // namespace settings
|
||||
|
} // namespace storm
|
@ -0,0 +1,87 @@ |
|||||
|
#ifndef STORM_SETTINGS_MODULES_TOPOLOGICALVALUEITERATIONSETTINGS_H_ |
||||
|
#define STORM_SETTINGS_MODULES_TOPOLOGICALVALUEITERATIONSETTINGS_H_ |
||||
|
|
||||
|
#include "src/settings/modules/ModuleSettings.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace settings { |
||||
|
namespace modules { |
||||
|
|
||||
|
/*! |
||||
|
* This class represents the settings for topological value iteration. |
||||
|
*/ |
||||
|
class TopologicalValueIterationEquationSolverSettings : public ModuleSettings { |
||||
|
public: |
||||
|
|
||||
|
// An enumeration of all available convergence criteria. |
||||
|
enum class ConvergenceCriterion { Absolute, Relative }; |
||||
|
|
||||
|
/*! |
||||
|
* Creates a new set of topological value iteration settings that is managed by the given manager. |
||||
|
* |
||||
|
* @param settingsManager The responsible manager. |
||||
|
*/ |
||||
|
TopologicalValueIterationEquationSolverSettings(storm::settings::SettingsManager& settingsManager); |
||||
|
|
||||
|
|
||||
|
/*! |
||||
|
* Retrieves whether the maximal iteration count has been set. |
||||
|
* |
||||
|
* @return True iff the maximal iteration count has been set. |
||||
|
*/ |
||||
|
bool isMaximalIterationCountSet() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the maximal number of iterations to perform until giving up on converging. |
||||
|
* |
||||
|
* @return The maximal iteration count. |
||||
|
*/ |
||||
|
uint_fast64_t getMaximalIterationCount() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves whether the precision has been set. |
||||
|
* |
||||
|
* @return True iff the precision has been set. |
||||
|
*/ |
||||
|
bool isPrecisionSet() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the precision that is used for detecting convergence. |
||||
|
* |
||||
|
* @return The precision to use for detecting convergence. |
||||
|
*/ |
||||
|
double getPrecision() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves whether the convergence criterion has been set. |
||||
|
* |
||||
|
* @return True iff the convergence criterion has been set. |
||||
|
*/ |
||||
|
bool isConvergenceCriterionSet() const; |
||||
|
|
||||
|
/*! |
||||
|
* Retrieves the selected convergence criterion. |
||||
|
* |
||||
|
* @return The selected convergence criterion. |
||||
|
*/ |
||||
|
ConvergenceCriterion getConvergenceCriterion() const; |
||||
|
|
||||
|
bool check() const override; |
||||
|
|
||||
|
// The name of the module. |
||||
|
static const std::string moduleName; |
||||
|
|
||||
|
private: |
||||
|
// Define the string names of the options as constants. |
||||
|
static const std::string techniqueOptionName; |
||||
|
static const std::string maximalIterationsOptionName; |
||||
|
static const std::string maximalIterationsOptionShortName; |
||||
|
static const std::string precisionOptionName; |
||||
|
static const std::string absoluteOptionName; |
||||
|
}; |
||||
|
|
||||
|
} // namespace modules |
||||
|
} // namespace settings |
||||
|
} // namespace storm |
||||
|
|
||||
|
#endif /* STORM_SETTINGS_MODULES_TOPOLOGICALVALUEITERATIONSETTINGS_H_ */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue