Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
RegionCheckResult.cpp
Go to the documentation of this file.
2
3#include <map>
4
8
9namespace storm {
10namespace modelchecker {
11
12template<typename ValueType>
14 std::vector<std::pair<storm::storage::ParameterRegion<ValueType>, storm::modelchecker::RegionResult>> const& regionResults)
15 : regionResults(regionResults) {
16 auto overallArea = storm::utility::zero<typename storm::storage::ParameterRegion<ValueType>::CoefficientType>();
17 for (auto const& res : this->regionResults) {
18 overallArea += res.first.area();
19 }
20 initFractions(overallArea);
21}
22
23template<typename ValueType>
26 : regionResults(std::move(regionResults)) {
27 auto overallArea = storm::utility::zero<typename storm::storage::ParameterRegion<ValueType>::CoefficientType>();
28 for (auto const& res : this->regionResults) {
29 overallArea += res.first.area();
30 }
31 initFractions(overallArea);
32}
33
34template<typename ValueType>
35std::unique_ptr<CheckResult> RegionCheckResult<ValueType>::clone() const {
36 return std::make_unique<RegionCheckResult<ValueType>>(this->regionResults);
37}
38
39template<typename ValueType>
41 return true;
42}
43
44template<typename ValueType>
48
49template<typename ValueType>
50std::vector<std::pair<storm::storage::ParameterRegion<ValueType>, storm::modelchecker::RegionResult>> const& RegionCheckResult<ValueType>::getRegionResults()
51 const {
52 return regionResults;
53}
54
55template<typename ValueType>
59
60template<typename ValueType>
64
65template<typename ValueType>
66std::ostream& RegionCheckResult<ValueType>::writeToStream(std::ostream& out) const {
67 writeCondensedToStream(out);
68 out << "\nRegion results: \n";
69 for (auto const& res : this->regionResults) {
70 out << res.first.toString() << ": \t" << res.second << '\n';
71 }
72 return out;
73}
74
75template<typename ValueType>
76std::ostream& RegionCheckResult<ValueType>::writeCondensedToStream(std::ostream& out) const {
77 double satPercent = storm::utility::convertNumber<double>(satFraction) * 100.0;
78 double unsatPercent = storm::utility::convertNumber<double>(unsatFraction) * 100.0;
79 auto oneHundred = storm::utility::convertNumber<typename storm::storage::ParameterRegion<ValueType>::CoefficientType>(100.0);
80 auto one = storm::utility::convertNumber<typename storm::storage::ParameterRegion<ValueType>::CoefficientType>(1.0);
81 out << " Fraction of satisfied area: " << satPercent << "%\n";
82 out << "Fraction of unsatisfied area: " << unsatPercent << "%\n";
83 out << " Unknown fraction: " << (100.0 - satPercent - unsatPercent) << "%\n";
84 out << " Total number of regions: " << regionResults.size() << '\n';
85 std::map<storm::modelchecker::RegionResult, uint_fast64_t> counters;
86 for (auto const& res : this->regionResults) {
87 ++counters[res.second];
88 }
89 for (auto const& counter : counters) {
90 out << std::setw(28) << counter.first << ": " << counter.second << '\n';
91 }
92 return out;
93}
94
95template<typename ValueType>
96std::ostream& RegionCheckResult<ValueType>::writeIllustrationToStream(std::ostream& out) const {
97 STORM_LOG_WARN("Writing illustration of region check result to a stream is not implemented.");
98 return out;
99}
100
101template<typename ValueType>
103 auto satArea = storm::utility::zero<typename storm::storage::ParameterRegion<ValueType>::CoefficientType>();
104 auto unsatArea = storm::utility::zero<typename storm::storage::ParameterRegion<ValueType>::CoefficientType>();
105 for (auto const& res : this->regionResults) {
107 satArea += res.first.area();
108 } else if (res.second == storm::modelchecker::RegionResult::AllViolated) {
109 unsatArea += res.first.area();
110 }
111 }
112 satFraction = satArea / overallArea;
113 unsatFraction = unsatArea / overallArea;
114}
115
116template<typename ValueType>
118 // Filtering has no effect as we only store the result w.r.t. a single state anyway.
119 // Hence, this is intentionally left empty.
120}
121
122#ifdef STORM_HAVE_CARL
124#endif
125} // namespace modelchecker
126} // namespace storm
virtual std::ostream & writeCondensedToStream(std::ostream &out) const
virtual void initFractions(typename storm::storage::ParameterRegion< ValueType >::CoefficientType const &overallArea)
virtual std::ostream & writeIllustrationToStream(std::ostream &out) const
virtual std::ostream & writeToStream(std::ostream &out) const override
std::vector< std::pair< storm::storage::ParameterRegion< ValueType >, storm::modelchecker::RegionResult > > const & getRegionResults() const
storm::storage::ParameterRegion< ValueType >::CoefficientType const & getSatFraction() const
storm::storage::ParameterRegion< ValueType >::CoefficientType const & getUnsatFraction() const
RegionCheckResult(std::vector< std::pair< storm::storage::ParameterRegion< ValueType >, storm::modelchecker::RegionResult > > const &regionResults)
virtual std::unique_ptr< CheckResult > clone() const override
virtual void filter(QualitativeCheckResult const &filter) override
Filters the current result wrt.
std::vector< std::pair< storm::storage::ParameterRegion< ValueType >, storm::modelchecker::RegionResult > > regionResults
storm::utility::parametric::CoefficientType< ParametricType >::type CoefficientType
#define STORM_LOG_WARN(message)
Definition logging.h:30
RegionResult
The results for a single Parameter Region.
@ AllSat
the formula is satisfied for all parameters in the given region
@ AllViolated
the formula is violated for all parameters in the given region
LabParser.cpp.
Definition cli.cpp:18