Storm
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
12
13namespace storm::solver::helper {
14
19template<typename ValueType, bool TrivialRowGrouping>
21 public:
23
24 struct SVIData {
26 std::pair<std::vector<ValueType>, std::vector<ValueType>> const& xy;
27 std::optional<ValueType> const a, b;
28
29 void trySetAverage(std::vector<ValueType>& out) const;
30 void trySetLowerUpper(std::vector<ValueType>& lowerOut, std::vector<ValueType>& upperOut) const;
32
33 bool checkConvergence(uint64_t& convergenceCheckState, std::function<void()> const& getNextConvergenceCheckState, bool relative,
34 ValueType const& precision) const;
35 };
36
37 template<typename BackendType>
38 SVIData SVI(std::pair<std::vector<ValueType>, std::vector<ValueType>>& xy, std::pair<std::vector<ValueType> const*, ValueType> const& offsets,
39 uint64_t& numIterations, bool relative, ValueType const& precision, BackendType&& backend,
40 std::function<SolverStatus(SVIData const&)> const& iterationCallback, std::optional<storm::storage::BitVector> const& relevantValues,
41 uint64_t convergenceCheckState = 0) const;
42
43 template<storm::OptimizationDirection Dir>
44 SVIData SVI(std::pair<std::vector<ValueType>, std::vector<ValueType>>& xy, std::pair<std::vector<ValueType> const*, ValueType> const& offsets,
45 uint64_t& numIterations, bool relative, ValueType const& precision, std::optional<ValueType> const& a, std::optional<ValueType> const& b,
46 std::function<SolverStatus(SVIData const&)> const& iterationCallback = {},
47 std::optional<storm::storage::BitVector> const& relevantValues = {}) const;
48
49 SVIData SVI(std::pair<std::vector<ValueType>, std::vector<ValueType>>& xy, std::vector<ValueType> const& offsets, uint64_t& numIterations, bool relative,
50 ValueType const& precision, std::optional<storm::OptimizationDirection> const& dir, std::optional<ValueType> const& lowerBound,
51 std::optional<ValueType> const& upperBound, std::function<SolverStatus(SVIData const&)> const& iterationCallback,
52 std::optional<storm::storage::BitVector> const& relevantValues = {}) const;
53
54 SolverStatus SVI(std::vector<ValueType>& operand, std::vector<ValueType> const& offsets, uint64_t& numIterations, bool relative, ValueType const& precision,
55 std::optional<storm::OptimizationDirection> const& dir = {}, std::optional<ValueType> const& lowerBound = {},
56 std::optional<ValueType> const& upperBound = {}, std::function<SolverStatus(SVIData const&)> const& iterationCallback = {},
57 std::optional<storm::storage::BitVector> const& relevantValues = {}) const;
58
59 SolverStatus SVI(std::vector<ValueType>& operand, std::vector<ValueType> const& offsets, bool relative, ValueType const& precision,
60 std::optional<storm::OptimizationDirection> const& dir = {}, std::optional<ValueType> const& lowerBound = {},
61 std::optional<ValueType> const& upperBound = {}, std::function<SolverStatus(SVIData const&)> const& iterationCallback = {},
62 std::optional<storm::storage::BitVector> const& relevantValues = {}) const;
63
64 private:
65 std::shared_ptr<ValueIterationOperator<ValueType, TrivialRowGrouping>> viOperator;
66 uint64_t sizeOfLargestRowGroup;
67};
68
69} // 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
This class represents the Value Iteration Operator (also known as Bellman operator).
bool checkConvergence(uint64_t &convergenceCheckState, std::function< void()> const &getNextConvergenceCheckState, bool relative, ValueType const &precision) const
void 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