7template<
typename ParametricType>
12template<
typename ParametricType>
14 for (
auto& r : subRegions) {
22 if (r.refinementDepth == 0) {
23 r.refinementDepth = refinementDepth + 1;
25 r.monotonicityAnnotation =
26 monotonicityAnnotation;
27 r.knownLowerValueBound &= knownLowerValueBound;
28 r.knownUpperValueBound &= knownUpperValueBound;
30 if (allowDeleteAnnotationsOfThis) {
32 monotonicityAnnotation = {};
36template<
typename ParametricType>
38 std::set<VariableType>
const& discreteVariables,
bool allowDeleteAnnotationsOfThis) {
39 std::vector<storm::storage::ParameterRegion<ParametricType>> subRegionsWithoutAnnotations;
40 region.
split(splittingPoint, subRegionsWithoutAnnotations, consideredVariables, discreteVariables);
41 subRegions.reserve(subRegionsWithoutAnnotations.size());
42 for (
auto& newRegion : subRegionsWithoutAnnotations) {
43 subRegions.emplace_back(newRegion);
45 propagateAnnotationsToSubregions(allowDeleteAnnotationsOfThis);
48template<
typename ParametricType>
50 bool allowDeleteAnnotationsOfThis) {
52 splitAndPropagate(region.getCenterPoint(), splittingVariables, discreteVariables, allowDeleteAnnotationsOfThis);
55template<
typename ParametricType>
57 for (
auto& child : subRegions) {
58 child.postOrderTraverseSubRegions(visitor);
63template<
typename ParametricType>
66 for (
auto& child : subRegions) {
67 child.preOrderTraverseSubRegions(visitor);
71template<
typename ParametricType>
74 for (
auto const& child : subRegions) {
75 max = std::max(max, child.getMaxDepthOfSubRegions() + 1);
80template<
typename ParametricType>
83 return knownLowerValueBound &= newValue;
85 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)