12template<
typename ParametricType>
16 monotonicityBackend->initializeMonotonicity(env, annotatedRegion);
17 return analyzeRegion(env, annotatedRegion, hypothesis, sampleVerticesOfRegion);
20template<
typename ParametricType>
24 monotonicityBackend->initializeMonotonicity(env, annotatedRegion);
25 return getBoundAtInitState(env, annotatedRegion, dirForParameters);
28template<
typename ParametricType>
31 bool sampleVerticesOfRegion) {
32 STORM_LOG_THROW(regions.size() == hypotheses.size(), storm::exceptions::InvalidArgumentException,
33 "The number of regions and the number of hypotheses do not match");
35 auto hypothesisIt = hypotheses.begin();
36 for (
auto const& region : regions) {
38 result.emplace_back(region, regionRes);
41 return std::make_unique<storm::modelchecker::RegionCheckResult<ParametricType>>(std::move(result));
44template<
typename ParametricType>
49template<
typename ParametricType>
55template<
typename ParametricType>
57 return specifiedRegionSplitEstimateKind;
60template<
typename ParametricType>
62 std::set<VariableType>
const& relevantParameters)
const {
63 STORM_LOG_ASSERT(specifiedRegionSplitEstimateKind.has_value(),
"Unable to obtain region split estimates because they wre not requested.");
65 STORM_LOG_ASSERT(lastCheckedRegion.has_value(),
"Unable to obtain region split estimates because no region was checked.");
66 std::vector<CoefficientType> result;
67 result.reserve(relevantParameters.size());
68 for (
auto const& p : relevantParameters) {
69 result.push_back(lastCheckedRegion->getDifference(p));
74template<
typename ParametricType>
77 STORM_LOG_ASSERT(!splitEstimates.has_value() || isRegionSplitEstimateKindSupported(splitEstimates.value(), checkTask),
78 "specified region split estimate kind not supported");
79 specifiedRegionSplitEstimateKind = splitEstimates;
82template<
typename ParametricType>
86 STORM_LOG_ASSERT(isMonotonicitySupported(*backend, checkTask),
"specified monotonicity backend not supported");
87 monotonicityBackend = backend;
89 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