11namespace modelchecker {
13template<
typename SparseModelType,
typename ImpreciseType,
typename PreciseType>
17 using ParametricType =
typename SparseModelType::ValueType;
26 virtual bool canHandle(std::shared_ptr<storm::models::ModelBase> parametricModel,
29 virtual void specify(
Environment const& env, std::shared_ptr<storm::models::ModelBase> parametricModel,
31 std::optional<RegionSplitEstimateKind> generateRegionSplitEstimates = std::nullopt,
33 bool graphPreserving =
true)
override;
46 bool sampleVerticesOfRegion =
false)
override;
77 static constexpr bool IsMDP = std::is_same_v<SparseModelType, storm::models::sparse::Mdp<ParametricType>>;
78 static constexpr bool IsDTMC = std::is_same_v<SparseModelType, storm::models::sparse::Dtmc<ParametricType>>;
79 static_assert(IsMDP || IsDTMC,
"Model type is neither MDP nor DTMC.");
82 using UnderlyingCheckerType =
typename std::conditional_t<IsMDP, SparseMdpParameterLiftingModelChecker<SparseModelType, T>,
85 UnderlyingCheckerType<ImpreciseType> impreciseChecker;
86 UnderlyingCheckerType<PreciseType> preciseChecker;
88 void applyHintsToPreciseChecker();
91 uint_fast64_t numOfWrongRegions;
std::shared_ptr< MonotonicityBackend< SparseModelType::ValueType > > monotonicityBackend
storm::storage::ParameterRegion< ParametricType >::CoefficientType CoefficientType
storm::storage::ParameterRegion< ParametricType >::Valuation Valuation
storm::storage::ParameterRegion< ParametricType >::VariableType VariableType
virtual RegionResult analyzeRegion(Environment const &env, AnnotatedRegion< ParametricType > ®ion, RegionResultHypothesis const &hypothesis=RegionResultHypothesis::Unknown, bool sampleVerticesOfRegion=false) override
Analyzes the given region.
virtual CoefficientType getBoundAtInitState(Environment const &env, AnnotatedRegion< ParametricType > ®ion, storm::solver::OptimizationDirection const &dirForParameters) override
Over-approximates the value within the given region.
virtual ~ValidatingSparseParameterLiftingModelChecker()
virtual void specify(Environment const &env, std::shared_ptr< storm::models::ModelBase > parametricModel, CheckTask< storm::logic::Formula, ParametricType > const &checkTask, std::optional< RegionSplitEstimateKind > generateRegionSplitEstimates=std::nullopt, std::shared_ptr< MonotonicityBackend< ParametricType > > monotonicityBackend={}, bool allowModelSimplifications=true, bool graphPreserving=true) override
ValidatingSparseParameterLiftingModelChecker()
virtual bool isMonotonicitySupported(MonotonicityBackend< ParametricType > const &backend, CheckTask< storm::logic::Formula, ParametricType > const &checkTask) const override
Returns whether this region model checker can work together with the given monotonicity backend.
virtual std::pair< CoefficientType, Valuation > getAndEvaluateGoodPoint(Environment const &env, AnnotatedRegion< ParametricType > ®ion, storm::solver::OptimizationDirection const &dirForParameters) override
Heuristically finds a point within the region and computes the value at the initial state for that po...
virtual bool canHandle(std::shared_ptr< storm::models::ModelBase > parametricModel, CheckTask< storm::logic::Formula, typename SparseModelType::ValueType > const &checkTask) const override
RegionResult
The results for a single Parameter Region.
RegionResultHypothesis
hypothesis for the result for a single Parameter Region