Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
RegionRefinementChecker.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
10
13
14namespace storm {
15
16class Environment;
17
18namespace modelchecker {
19
20template<typename ParametricType>
21struct AnnotatedRegion;
22
23template<typename ParametricType>
24class RegionModelChecker;
25
26template<typename ParametricType>
27class MonotonicityBackend;
28
29template<typename ParametricType>
31 public:
35
36 RegionRefinementChecker(std::unique_ptr<RegionModelChecker<ParametricType>>&& regionChecker);
38
39 bool canHandle(std::shared_ptr<storm::models::ModelBase> parametricModel, CheckTask<storm::logic::Formula, ParametricType> const& checkTask) const;
40
41 void specify(Environment const& env, std::shared_ptr<storm::models::ModelBase> parametricModel,
43 std::set<VariableType> const& discreteVariables = {}, std::shared_ptr<MonotonicityBackend<ParametricType>> monotonicityBackend = {},
44 bool allowModelSimplifications = true, bool graphPreserving = true);
45
55 std::unique_ptr<storm::modelchecker::RegionRefinementCheckResult<ParametricType>> performRegionPartitioning(
56 Environment const& env, storm::storage::ParameterRegion<ParametricType> const& region, std::optional<ParametricType> coverageThreshold,
57 std::optional<uint64_t> depthThreshold = std::nullopt, RegionResultHypothesis const& hypothesis = RegionResultHypothesis::Unknown,
58 uint64_t monThresh = 0);
59
74 std::pair<CoefficientType, Valuation> computeExtremalValueHelper(Environment const& env, storm::storage::ParameterRegion<ParametricType> const& region,
76 std::function<bool(CoefficientType, CoefficientType)> acceptGlobalBound,
77 std::function<bool(CoefficientType)> rejectInstance);
78
92 std::pair<CoefficientType, Valuation> computeExtremalValue(Environment const& env, storm::storage::ParameterRegion<ParametricType> const& region,
93 storm::solver::OptimizationDirection const& dir, ParametricType const& precision,
94 bool absolutePrecision, std::optional<storm::logic::Bound> const& boundInvariant);
95
101
102 private:
103 enum class Context { Partitioning, ExtremalValue };
104 std::set<VariableType> getSplittingVariablesEstimateBased(AnnotatedRegion<ParametricType> const& region, Context context) const;
105 std::set<VariableType> getSplittingVariablesRoundRobin(AnnotatedRegion<ParametricType> const& region, Context context) const;
106
107 std::set<VariableType> getSplittingVariables(AnnotatedRegion<ParametricType> const& region, Context context) const;
108
109 std::unique_ptr<RegionModelChecker<ParametricType>> regionChecker;
110 std::shared_ptr<MonotonicityBackend<ParametricType>> monotonicityBackend;
111 RegionSplittingStrategy regionSplittingStrategy;
112 std::set<VariableType> discreteVariables;
113 bool graphPreserving;
114};
115
116} // namespace modelchecker
117} // namespace storm
bool canHandle(std::shared_ptr< storm::models::ModelBase > parametricModel, CheckTask< storm::logic::Formula, ParametricType > const &checkTask) const
typename storm::storage::ParameterRegion< ParametricType >::VariableType VariableType
typename storm::storage::ParameterRegion< ParametricType >::CoefficientType CoefficientType
bool verifyRegion(Environment const &env, storm::storage::ParameterRegion< ParametricType > const &region, storm::logic::Bound const &bound)
Checks whether the bound is satisfied on the complete region.
std::unique_ptr< storm::modelchecker::RegionRefinementCheckResult< ParametricType > > performRegionPartitioning(Environment const &env, storm::storage::ParameterRegion< ParametricType > const &region, std::optional< ParametricType > coverageThreshold, std::optional< uint64_t > depthThreshold=std::nullopt, RegionResultHypothesis const &hypothesis=RegionResultHypothesis::Unknown, uint64_t monThresh=0)
Iteratively refines the region until the region analysis yields a conclusive result (AllSat or AllVio...
std::pair< CoefficientType, Valuation > computeExtremalValue(Environment const &env, storm::storage::ParameterRegion< ParametricType > const &region, storm::solver::OptimizationDirection const &dir, ParametricType const &precision, bool absolutePrecision, std::optional< storm::logic::Bound > const &boundInvariant)
Finds the extremal value within the given region and with the given precision.
std::pair< CoefficientType, Valuation > computeExtremalValueHelper(Environment const &env, storm::storage::ParameterRegion< ParametricType > const &region, storm::solver::OptimizationDirection const &dir, std::function< bool(CoefficientType, CoefficientType)> acceptGlobalBound, std::function< bool(CoefficientType)> rejectInstance)
Finds the extremal value within the given region and with the given precision.
typename storm::storage::ParameterRegion< ParametricType >::Valuation Valuation
void specify(Environment const &env, std::shared_ptr< storm::models::ModelBase > parametricModel, CheckTask< storm::logic::Formula, ParametricType > const &checkTask, RegionSplittingStrategy splittingStrategy=RegionSplittingStrategy(), std::set< VariableType > const &discreteVariables={}, std::shared_ptr< MonotonicityBackend< ParametricType > > monotonicityBackend={}, bool allowModelSimplifications=true, bool graphPreserving=true)
storm::utility::parametric::CoefficientType< ParametricType >::type CoefficientType
storm::utility::parametric::Valuation< ParametricType > Valuation
storm::utility::parametric::VariableType< ParametricType >::type VariableType
RegionResultHypothesis
hypothesis for the result for a single Parameter Region
LabParser.cpp.