9 changed files with 184 additions and 9 deletions
-
4src/storm/environment/SubEnvironment.cpp
-
33src/storm/environment/solver/OviSolverEnvironment.cpp
-
25src/storm/environment/solver/OviSolverEnvironment.h
-
9src/storm/environment/solver/SolverEnvironment.cpp
-
4src/storm/environment/solver/SolverEnvironment.h
-
2src/storm/settings/SettingsManager.cpp
-
42src/storm/settings/modules/OviSolverSettings.cpp
-
36src/storm/settings/modules/OviSolverSettings.h
-
38src/storm/solver/IterativeMinMaxLinearEquationSolver.cpp
@ -0,0 +1,33 @@ |
|||
#include "storm/environment/solver/OviSolverEnvironment.h"
|
|||
|
|||
#include "storm/settings/SettingsManager.h"
|
|||
#include "storm/settings/modules/OviSolverSettings.h"
|
|||
#include "storm/utility/constants.h"
|
|||
#include "storm/utility/macros.h"
|
|||
|
|||
namespace storm { |
|||
|
|||
OviSolverEnvironment::OviSolverEnvironment() { |
|||
auto const& oviSettings = storm::settings::getModule<storm::settings::modules::OviSolverSettings>(); |
|||
precisionUpdateFactor = storm::utility::convertNumber<storm::RationalNumber>(oviSettings.getPrecisionUpdateFactor()); |
|||
maxVerificationIterationFactor = storm::utility::convertNumber<storm::RationalNumber>(oviSettings.getMaxVerificationIterationFactor()); |
|||
relevantValuesForPrecisionUpdate = oviSettings.useRelevantValuesForPrecisionUpdate(); |
|||
}; |
|||
|
|||
OviSolverEnvironment::~OviSolverEnvironment() { |
|||
// Intentionally left empty
|
|||
} |
|||
|
|||
storm::RationalNumber OviSolverEnvironment::getPrecisionUpdateFactor() const { |
|||
return precisionUpdateFactor; |
|||
} |
|||
|
|||
storm::RationalNumber OviSolverEnvironment::getMaxVerificationIterationFactor() const { |
|||
return maxVerificationIterationFactor; |
|||
} |
|||
|
|||
bool OviSolverEnvironment::useRelevantValuesForPrecisionUpdate() const { |
|||
return relevantValuesForPrecisionUpdate; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,25 @@ |
|||
#pragma once |
|||
|
|||
#include "storm/environment/solver/SolverEnvironment.h" |
|||
|
|||
#include "storm/adapters/RationalNumberAdapter.h" |
|||
|
|||
namespace storm { |
|||
|
|||
class OviSolverEnvironment { |
|||
public: |
|||
|
|||
OviSolverEnvironment(); |
|||
~OviSolverEnvironment(); |
|||
|
|||
storm::RationalNumber getPrecisionUpdateFactor() const; |
|||
storm::RationalNumber getMaxVerificationIterationFactor() const; |
|||
bool useRelevantValuesForPrecisionUpdate() const; |
|||
|
|||
private: |
|||
storm::RationalNumber precisionUpdateFactor; |
|||
storm::RationalNumber maxVerificationIterationFactor; |
|||
bool relevantValuesForPrecisionUpdate; |
|||
}; |
|||
} |
|||
|
@ -0,0 +1,42 @@ |
|||
#include "storm/settings/modules/OviSolverSettings.h"
|
|||
|
|||
#include "storm/settings/Option.h"
|
|||
#include "storm/settings/ArgumentBuilder.h"
|
|||
#include "storm/settings/OptionBuilder.h"
|
|||
|
|||
#include "storm/utility/macros.h"
|
|||
#include "storm/exceptions/IllegalArgumentValueException.h"
|
|||
|
|||
namespace storm { |
|||
namespace settings { |
|||
namespace modules { |
|||
|
|||
const std::string OviSolverSettings::moduleName = "ovi"; |
|||
const std::string OviSolverSettings::precisionUpdateFactorOptionName = "precision-update-factor"; |
|||
const std::string OviSolverSettings::maxVerificationIterationFactorOptionName = "max-verification-iter-factor"; |
|||
const std::string OviSolverSettings::useRelevantValuesForPrecisionUpdateOptionName = "use-relevant-values"; |
|||
|
|||
OviSolverSettings::OviSolverSettings() : ModuleSettings(moduleName) { |
|||
|
|||
this->addOption(storm::settings::OptionBuilder(moduleName, precisionUpdateFactorOptionName, false, "Sets with which factor the precision of the inner value iteration is updated.").setIsAdvanced().addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("factor", "The factor.").setDefaultValueDouble(0.5).addValidatorDouble(ArgumentValidatorFactory::createDoubleRangeValidatorExcluding(0.0, 1.0)).build()).build()); |
|||
|
|||
this->addOption(storm::settings::OptionBuilder(moduleName, useRelevantValuesForPrecisionUpdateOptionName, false, "Sets whether the precision of the inner value iteration is only based on the relevant values (i.e. initial states).").setIsAdvanced().build()); |
|||
|
|||
this->addOption(storm::settings::OptionBuilder(moduleName, maxVerificationIterationFactorOptionName, false, "Controls how many verification iterations are performed before guessing a new upper bound.").setIsAdvanced().addArgument(storm::settings::ArgumentBuilder::createDoubleArgument("factor", "The factor.").setDefaultValueDouble(0.1).addValidatorDouble(ArgumentValidatorFactory::createDoubleGreaterValidator(0.0)).build()).build()); |
|||
} |
|||
|
|||
double OviSolverSettings::getPrecisionUpdateFactor() const { |
|||
return this->getOption(precisionUpdateFactorOptionName).getArgumentByName("factor").getValueAsDouble(); |
|||
} |
|||
|
|||
double OviSolverSettings::getMaxVerificationIterationFactor() const { |
|||
return this->getOption(maxVerificationIterationFactorOptionName).getArgumentByName("factor").getValueAsDouble(); |
|||
} |
|||
|
|||
bool OviSolverSettings::useRelevantValuesForPrecisionUpdate() const { |
|||
return this->getOption(useRelevantValuesForPrecisionUpdateOptionName).getHasOptionBeenSet(); |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
@ -0,0 +1,36 @@ |
|||
#pragma once |
|||
|
|||
#include "storm-config.h" |
|||
#include "storm/settings/modules/ModuleSettings.h" |
|||
|
|||
namespace storm { |
|||
namespace settings { |
|||
namespace modules { |
|||
|
|||
/*! |
|||
* This class represents the settings for the optimistic value iteration solver. |
|||
*/ |
|||
class OviSolverSettings : public ModuleSettings { |
|||
public: |
|||
|
|||
OviSolverSettings(); |
|||
|
|||
double getPrecisionUpdateFactor() const; |
|||
|
|||
double getMaxVerificationIterationFactor() const; |
|||
|
|||
bool useRelevantValuesForPrecisionUpdate() const; |
|||
|
|||
|
|||
// The name of the module. |
|||
static const std::string moduleName; |
|||
|
|||
private: |
|||
static const std::string precisionUpdateFactorOptionName; |
|||
static const std::string maxVerificationIterationFactorOptionName; |
|||
static const std::string useRelevantValuesForPrecisionUpdateOptionName; |
|||
}; |
|||
|
|||
} |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue