5template<
typename ParametricType>
10template<
typename ParametricType>
12 for (
auto& r : subRegions) {
20 if (r.refinementDepth == 0) {
21 r.refinementDepth = refinementDepth + 1;
23 r.monotonicityAnnotation =
24 monotonicityAnnotation;
25 r.knownLowerValueBound &= knownLowerValueBound;
26 r.knownUpperValueBound &= knownUpperValueBound;
28 if (allowDeleteAnnotationsOfThis) {
30 monotonicityAnnotation = {};
34template<
typename ParametricType>
36 std::set<VariableType>
const& discreteVariables,
bool allowDeleteAnnotationsOfThis) {
37 std::vector<storm::storage::ParameterRegion<ParametricType>> subRegionsWithoutAnnotations;
38 region.
split(splittingPoint, subRegionsWithoutAnnotations, consideredVariables, discreteVariables);
39 subRegions.reserve(subRegionsWithoutAnnotations.size());
40 for (
auto& newRegion : subRegionsWithoutAnnotations) {
41 subRegions.emplace_back(newRegion);
43 propagateAnnotationsToSubregions(allowDeleteAnnotationsOfThis);
46template<
typename ParametricType>
48 bool allowDeleteAnnotationsOfThis) {
50 splitAndPropagate(region.getCenterPoint(), splittingVariables, discreteVariables, allowDeleteAnnotationsOfThis);
53template<
typename ParametricType>
55 for (
auto& child : subRegions) {
56 child.postOrderTraverseSubRegions(visitor);
61template<
typename ParametricType>
64 for (
auto& child : subRegions) {
65 child.preOrderTraverseSubRegions(visitor);
69template<
typename ParametricType>
72 for (
auto const& child : subRegions) {
73 max = std::max(max, child.getMaxDepthOfSubRegions() + 1);
78template<
typename ParametricType>
81 return knownLowerValueBound &= newValue;
83 return knownUpperValueBound &= newValue;
storm::utility::parametric::Valuation< ParametricType > Valuation
void split(Valuation const &splittingPoint, std::vector< ParameterRegion< ParametricType > > ®ionVector) const
Splits the region at the given point and inserts the resulting subregions at the end of the given vec...
#define STORM_LOG_ASSERT(cond, message)
@ CenterSat
the formula is satisfied for the parameter Valuation that corresponds to the center point of the regi...
@ AllSat
the formula is satisfied for all well-defined parameters in the given region
@ AllViolated
the formula is violated for all well-defined parameters in the given region
@ Unknown
the result is unknown
@ CenterViolated
the formula is violated for the parameter Valuation that corresponds to the center point of the regio...
@ ExistsSat
the formula is satisfied for at least one parameter evaluation that lies in the given region
@ ExistsViolated
the formula is violated for at least one parameter evaluation that lies in the given region
void propagateAnnotationsToSubregions(bool allowDeleteAnnotationsOfThis)
void postOrderTraverseSubRegions(std::function< void(AnnotatedRegion< ParametricType > &)> const &visitor)
void preOrderTraverseSubRegions(std::function< void(AnnotatedRegion< ParametricType > &)> const &visitor)
typename Region::CoefficientType CoefficientType
AnnotatedRegion(Region const ®ion)
uint64_t getMaxDepthOfSubRegions() const
void splitLeafNodeAtCenter(std::set< VariableType > const &splittingVariables, std::set< VariableType > const &discreteVariables, bool allowDeleteAnnotationsOfThis)
bool updateValueBound(CoefficientType const &newValue, storm::OptimizationDirection dir)
what is known about this region in terms of monotonicity
void splitAndPropagate(typename Region::Valuation const &splittingPoint, std::set< VariableType > const &consideredVariables, std::set< VariableType > const &discreteVariables, bool allowDeleteAnnotationsOfThis)