11template<
typename ParametricType>
15 monotonicityBackend->initializeMonotonicity(env, annotatedRegion);
16 return analyzeRegion(env, annotatedRegion, hypothesis, sampleVerticesOfRegion);
19template<
typename ParametricType>
23 monotonicityBackend->initializeMonotonicity(env, annotatedRegion);
24 return getBoundAtInitState(env, annotatedRegion, dirForParameters);
27template<
typename ParametricType>
30 bool sampleVerticesOfRegion) {
31 STORM_LOG_THROW(regions.size() == hypotheses.size(), storm::exceptions::InvalidArgumentException,
32 "The number of regions and the number of hypotheses do not match");
34 auto hypothesisIt = hypotheses.begin();
35 for (
auto const& region : regions) {
37 result.emplace_back(region, regionRes);
40 return std::make_unique<storm::modelchecker::RegionCheckResult<ParametricType>>(std::move(result));
43template<
typename ParametricType>
48template<
typename ParametricType>
54template<
typename ParametricType>
56 return specifiedRegionSplitEstimateKind;
59template<
typename ParametricType>
61 std::set<VariableType>
const& relevantParameters)
const {
62 STORM_LOG_ASSERT(specifiedRegionSplitEstimateKind.has_value(),
"Unable to obtain region split estimates because they wre not requested.");
64 STORM_LOG_ASSERT(lastCheckedRegion.has_value(),
"Unable to obtain region split estimates because no region was checked.");
65 std::vector<CoefficientType> result;
66 result.reserve(relevantParameters.size());
67 for (
auto const& p : relevantParameters) {
68 result.push_back(lastCheckedRegion->getDifference(p));
73template<
typename ParametricType>
76 STORM_LOG_ASSERT(!splitEstimates.has_value() || isRegionSplitEstimateKindSupported(splitEstimates.value(), checkTask),
77 "specified region split estimate kind not supported");
78 specifiedRegionSplitEstimateKind = splitEstimates;
81template<
typename ParametricType>
85 STORM_LOG_ASSERT(isMonotonicitySupported(*backend, checkTask),
"specified monotonicity backend not supported");
86 monotonicityBackend = backend;
88 monotonicityBackend = std::make_shared<MonotonicityBackend<ParametricType>>();
virtual bool isRegionSplitEstimateKindSupported(RegionSplitEstimateKind kind, CheckTask< storm::logic::Formula, ParametricType > const &checkTask) const
virtual CoefficientType getBoundAtInitState(Environment const &env, AnnotatedRegion< ParametricType > ®ion, storm::solver::OptimizationDirection const &dirForParameters)=0
Over-approximates the value within the given region.
virtual RegionSplitEstimateKind getDefaultRegionSplitEstimateKind(CheckTask< storm::logic::Formula, ParametricType > const &checkTask) const
virtual void specifyMonotonicity(std::shared_ptr< MonotonicityBackend< ParametricType > > backend, CheckTask< storm::logic::Formula, ParametricType > const &checkTask)
virtual RegionResult analyzeRegion(Environment const &env, AnnotatedRegion< ParametricType > ®ion, RegionResultHypothesis const &hypothesis=RegionResultHypothesis::Unknown, bool sampleVerticesOfRegion=false)=0
Analyzes the given region.
virtual std::vector< CoefficientType > obtainRegionSplitEstimates(std::set< VariableType > const &relevantParameters) const
Returns an estimate of the benefit of splitting the last checked region with respect to each of the g...
virtual void specifySplitEstimates(std::optional< RegionSplitEstimateKind > splitEstimates, CheckTask< storm::logic::Formula, ParametricType > const &checkTask)
storm::storage::ParameterRegion< ParametricType >::CoefficientType CoefficientType
std::optional< RegionSplitEstimateKind > getSpecifiedRegionSplitEstimateKind() const
std::unique_ptr< storm::modelchecker::RegionCheckResult< ParametricType > > analyzeRegions(Environment const &env, std::vector< storm::storage::ParameterRegion< ParametricType > > const ®ions, std::vector< RegionResultHypothesis > const &hypotheses, bool sampleVerticesOfRegion=false)
Analyzes the given regions.
#define STORM_LOG_ASSERT(cond, message)
#define STORM_LOG_THROW(cond, exception, message)
RegionResult
The results for a single Parameter Region.
RegionResultHypothesis
hypothesis for the result for a single Parameter Region