Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ViOperatorMultiplier.h
Go to the documentation of this file.
1#pragma once
2#include <memory>
3
4#include "Multiplier.h"
5
7
8namespace storm {
9
10namespace storage {
11template<typename ValueType>
12class SparseMatrix;
13}
14
15namespace solver {
16
17template<typename ValueType, bool TrivialRowGrouping>
18class ViOperatorMultiplier : public Multiplier<ValueType> {
19 public:
21 virtual ~ViOperatorMultiplier() = default;
22
23 virtual void multiply(Environment const& env, std::vector<ValueType> const& x, std::vector<ValueType> const* b,
24 std::vector<ValueType>& result) const override;
25 virtual void multiplyGaussSeidel(Environment const& env, std::vector<ValueType>& x, std::vector<ValueType> const* b, bool backwards = true) const override;
26 virtual void multiplyAndReduce(Environment const& env, OptimizationDirection const& dir, std::vector<uint64_t> const& rowGroupIndices,
27 std::vector<ValueType> const& x, std::vector<ValueType> const* b, std::vector<ValueType>& result,
28 std::vector<uint_fast64_t>* choices = nullptr) const override;
29 virtual void multiplyAndReduceGaussSeidel(Environment const& env, OptimizationDirection const& dir, std::vector<uint64_t> const& rowGroupIndices,
30 std::vector<ValueType>& x, std::vector<ValueType> const* b, std::vector<uint_fast64_t>* choices = nullptr,
31 bool backwards = true) const override;
32 virtual void clearCache() const override;
33
34 private:
36
37 ViOpT& initialize() const;
38 ViOpT& initialize(bool backwards) const;
39
40 // We store two operators, one for the forward and one for the backward gauss seidel iterations.
41 // By default, the backward operator is chosen.
42 mutable std::unique_ptr<ViOpT> viOperatorFwd, viOperatorBwd;
43};
44
45} // namespace solver
46} // namespace storm
storm::storage::SparseMatrix< ValueType > const & matrix
Definition Multiplier.h:129
virtual void multiplyAndReduceGaussSeidel(Environment const &env, OptimizationDirection const &dir, std::vector< uint64_t > const &rowGroupIndices, std::vector< ValueType > &x, std::vector< ValueType > const *b, std::vector< uint_fast64_t > *choices=nullptr, bool backwards=true) const override
virtual void multiplyGaussSeidel(Environment const &env, std::vector< ValueType > &x, std::vector< ValueType > const *b, bool backwards=true) const override
Performs a matrix-vector multiplication in gauss-seidel style.
virtual void multiplyAndReduce(Environment const &env, OptimizationDirection const &dir, std::vector< uint64_t > const &rowGroupIndices, std::vector< ValueType > const &x, std::vector< ValueType > const *b, std::vector< ValueType > &result, std::vector< uint_fast64_t > *choices=nullptr) const override
virtual ~ViOperatorMultiplier()=default
virtual void clearCache() const override
virtual void multiply(Environment const &env, std::vector< ValueType > const &x, std::vector< ValueType > const *b, std::vector< ValueType > &result) const override
Performs a matrix-vector multiplication x' = A*x + b.
This class represents the Value Iteration Operator (also known as Bellman operator).
A class that holds a possibly non-square matrix in the compressed row storage format.
LabParser.cpp.
Definition cli.cpp:18