Storm 1.13.0.1
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, typename SolutionType = ValueType>
18class ViOperatorMultiplier : public Multiplier<ValueType, SolutionType> {
19 public:
21 virtual ~ViOperatorMultiplier() = default;
22
23 virtual void multiply(Environment const& env, std::vector<SolutionType> const& x, std::vector<ValueType> const* b,
24 std::vector<SolutionType>& result) const override;
25 virtual void multiplyGaussSeidel(Environment const& env, std::vector<SolutionType>& x, std::vector<ValueType> const* b,
26 bool backwards = true) const override;
27 virtual void multiplyAndReduce(Environment const& env, OptimizationDirection const& dir, std::vector<uint64_t> const& rowGroupIndices,
28 std::vector<SolutionType> const& x, std::vector<ValueType> const* b, std::vector<SolutionType>& result,
29 UncertaintyResolutionMode const& uncertaintyResolutionMode = UncertaintyResolutionMode::Unset,
30 std::vector<uint_fast64_t>* choices = nullptr) const override;
31 virtual void multiplyAndReduceGaussSeidel(Environment const& env, OptimizationDirection const& dir, std::vector<uint64_t> const& rowGroupIndices,
32 std::vector<SolutionType>& x, std::vector<ValueType> const* b, std::vector<uint_fast64_t>* choices = nullptr,
33 bool backwards = true) const override;
34 virtual void clearCache() const override;
35
36 private:
38
39 ViOpT& initialize() const;
40 ViOpT& initialize(bool backwards) const;
41
42 // We store two operators, one for the forward and one for the backward gauss seidel iterations.
43 // By default, the backward operator is chosen.
44 mutable std::unique_ptr<ViOpT> viOperatorFwd, viOperatorBwd;
45};
46
47} // namespace solver
48} // namespace storm
Multiplier(storm::storage::SparseMatrix< ValueType > const &matrix)
storm::storage::SparseMatrix< ValueType > const & matrix
Definition Multiplier.h:168
virtual void multiplyAndReduceGaussSeidel(Environment const &env, OptimizationDirection const &dir, std::vector< uint64_t > const &rowGroupIndices, std::vector< SolutionType > &x, std::vector< ValueType > const *b, std::vector< uint_fast64_t > *choices=nullptr, bool backwards=true) const override
virtual void multiplyAndReduce(Environment const &env, OptimizationDirection const &dir, std::vector< uint64_t > const &rowGroupIndices, std::vector< SolutionType > const &x, std::vector< ValueType > const *b, std::vector< SolutionType > &result, UncertaintyResolutionMode const &uncertaintyResolutionMode=UncertaintyResolutionMode::Unset, std::vector< uint_fast64_t > *choices=nullptr) const override
virtual void multiply(Environment const &env, std::vector< SolutionType > const &x, std::vector< ValueType > const *b, std::vector< SolutionType > &result) const override
ViOperatorMultiplier(storm::storage::SparseMatrix< ValueType > const &matrix)
virtual void multiplyGaussSeidel(Environment const &env, std::vector< SolutionType > &x, std::vector< ValueType > const *b, bool backwards=true) const override
virtual void clearCache() const override
virtual ~ViOperatorMultiplier()=default
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.