Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SymbolicLinearEquationSolver.h
Go to the documentation of this file.
1#ifndef STORM_SOLVER_SYMBOLICLINEAREQUATIONSOLVER_H_
2#define STORM_SOLVER_SYMBOLICLINEAREQUATIONSOLVER_H_
3
4#include <set>
5#include <vector>
6
10
14
16
17namespace storm {
18
19class Environment;
20
21namespace dd {
22template<storm::dd::DdType Type, typename ValueType>
23class Add;
24
25template<storm::dd::DdType Type>
26class Bdd;
27} // namespace dd
28
29namespace solver {
30
35template<storm::dd::DdType DdType, typename ValueType = double>
36class SymbolicLinearEquationSolver : public SymbolicEquationSolver<DdType, ValueType> {
37 public:
39 virtual ~SymbolicLinearEquationSolver() = default;
40
53 std::set<storm::expressions::Variable> const& rowMetaVariables,
54 std::set<storm::expressions::Variable> const& columnMetaVariables,
55 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs);
56
68 SymbolicLinearEquationSolver(storm::dd::Bdd<DdType> const& allRows, std::set<storm::expressions::Variable> const& rowMetaVariables,
69 std::set<storm::expressions::Variable> const& columnMetaVariables,
70 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs);
71
82 storm::dd::Add<DdType, ValueType> const& b) const = 0;
83
96 uint_fast64_t n = 1) const;
97
103
109
111 virtual void setData(storm::dd::Bdd<DdType> const& allRows, std::set<storm::expressions::Variable> const& rowMetaVariables,
112 std::set<storm::expressions::Variable> const& columnMetaVariables,
113 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs);
114
115 protected:
116 // The matrix defining the coefficients of the linear equation system.
118
119 // The row variables.
120 std::set<storm::expressions::Variable> rowMetaVariables;
121
122 // The column variables.
123 std::set<storm::expressions::Variable> columnMetaVariables;
124
125 // The pairs of meta variables used for renaming.
126 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> rowColumnMetaVariablePairs;
127};
128
129template<storm::dd::DdType DdType, typename ValueType>
131 public:
133
134 std::unique_ptr<storm::solver::SymbolicLinearEquationSolver<DdType, ValueType>> create(
135 Environment const& env, storm::dd::Bdd<DdType> const& allRows, std::set<storm::expressions::Variable> const& rowMetaVariables,
136 std::set<storm::expressions::Variable> const& columnMetaVariables,
137 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs) const;
138
139 std::unique_ptr<storm::solver::SymbolicLinearEquationSolver<DdType, ValueType>> create(
140 Environment const& env, storm::dd::Add<DdType, ValueType> const& A, storm::dd::Bdd<DdType> const& allRows,
141 std::set<storm::expressions::Variable> const& rowMetaVariables, std::set<storm::expressions::Variable> const& columnMetaVariables,
142 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs) const;
143
146
147 virtual std::unique_ptr<storm::solver::SymbolicLinearEquationSolver<DdType, ValueType>> create(Environment const& env) const = 0;
148};
149
150template<storm::dd::DdType DdType, typename ValueType>
152 public:
153 using SymbolicLinearEquationSolverFactory<DdType, ValueType>::create;
154
155 virtual std::unique_ptr<storm::solver::SymbolicLinearEquationSolver<DdType, ValueType>> create(Environment const& env) const override;
156};
157
158} // namespace solver
159} // namespace storm
160
161#endif /* STORM_SOLVER_SYMBOLICLINEAREQUATIONSOLVER_H_ */
virtual std::unique_ptr< storm::solver::SymbolicLinearEquationSolver< DdType, ValueType > > create(Environment const &env) const override
std::unique_ptr< storm::solver::SymbolicLinearEquationSolver< DdType, ValueType > > create(Environment const &env, storm::dd::Bdd< DdType > const &allRows, std::set< storm::expressions::Variable > const &rowMetaVariables, std::set< storm::expressions::Variable > const &columnMetaVariables, std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > const &rowColumnMetaVariablePairs) const
virtual std::unique_ptr< storm::solver::SymbolicLinearEquationSolver< DdType, ValueType > > create(Environment const &env) const =0
LinearEquationSolverRequirements getRequirements(Environment const &env) const
LinearEquationSolverProblemFormat getEquationProblemFormat(Environment const &env) const
An interface that represents an abstract symbolic linear equation solver.
virtual void setData(storm::dd::Bdd< DdType > const &allRows, std::set< storm::expressions::Variable > const &rowMetaVariables, std::set< storm::expressions::Variable > const &columnMetaVariables, std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > const &rowColumnMetaVariablePairs)
std::set< storm::expressions::Variable > columnMetaVariables
std::set< storm::expressions::Variable > rowMetaVariables
virtual storm::dd::Add< DdType, ValueType > multiply(storm::dd::Add< DdType, ValueType > const &x, storm::dd::Add< DdType, ValueType > const *b=nullptr, uint_fast64_t n=1) const
Performs repeated matrix-vector multiplication, using x[0] = x and x[i + 1] = A*x[i] + b.
std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > rowColumnMetaVariablePairs
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 =0
Solves the equation system A*x = b.
virtual LinearEquationSolverProblemFormat getEquationProblemFormat(Environment const &env) const
Retrieves the format in which this solver expects to solve equations.
void setMatrix(storm::dd::Add< DdType, ValueType > const &newA)
virtual LinearEquationSolverRequirements getRequirements(Environment const &env) const
Retrieves the requirements of the solver under the current settings.
SFTBDDChecker::Bdd Bdd
LabParser.cpp.
Definition cli.cpp:18