11template<
typename ValueType>
16template<
typename ValueType>
21template<
typename ValueType>
23 this->setMatrix(std::move(A));
26template<
typename ValueType>
33template<
typename ValueType>
35 localA = std::make_unique<storm::storage::SparseMatrix<ValueType>>(std::move(A));
36 this->A = localA.get();
40template<
typename ValueType>
42 return this->A->getRowCount();
45template<
typename ValueType>
46uint64_t AcyclicLinearEquationSolver<ValueType>::getMatrixColumnCount()
const {
47 return this->A->getColumnCount();
50template<
typename ValueType>
52 STORM_LOG_ASSERT(x.size() == this->A->getRowGroupCount(),
"Provided x-vector has invalid size.");
53 STORM_LOG_ASSERT(b.size() == this->A->getRowCount(),
"Provided b-vector has invalid size.");
66 auxiliaryRowVector = std::vector<ValueType>(this->A->getRowCount());
67 auxiliaryRowVector2 = std::vector<ValueType>(this->A->getRowCount());
70 std::vector<ValueType>* xPtr = &x;
71 std::vector<ValueType>
const* bPtr = &b;
73 STORM_LOG_ASSERT(rowOrdering->size() == b.size(),
"b-vector has unexpected size.");
74 auxiliaryRowVector->resize(b.size());
76 for (
auto const& bFactor : bFactors) {
77 (*auxiliaryRowVector)[bFactor.first] *= bFactor.second;
79 bPtr = &auxiliaryRowVector.get();
80 xPtr = &auxiliaryRowVector2.get();
83 this->multiplier->multiplyGaussSeidel(env, *xPtr, bPtr,
true);
86 for (uint64_t newRow = 0; newRow < x.size(); ++newRow) {
87 x[(*rowOrdering)[newRow]] = (*xPtr)[newRow];
91 if (!this->isCachingEnabled()) {
97template<
typename ValueType>
102template<
typename ValueType>
110template<
typename ValueType>
113 orderedMatrix = boost::none;
114 rowOrdering = boost::none;
115 auxiliaryRowVector = boost::none;
116 auxiliaryRowVector2 = boost::none;
123#ifdef STORM_HAVE_CARL
This solver can be used on equation systems that are known to be acyclic.
virtual LinearEquationSolverProblemFormat getEquationProblemFormat(storm::Environment const &env) const override
Retrieves the format in which this solver expects to solve equations.
virtual void clearCache() const override
virtual bool internalSolveEquations(storm::Environment const &env, std::vector< ValueType > &x, std::vector< ValueType > const &b) const override
virtual void setMatrix(storm::storage::SparseMatrix< ValueType > const &A) override
virtual LinearEquationSolverRequirements getRequirements(Environment const &env) const override
Retrieves the requirements of the solver under the current settings.
AcyclicLinearEquationSolver()
LinearEquationSolverRequirements & requireAcyclic(bool critical=true)
std::unique_ptr< Multiplier< ValueType > > create(Environment const &env, storm::storage::SparseMatrix< ValueType > const &matrix)
A class that holds a possibly non-square matrix in the compressed row storage format.
#define STORM_LOG_ASSERT(cond, message)
storm::storage::SparseMatrix< ValueType > createReorderedMatrix(storm::storage::SparseMatrix< ValueType > const &matrix, std::vector< uint64_t > const &newToOrigIndexMap, std::vector< std::pair< uint64_t, ValueType > > &bFactors)
reorders the row group such that the i'th row of the new matrix corresponds to the order[i]'th row of...
boost::optional< std::vector< uint64_t > > computeTopologicalGroupOrdering(storm::storage::SparseMatrix< ValueType > const &matrix)
Returns a reordering of the matrix row(groups) and columns such that we can solve the (minmax or line...
LinearEquationSolverProblemFormat
void selectVectorValues(std::vector< T > &vector, storm::storage::BitVector const &positions, std::vector< T > const &values)
Selects the elements from a vector at the specified positions and writes them consecutively into anot...