Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SoundValueIterationHelper.h
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <memory>
5#include <optional>
6#include <vector>
7
14
15namespace storm::solver::helper {
16
21template<typename ValueType, bool TrivialRowGrouping>
23 public:
25
26 struct SVIData {
28 std::pair<std::vector<ValueType>, std::vector<ValueType>> const& xy;
29 std::optional<ValueType> const a, b;
30
31 void trySetAverage(std::vector<ValueType>& out) const;
32 bool trySetLowerUpper(std::vector<ValueType>& lowerOut, std::vector<ValueType>& upperOut) const;
34
35 bool checkConvergence(uint64_t& convergenceCheckState, std::function<void()> const& getNextConvergenceCheckState, bool relative,
36 ValueType const& precision) const;
37 };
38
39 template<typename BackendType>
40 SVIData SVI(std::pair<std::vector<ValueType>, std::vector<ValueType>>& xy, std::pair<std::vector<ValueType> const*, ValueType> const& offsets,
41 uint64_t& numIterations, bool relative, ValueType const& precision, BackendType&& backend,
42 std::function<SolverStatus(SVIData const&)> const& iterationCallback, std::optional<storm::storage::BitVector> const& relevantValues,
43 uint64_t convergenceCheckState = 0) const;
44
45 template<storm::OptimizationDirection Dir>
46 SVIData SVI(std::pair<std::vector<ValueType>, std::vector<ValueType>>& xy, std::pair<std::vector<ValueType> const*, ValueType> const& offsets,
47 uint64_t& numIterations, bool relative, ValueType const& precision, std::optional<ValueType> const& a, std::optional<ValueType> const& b,
48 std::function<SolverStatus(SVIData const&)> const& iterationCallback = {},
49 std::optional<storm::storage::BitVector> const& relevantValues = {}) const;
50
51 SVIData SVI(std::pair<std::vector<ValueType>, std::vector<ValueType>>& xy, std::vector<ValueType> const& offsets, uint64_t& numIterations, bool relative,
52 ValueType const& precision, std::optional<storm::OptimizationDirection> const& dir, std::optional<ValueType> const& lowerBound,
53 std::optional<ValueType> const& upperBound, std::function<SolverStatus(SVIData const&)> const& iterationCallback,
54 std::optional<storm::storage::BitVector> const& relevantValues = {}) const;
55
56 SolverStatus SVI(std::vector<ValueType>& operand, std::vector<ValueType> const& offsets, uint64_t& numIterations, bool relative, ValueType const& precision,
57 std::optional<storm::OptimizationDirection> const& dir = {}, std::optional<ValueType> const& lowerBound = {},
58 std::optional<ValueType> const& upperBound = {}, std::function<SolverStatus(SVIData const&)> const& iterationCallback = {},
59 std::optional<storm::storage::BitVector> const& relevantValues = {},
61
62 SolverStatus SVI(std::vector<ValueType>& operand, std::vector<ValueType> const& offsets, bool relative, ValueType const& precision,
63 std::optional<storm::OptimizationDirection> const& dir = {}, std::optional<ValueType> const& lowerBound = {},
64 std::optional<ValueType> const& upperBound = {}, std::function<SolverStatus(SVIData const&)> const& iterationCallback = {},
65 std::optional<storm::storage::BitVector> const& relevantValues = {},
67
68 private:
69 std::shared_ptr<ValueIterationOperator<ValueType, TrivialRowGrouping>> viOperator;
70 uint64_t sizeOfLargestRowGroup;
71};
72
73} // namespace storm::solver::helper
SVIData SVI(std::pair< std::vector< ValueType >, std::vector< ValueType > > &xy, std::pair< std::vector< ValueType > const *, ValueType > const &offsets, uint64_t &numIterations, bool relative, ValueType const &precision, BackendType &&backend, std::function< SolverStatus(SVIData const &)> const &iterationCallback, std::optional< storm::storage::BitVector > const &relevantValues, uint64_t convergenceCheckState=0) const
SoundValueIterationHelper(std::shared_ptr< ValueIterationOperator< ValueType, TrivialRowGrouping > > viOperator)
This class represents the Value Iteration Operator (also known as Bellman operator).
OptionalRef(T &) -> OptionalRef< T >
deduction guides
constexpr NullRefType NullRef
Definition OptionalRef.h:31
bool checkConvergence(uint64_t &convergenceCheckState, std::function< void()> const &getNextConvergenceCheckState, bool relative, ValueType const &precision) const
bool trySetLowerUpper(std::vector< ValueType > &lowerOut, std::vector< ValueType > &upperOut) const
bool checkCustomTerminationCondition(storm::solver::TerminationCondition< ValueType > const &condition) const
std::pair< std::vector< ValueType >, std::vector< ValueType > > const & xy