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