18namespace modelchecker {
20template<
typename ParametricType>
21struct AnnotatedRegion;
23template<
typename ParametricType>
24class RegionModelChecker;
26template<
typename ParametricType>
27class MonotonicityBackend;
29template<
typename ParametricType>
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);
58 uint64_t monThresh = 0);
94 bool absolutePrecision, std::optional<storm::logic::Bound>
const& boundInvariant);
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;
107 std::set<VariableType> getSplittingVariables(AnnotatedRegion<ParametricType>
const& region, Context context)
const;
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;
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 ®ion, 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 ®ion, 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 ®ion, 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 ®ion, 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.
~RegionRefinementChecker()=default
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