Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SymbolicNativeLinearEquationSolver.h
Go to the documentation of this file.
1#pragma once
2
6
8
9namespace storm {
10namespace solver {
11
16template<storm::dd::DdType DdType, typename ValueType = double>
18 public:
25
39 std::set<storm::expressions::Variable> const& rowMetaVariables,
40 std::set<storm::expressions::Variable> const& columnMetaVariables,
41 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs);
42
54 SymbolicNativeLinearEquationSolver(storm::dd::Bdd<DdType> const& allRows, std::set<storm::expressions::Variable> const& rowMetaVariables,
55 std::set<storm::expressions::Variable> const& columnMetaVariables,
56 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs);
57
68 storm::dd::Add<DdType, ValueType> const& b) const override;
69
71 virtual LinearEquationSolverRequirements getRequirements(Environment const& env) const override;
72
73 private:
74 NativeLinearEquationSolverMethod getMethod(Environment const& env, bool isExactMode) const;
75
80 storm::dd::Add<DdType, ValueType> solveEquationsRationalSearch(Environment const& env, storm::dd::Add<DdType, ValueType> const& x,
82
86 bool isSolutionFixedPoint(storm::dd::Add<DdType, ValueType> const& x, storm::dd::Add<DdType, ValueType> const& b) const;
87
88 template<typename RationalType, typename ImpreciseType>
89 static storm::dd::Add<DdType, RationalType> sharpen(uint64_t precision, SymbolicNativeLinearEquationSolver<DdType, RationalType> const& rationalSolver,
91 bool& isSolution);
92
93 template<typename RationalType, typename ImpreciseType>
94 storm::dd::Add<DdType, RationalType> solveEquationsRationalSearchHelper(Environment const& env,
100 template<typename ImpreciseType>
101 typename std::enable_if<std::is_same<ValueType, ImpreciseType>::value && storm::NumberTraits<ValueType>::IsExact, storm::dd::Add<DdType, ValueType>>::type
102 solveEquationsRationalSearchHelper(Environment const& env, storm::dd::Add<DdType, ValueType> const& x, storm::dd::Add<DdType, ValueType> const& b) const;
103 template<typename ImpreciseType>
104 typename std::enable_if<std::is_same<ValueType, ImpreciseType>::value && !storm::NumberTraits<ValueType>::IsExact, storm::dd::Add<DdType, ValueType>>::type
105 solveEquationsRationalSearchHelper(Environment const& env, storm::dd::Add<DdType, ValueType> const& x, storm::dd::Add<DdType, ValueType> const& b) const;
106 template<typename ImpreciseType>
107 typename std::enable_if<!std::is_same<ValueType, ImpreciseType>::value, storm::dd::Add<DdType, ValueType>>::type solveEquationsRationalSearchHelper(
109
110 template<storm::dd::DdType DdTypePrime, typename ValueTypePrime>
112
113 struct PowerIterationResult {
114 PowerIterationResult(SolverStatus status, uint64_t iterations, storm::dd::Add<DdType, ValueType> const& values)
115 : status(status), iterations(iterations), values(values) {
116 // Intentionally left empty.
117 }
118
119 SolverStatus status;
120 uint64_t iterations;
122 };
123
124 PowerIterationResult performPowerIteration(storm::dd::Add<DdType, ValueType> const& x, storm::dd::Add<DdType, ValueType> const& b,
125 ValueType const& precision, bool relativeTerminationCriterion, uint64_t maximalIterations) const;
126};
127
128template<storm::dd::DdType DdType, typename ValueType>
130 public:
131 using SymbolicLinearEquationSolverFactory<DdType, ValueType>::create;
132
133 virtual std::unique_ptr<storm::solver::SymbolicLinearEquationSolver<DdType, ValueType>> create(Environment const& env) const override;
134};
135
136} // namespace solver
137} // namespace storm
An interface that represents an abstract symbolic linear equation solver.
std::set< storm::expressions::Variable > columnMetaVariables
std::set< storm::expressions::Variable > rowMetaVariables
std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > rowColumnMetaVariablePairs
virtual std::unique_ptr< storm::solver::SymbolicLinearEquationSolver< DdType, ValueType > > create(Environment const &env) const override
An interface that represents an abstract symbolic linear equation solver.
virtual LinearEquationSolverRequirements getRequirements(Environment const &env) const override
Retrieves the requirements of the solver under the current settings.
virtual storm::dd::Add< DdType, ValueType > solveEquations(Environment const &env, storm::dd::Add< DdType, ValueType > const &x, storm::dd::Add< DdType, ValueType > const &b) const override
Solves the equation system A*x = b.
virtual LinearEquationSolverProblemFormat getEquationProblemFormat(Environment const &env) const override
Retrieves the format in which this solver expects to solve equations.
LabParser.cpp.
Definition cli.cpp:18