Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ExplicitQuantitativeCheckResult.h
Go to the documentation of this file.
1#pragma once
2#include <optional>
3#include <vector>
4
14
15namespace storm {
16
17namespace modelchecker {
18// Forward declaration
19template<typename ValueType>
21
29template<typename ValueType>
31 public:
33 typedef std::vector<ExtendedValueType> vector_type;
34
39
43 ExplicitQuantitativeCheckResult(vector_type const& values, std::optional<std::shared_ptr<storm::storage::Scheduler<ValueType>>> scheduler = {});
44 ExplicitQuantitativeCheckResult(vector_type&& values, std::optional<std::shared_ptr<storm::storage::Scheduler<ValueType>>> scheduler = {});
45
52 std::optional<std::shared_ptr<storm::storage::Scheduler<ValueType>>> scheduler = {});
53
58 ExplicitQuantitativeCheckResult(std::vector<ValueType> const& values)
59 requires(!std::is_same_v<storm::utility::ExtendedValueType<ValueType>, ValueType>);
60 ExplicitQuantitativeCheckResult(std::vector<ValueType>&& values)
61 requires(!std::is_same_v<storm::utility::ExtendedValueType<ValueType>, ValueType>);
62 ExplicitQuantitativeCheckResult(storm::storage::BitVector states, std::vector<ValueType>&& values)
63 requires(!std::is_same_v<storm::utility::ExtendedValueType<ValueType>, ValueType>);
64
70
72
73 virtual std::unique_ptr<CheckResult> clone() const override;
74
81
82 virtual std::unique_ptr<CheckResult> compareAgainstBound(storm::logic::ComparisonType comparisonType, ValueType const& bound) const override;
83
84 virtual bool isExplicit() const override;
85 virtual bool isResultForAllStates() const override;
86
87 virtual bool isExplicitQuantitativeCheckResult() const override;
88
93
98
103 vector_type const& getValueVector() const;
105
110 std::vector<ValueType> getFiniteValueVector() const;
111
116 std::vector<ValueType> getSentinelValueVector() const;
117
121 bool hasLowerBounds() const;
122 bool hasUpperBounds() const;
123
129 vector_type const& getLowerBoundVector() const;
130 vector_type const& getUpperBoundVector() const;
131
136
141 void setLowerBounds(vector_type lowerBounds);
142 void setUpperBounds(vector_type upperBounds);
144
150 requires(!std::is_same_v<storm::utility::ExtendedValueType<ValueType>, ValueType>);
151
155 void setValuesExact();
156
160 void clearBounds();
161
162 virtual std::ostream& writeToStream(std::ostream& out) const override;
163
164 virtual void filter(QualitativeCheckResult const& filter) override;
165
166 virtual void oneMinus() override;
167
168 virtual ExtendedValueType getMin() const override;
169 virtual ExtendedValueType getMax() const override;
170 virtual std::pair<ExtendedValueType, ExtendedValueType> getMinMax() const;
171 virtual ExtendedValueType average() const override;
172 virtual ExtendedValueType sum() const override;
173
175
176 virtual bool hasScheduler() const override;
177 void setScheduler(std::unique_ptr<storm::storage::Scheduler<ValueType>>&& scheduler);
180
181 storm::json<ValueType> toJson(std::optional<storm::storage::sparse::Valuations> const& stateValuations = std::nullopt,
182 std::optional<storm::models::sparse::StateLabeling> const& stateLabels = std::nullopt) const;
183
184 private:
185 bool hasValueType(std::type_info const& t) const override {
186 return t == typeid(ValueType);
187 }
188
192 static ExtendedValueType aggregateVector(vector_type const& vector, FilterType filter);
193
198 uint64_t getOffset(storm::storage::sparse::state_type state) const;
199
203 template<typename Function>
204 void forEachState(Function const& f) const {
205 uint64_t offset = 0;
206 for (uint64_t state : states) {
207 f(state, values[offset]);
208 ++offset;
209 }
210 }
211
215 void printValue(std::ostream& out, uint64_t offset) const;
216
217 // The states this result holds values for, which are all states of the model unless it was narrowed down.
219
220 // The values of the quantitative check result, one per state this result is for. These are estimates that
221 // lie within the bounds below but carry no further guarantee.
222 vector_type values;
223
224 // Sound bounds on the actual values, if an algorithm provided them.
226
227 // An optional scheduler that accompanies the values.
228 std::optional<std::shared_ptr<storm::storage::Scheduler<ValueType>>> scheduler;
229};
230} // namespace modelchecker
231} // namespace storm
bool hasValueType() const
Checks whether the ValueType of the result matches the given type.
A qualitative check result over the states of a sparse model.
ExtendedValueType & operator[](storm::storage::sparse::state_type state)
Retrieves the value of the given state.
virtual std::ostream & writeToStream(std::ostream &out) const override
void setLowerBounds(vector_type lowerBounds)
Sets sound bounds on the actual values.
virtual std::unique_ptr< CheckResult > clone() const override
storm::storage::Scheduler< ValueType > const & getScheduler() const
bool hasValueForState(storm::storage::sparse::state_type state) const
Retrieves whether the result holds a value for the given state.
ExplicitQuantitativeCheckResult(storm::storage::sparse::state_type const &state, ExtendedValueType const &value)
Creates a result that holds the given value for the given state only.
virtual AggregatedValue< ExtendedValueType > aggregate(FilterType filter) const override
Aggregates the values of this result with the given filter, and each bound it carries alongside.
ExplicitQuantitativeCheckResult & operator=(ExplicitQuantitativeCheckResult const &other)=default
ExplicitQuantitativeCheckResult(ExplicitQuantitativeCheckResult &&other)=default
storm::json< ValueType > toJson(std::optional< storm::storage::sparse::Valuations > const &stateValuations=std::nullopt, std::optional< storm::models::sparse::StateLabeling > const &stateLabels=std::nullopt) const
virtual std::pair< ExtendedValueType, ExtendedValueType > getMinMax() const
ExplicitQuantitativeCheckResult(ExplicitQuantitativeCheckResult const &other)=default
void setValuesExact()
States that the values of this result are the exact ones, i.e.
virtual void filter(QualitativeCheckResult const &filter) override
Filters the current result wrt.
void setBounds(storm::solver::SolutionBounds< ExtendedValueType > bounds)
QuantitativeCheckResult< ValueType >::ExtendedValueType ExtendedValueType
vector_type const & getValueVector() const
Retrieves the values, one per state this result is for.
void setScheduler(std::unique_ptr< storm::storage::Scheduler< ValueType > > &&scheduler)
ExplicitQuantitativeCheckResult & operator=(ExplicitQuantitativeCheckResult &&other)=default
storm::solver::SolutionBounds< ExtendedValueType > const & getSolutionBounds() const
Retrieves both bounds at once, either of which may be unset.
bool hasLowerBounds() const
Retrieves whether sound lower resp.
vector_type const & getLowerBoundVector() const
Retrieves the sound lower resp.
virtual std::unique_ptr< CheckResult > compareAgainstBound(storm::logic::ComparisonType comparisonType, ValueType const &bound) const override
storm::storage::BitVector const & getStates() const
Retrieves the states this result holds values for.
storm::utility::ExtendedValueType< ValueType > ExtendedValueType
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:16
This class defines which action is chosen in a particular state of a non-deterministic model.
Definition Scheduler.h:18
nlohmann::basic_json< std::map, std::vector, std::string, bool, int64_t, uint64_t, ValueType > json
Definition JsonForward.h:11
The aggregate of the values of a quantitative check result, together with the aggregate of each bound...
Sound lower and upper bounds on a solution vector.