|
|
@ -22,6 +22,7 @@ |
|
|
|
#include "storm/modelchecker/results/QualitativeCheckResult.h"
|
|
|
|
#include "storm/environment/solver/MinMaxSolverEnvironment.h"
|
|
|
|
#include "storm/environment/solver/TopologicalSolverEnvironment.h"
|
|
|
|
#include "storm/environment/solver/MultiplierEnvironment.h"
|
|
|
|
#include "storm/settings/modules/CoreSettings.h"
|
|
|
|
#include "storm/logic/Formulas.h"
|
|
|
|
#include "storm/storage/jani/Property.h"
|
|
|
@ -31,7 +32,7 @@ namespace { |
|
|
|
|
|
|
|
enum class MdpEngine {PrismSparse, JaniSparse, JitSparse, Hybrid, PrismDd, JaniDd}; |
|
|
|
|
|
|
|
class SparseDoubleValueIterationEnvironment { |
|
|
|
class SparseDoubleValueIterationGmmxxGaussSeidelMultEnvironment { |
|
|
|
public: |
|
|
|
static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; // Unused for sparse models
|
|
|
|
static const MdpEngine engine = MdpEngine::PrismSparse; |
|
|
@ -42,6 +43,59 @@ namespace { |
|
|
|
storm::Environment env; |
|
|
|
env.solver().minMax().setMethod(storm::solver::MinMaxMethod::ValueIteration); |
|
|
|
env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-10)); |
|
|
|
env.solver().minMax().setMultiplicationStyle(storm::solver::MultiplicationStyle::GaussSeidel); |
|
|
|
env.solver().multiplier().setType(storm::solver::MultiplierType::Gmmxx); |
|
|
|
return env; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class SparseDoubleValueIterationGmmxxRegularMultEnvironment { |
|
|
|
public: |
|
|
|
static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; // Unused for sparse models
|
|
|
|
static const MdpEngine engine = MdpEngine::PrismSparse; |
|
|
|
static const bool isExact = false; |
|
|
|
typedef double ValueType; |
|
|
|
typedef storm::models::sparse::Mdp<ValueType> ModelType; |
|
|
|
static storm::Environment createEnvironment() { |
|
|
|
storm::Environment env; |
|
|
|
env.solver().minMax().setMethod(storm::solver::MinMaxMethod::ValueIteration); |
|
|
|
env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-10)); |
|
|
|
env.solver().minMax().setMultiplicationStyle(storm::solver::MultiplicationStyle::Regular); |
|
|
|
env.solver().multiplier().setType(storm::solver::MultiplierType::Gmmxx); |
|
|
|
return env; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class SparseDoubleValueIterationNativeGaussSeidelMultEnvironment { |
|
|
|
public: |
|
|
|
static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; // Unused for sparse models
|
|
|
|
static const MdpEngine engine = MdpEngine::PrismSparse; |
|
|
|
static const bool isExact = false; |
|
|
|
typedef double ValueType; |
|
|
|
typedef storm::models::sparse::Mdp<ValueType> ModelType; |
|
|
|
static storm::Environment createEnvironment() { |
|
|
|
storm::Environment env; |
|
|
|
env.solver().minMax().setMethod(storm::solver::MinMaxMethod::ValueIteration); |
|
|
|
env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-10)); |
|
|
|
env.solver().minMax().setMultiplicationStyle(storm::solver::MultiplicationStyle::GaussSeidel); |
|
|
|
env.solver().multiplier().setType(storm::solver::MultiplierType::Native); |
|
|
|
return env; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class SparseDoubleValueIterationNativeRegularMultEnvironment { |
|
|
|
public: |
|
|
|
static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; // Unused for sparse models
|
|
|
|
static const MdpEngine engine = MdpEngine::PrismSparse; |
|
|
|
static const bool isExact = false; |
|
|
|
typedef double ValueType; |
|
|
|
typedef storm::models::sparse::Mdp<ValueType> ModelType; |
|
|
|
static storm::Environment createEnvironment() { |
|
|
|
storm::Environment env; |
|
|
|
env.solver().minMax().setMethod(storm::solver::MinMaxMethod::ValueIteration); |
|
|
|
env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-10)); |
|
|
|
env.solver().minMax().setMultiplicationStyle(storm::solver::MultiplicationStyle::Regular); |
|
|
|
env.solver().multiplier().setType(storm::solver::MultiplierType::Native); |
|
|
|
return env; |
|
|
|
} |
|
|
|
}; |
|
|
@ -447,7 +501,10 @@ namespace { |
|
|
|
}; |
|
|
|
|
|
|
|
typedef ::testing::Types< |
|
|
|
SparseDoubleValueIterationEnvironment, |
|
|
|
SparseDoubleValueIterationGmmxxGaussSeidelMultEnvironment, |
|
|
|
SparseDoubleValueIterationGmmxxRegularMultEnvironment, |
|
|
|
SparseDoubleValueIterationNativeGaussSeidelMultEnvironment, |
|
|
|
SparseDoubleValueIterationNativeRegularMultEnvironment, |
|
|
|
JaniSparseDoubleValueIterationEnvironment, |
|
|
|
JitSparseDoubleValueIterationEnvironment, |
|
|
|
SparseDoubleIntervalIterationEnvironment, |
|
|
|