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
tempestpy_adaptions
David_Korzeniewski
10 years ago
6 changed files with 179 additions and 17 deletions
-
9src/settings/SettingsManager.cpp
-
10src/settings/SettingsManager.h
-
58src/settings/modules/TopologicalValueIterationEquationSolverSettings.cpp
-
87src/settings/modules/TopologicalValueIterationEquationSolverSettings.h
-
16src/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