Browse Source

Factory, Testing Environment (Topological Excluded)

main
Jan Erik Karuc 5 years ago
parent
commit
4fdfc37341
  1. 2
      src/storm/solver/IterativeMinMaxLinearEquationSolver.cpp
  2. 4
      src/storm/solver/MinMaxLinearEquationSolver.cpp
  3. 2
      src/storm/solver/SolverSelectionOptions.cpp
  4. 2
      src/storm/solver/SolverSelectionOptions.h
  5. 36
      src/test/storm/modelchecker/prctl/mdp/MdpPrctlModelCheckerTest.cpp
  6. 15
      src/test/storm/solver/MinMaxLinearEquationSolverTest.cpp

2
src/storm/solver/IterativeMinMaxLinearEquationSolver.cpp

@ -229,8 +229,6 @@ namespace storm {
} }
} }
template<typename ValueType> template<typename ValueType>
MinMaxLinearEquationSolverRequirements IterativeMinMaxLinearEquationSolver<ValueType>::getRequirements(Environment const& env, boost::optional<storm::solver::OptimizationDirection> const& direction, bool const& hasInitialScheduler) const { MinMaxLinearEquationSolverRequirements IterativeMinMaxLinearEquationSolver<ValueType>::getRequirements(Environment const& env, boost::optional<storm::solver::OptimizationDirection> const& direction, bool const& hasInitialScheduler) const {
auto method = getMethod(env, storm::NumberTraits<ValueType>::IsExact); auto method = getMethod(env, storm::NumberTraits<ValueType>::IsExact);

4
src/storm/solver/MinMaxLinearEquationSolver.cpp

@ -203,7 +203,7 @@ namespace storm {
std::unique_ptr<MinMaxLinearEquationSolver<ValueType>> GeneralMinMaxLinearEquationSolverFactory<ValueType>::create(Environment const& env) const { std::unique_ptr<MinMaxLinearEquationSolver<ValueType>> GeneralMinMaxLinearEquationSolverFactory<ValueType>::create(Environment const& env) const {
std::unique_ptr<MinMaxLinearEquationSolver<ValueType>> result; std::unique_ptr<MinMaxLinearEquationSolver<ValueType>> result;
auto method = env.solver().minMax().getMethod(); auto method = env.solver().minMax().getMethod();
if (method == MinMaxMethod::ValueIteration || method == MinMaxMethod::PolicyIteration || method == MinMaxMethod::RationalSearch || method == MinMaxMethod::IntervalIteration || method == MinMaxMethod::SoundValueIteration || method == MinMaxMethod::ViToPi) {
if (method == MinMaxMethod::ValueIteration || method == MinMaxMethod::PolicyIteration || method == MinMaxMethod::RationalSearch || method == MinMaxMethod::IntervalIteration || method == MinMaxMethod::SoundValueIteration || method == MinMaxMethod::OptimisticValueIteration || method == MinMaxMethod::ViToPi) {
result = std::make_unique<IterativeMinMaxLinearEquationSolver<ValueType>>(std::make_unique<GeneralLinearEquationSolverFactory<ValueType>>()); result = std::make_unique<IterativeMinMaxLinearEquationSolver<ValueType>>(std::make_unique<GeneralLinearEquationSolverFactory<ValueType>>());
} else if (method == MinMaxMethod::Topological) { } else if (method == MinMaxMethod::Topological) {
result = std::make_unique<TopologicalMinMaxLinearEquationSolver<ValueType>>(); result = std::make_unique<TopologicalMinMaxLinearEquationSolver<ValueType>>();
@ -222,7 +222,7 @@ namespace storm {
std::unique_ptr<MinMaxLinearEquationSolver<storm::RationalNumber>> GeneralMinMaxLinearEquationSolverFactory<storm::RationalNumber>::create(Environment const& env) const { std::unique_ptr<MinMaxLinearEquationSolver<storm::RationalNumber>> GeneralMinMaxLinearEquationSolverFactory<storm::RationalNumber>::create(Environment const& env) const {
std::unique_ptr<MinMaxLinearEquationSolver<storm::RationalNumber>> result; std::unique_ptr<MinMaxLinearEquationSolver<storm::RationalNumber>> result;
auto method = env.solver().minMax().getMethod(); auto method = env.solver().minMax().getMethod();
if (method == MinMaxMethod::ValueIteration || method == MinMaxMethod::PolicyIteration || method == MinMaxMethod::RationalSearch || method == MinMaxMethod::IntervalIteration || method == MinMaxMethod::SoundValueIteration || method == MinMaxMethod::ViToPi) {
if (method == MinMaxMethod::ValueIteration || method == MinMaxMethod::PolicyIteration || method == MinMaxMethod::RationalSearch || method == MinMaxMethod::IntervalIteration || method == MinMaxMethod::SoundValueIteration || method == MinMaxMethod::OptimisticValueIteration || method == MinMaxMethod::ViToPi) {
result = std::make_unique<IterativeMinMaxLinearEquationSolver<storm::RationalNumber>>(std::make_unique<GeneralLinearEquationSolverFactory<storm::RationalNumber>>()); result = std::make_unique<IterativeMinMaxLinearEquationSolver<storm::RationalNumber>>(std::make_unique<GeneralLinearEquationSolverFactory<storm::RationalNumber>>());
} else if (method == MinMaxMethod::LinearProgramming) { } else if (method == MinMaxMethod::LinearProgramming) {
result = std::make_unique<LpMinMaxLinearEquationSolver<storm::RationalNumber>>(std::make_unique<storm::utility::solver::LpSolverFactory<storm::RationalNumber>>()); result = std::make_unique<LpMinMaxLinearEquationSolver<storm::RationalNumber>>(std::make_unique<storm::utility::solver::LpSolverFactory<storm::RationalNumber>>());

2
src/storm/solver/SolverSelectionOptions.cpp

@ -18,6 +18,8 @@ namespace storm {
return "intervaliteration"; return "intervaliteration";
case MinMaxMethod::SoundValueIteration: case MinMaxMethod::SoundValueIteration:
return "soundvalueiteration"; return "soundvalueiteration";
case MinMaxMethod::OptimisticValueIteration:
return "optimisticvalueiteration";
case MinMaxMethod::TopologicalCuda: case MinMaxMethod::TopologicalCuda:
return "topologicalcuda"; return "topologicalcuda";
case MinMaxMethod::ViToPi: case MinMaxMethod::ViToPi:

2
src/storm/solver/SolverSelectionOptions.h

@ -6,7 +6,7 @@
namespace storm { namespace storm {
namespace solver { namespace solver {
ExtendEnumsWithSelectionField(MinMaxMethod, ValueIteration, OptimisticValueIteration, PolicyIteration, LinearProgramming, Topological, RationalSearch, IntervalIteration, SoundValueIteration, TopologicalCuda, ViToPi)
ExtendEnumsWithSelectionField(MinMaxMethod, ValueIteration, PolicyIteration, LinearProgramming, Topological, RationalSearch, IntervalIteration, SoundValueIteration, OptimisticValueIteration, TopologicalCuda, ViToPi)
ExtendEnumsWithSelectionField(MultiplierType, Native, Gmmxx) ExtendEnumsWithSelectionField(MultiplierType, Native, Gmmxx)
ExtendEnumsWithSelectionField(GameMethod, PolicyIteration, ValueIteration) ExtendEnumsWithSelectionField(GameMethod, PolicyIteration, ValueIteration)
ExtendEnumsWithSelectionField(LraMethod, LinearProgramming, ValueIteration, GainBiasEquations, LraDistributionEquations) ExtendEnumsWithSelectionField(LraMethod, LinearProgramming, ValueIteration, GainBiasEquations, LraDistributionEquations)

36
src/test/storm/modelchecker/prctl/mdp/MdpPrctlModelCheckerTest.cpp

@ -92,6 +92,7 @@ namespace {
return env; return env;
} }
}; };
class SparseDoubleSoundValueIterationEnvironment { class SparseDoubleSoundValueIterationEnvironment {
public: public:
static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; // Unused for sparse models static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; // Unused for sparse models
@ -109,6 +110,23 @@ namespace {
} }
}; };
class SparseDoubleOptimisticValueIterationEnvironment {
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().setForceSoundness(true);
env.solver().minMax().setMethod(storm::solver::MinMaxMethod::OptimisticValueIteration);
env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-6));
env.solver().minMax().setRelativeTerminationCriterion(false);
return env;
}
};
class SparseDoubleTopologicalValueIterationEnvironment { class SparseDoubleTopologicalValueIterationEnvironment {
public: public:
static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; // Unused for sparse models static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; // Unused for sparse models
@ -229,6 +247,22 @@ namespace {
return env; return env;
} }
}; };
class HybridCuddDoubleOptimisticValueIterationEnvironment {
public:
static const storm::dd::DdType ddType = storm::dd::DdType::CUDD;
static const MdpEngine engine = MdpEngine::Hybrid;
static const bool isExact = false;
typedef double ValueType;
typedef storm::models::symbolic::Mdp<ddType, ValueType> ModelType;
static storm::Environment createEnvironment() {
storm::Environment env;
env.solver().setForceSoundness(true);
env.solver().minMax().setMethod(storm::solver::MinMaxMethod::OptimisticValueIteration);
env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-6));
env.solver().minMax().setRelativeTerminationCriterion(false);
return env;
}
};
class HybridSylvanRationalPolicyIterationEnvironment { class HybridSylvanRationalPolicyIterationEnvironment {
public: public:
static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan; static const storm::dd::DdType ddType = storm::dd::DdType::Sylvan;
@ -418,6 +452,7 @@ namespace {
JitSparseDoubleValueIterationEnvironment, JitSparseDoubleValueIterationEnvironment,
SparseDoubleIntervalIterationEnvironment, SparseDoubleIntervalIterationEnvironment,
SparseDoubleSoundValueIterationEnvironment, SparseDoubleSoundValueIterationEnvironment,
SparseDoubleOptimisticValueIterationEnvironment,
SparseDoubleTopologicalValueIterationEnvironment, SparseDoubleTopologicalValueIterationEnvironment,
SparseDoubleTopologicalSoundValueIterationEnvironment, SparseDoubleTopologicalSoundValueIterationEnvironment,
SparseRationalPolicyIterationEnvironment, SparseRationalPolicyIterationEnvironment,
@ -426,6 +461,7 @@ namespace {
HybridCuddDoubleValueIterationEnvironment, HybridCuddDoubleValueIterationEnvironment,
HybridSylvanDoubleValueIterationEnvironment, HybridSylvanDoubleValueIterationEnvironment,
HybridCuddDoubleSoundValueIterationEnvironment, HybridCuddDoubleSoundValueIterationEnvironment,
HybridCuddDoubleOptimisticValueIterationEnvironment,
HybridSylvanRationalPolicyIterationEnvironment, HybridSylvanRationalPolicyIterationEnvironment,
DdCuddDoubleValueIterationEnvironment, DdCuddDoubleValueIterationEnvironment,
JaniDdCuddDoubleValueIterationEnvironment, JaniDdCuddDoubleValueIterationEnvironment,

15
src/test/storm/solver/MinMaxLinearEquationSolverTest.cpp

@ -23,6 +23,7 @@ namespace {
return env; return env;
} }
}; };
class DoubleSoundViEnvironment { class DoubleSoundViEnvironment {
public: public:
typedef double ValueType; typedef double ValueType;
@ -49,6 +50,19 @@ namespace {
} }
}; };
class DoubleOptimisticViEnvironment {
public:
typedef double ValueType;
static const bool isExact = false;
static storm::Environment createEnvironment() {
storm::Environment env;
env.solver().minMax().setMethod(storm::solver::MinMaxMethod::OptimisticValueIteration);
env.solver().setForceSoundness(true);
env.solver().minMax().setPrecision(storm::utility::convertNumber<storm::RationalNumber>(1e-6));
return env;
}
};
class DoubleTopologicalViEnvironment { class DoubleTopologicalViEnvironment {
public: public:
typedef double ValueType; typedef double ValueType;
@ -124,6 +138,7 @@ namespace {
DoubleViEnvironment, DoubleViEnvironment,
DoubleSoundViEnvironment, DoubleSoundViEnvironment,
DoubleIntervalIterationEnvironment, DoubleIntervalIterationEnvironment,
DoubleOptimisticViEnvironment,
DoubleTopologicalViEnvironment, DoubleTopologicalViEnvironment,
DoubleTopologicalCudaViEnvironment, DoubleTopologicalCudaViEnvironment,
DoublePIEnvironment, DoublePIEnvironment,

Loading…
Cancel
Save