1#include "storm-config.h"
20class DoubleViEnvironment {
32class DoubleSVIEnvironment {
44class RationalPiEnvironment {
54template<
typename TestType>
55class SparseDtmcParameterLiftingTest :
public ::testing::Test {
57 typedef typename TestType::ValueType
ValueType;
58 SparseDtmcParameterLiftingTest() : _environment(TestType::createEnvironment()) {}
68 std::unique_ptr<storm::modelchecker::RegionModelChecker<storm::RationalFunction>> initializeValidatingRegionModelChecker(
73 virtual void SetUp() {
75 GTEST_SKIP() <<
"Z3 not available.";
77 carl::VariablePool::getInstance().clear();
79 virtual void TearDown() {
80 carl::VariablePool::getInstance().clear();
87typedef ::testing::Types<DoubleViEnvironment, DoubleSVIEnvironment, RationalPiEnvironment>
TestingTypes;
91TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob) {
92 typedef typename TestFixture::ValueType
ValueType;
94 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
95 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
96 std::string constantsAsString =
"";
101 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
103 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
108 modelParameters.insert(rewParameters.begin(), rewParameters.end());
113 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
114 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
115 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
125TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob_no_simplification) {
126 typedef typename TestFixture::ValueType
ValueType;
128 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
129 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
130 std::string constantsAsString =
"";
135 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
137 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
142 modelParameters.insert(rewParameters.begin(), rewParameters.end());
147 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
148 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
149 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
159TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew) {
160 typedef typename TestFixture::ValueType
ValueType;
161 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
162 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
163 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
167 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
169 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
174 modelParameters.insert(rewParameters.begin(), rewParameters.end());
179 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
180 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
181 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
191TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Bounded) {
192 typedef typename TestFixture::ValueType
ValueType;
193 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
194 std::string formulaAsString =
"R>2.5 [ C<=300]";
195 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
199 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
201 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
206 modelParameters.insert(rewParameters.begin(), rewParameters.end());
211 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
212 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
213 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
223TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob_exactValidation) {
224 typedef typename TestFixture::ValueType
ValueType;
225 if (!std::is_same<ValueType, storm::RationalNumber>::value) {
226 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
227 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
228 std::string constantsAsString =
"";
233 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
235 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
238 auto regionChecker = this->initializeValidatingRegionModelChecker(model, formulas[0]);
242 modelParameters.insert(rewParameters.begin(), rewParameters.end());
245 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
246 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
247 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
258TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_exactValidation) {
259 typedef typename TestFixture::ValueType
ValueType;
260 if (!std::is_same<ValueType, storm::RationalNumber>::value) {
261 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
262 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
263 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
267 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
269 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
274 modelParameters.insert(rewParameters.begin(), rewParameters.end());
276 auto regionChecker = this->initializeValidatingRegionModelChecker(model, formulas[0]);
279 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
280 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
281 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
292TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Bounded_exactValidation) {
293 typedef typename TestFixture::ValueType
ValueType;
295 if (!std::is_same<ValueType, storm::RationalNumber>::value) {
296 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
297 std::string formulaAsString =
"R>2.5 [ C<=300]";
298 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
302 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
304 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
309 modelParameters.insert(rewParameters.begin(), rewParameters.end());
311 auto regionChecker = this->initializeValidatingRegionModelChecker(model, formulas[0]);
314 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
315 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
316 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
327TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Infty) {
328 typedef typename TestFixture::ValueType
ValueType;
330 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
331 std::string formulaAsString =
"R>2.5 [F (s=0&srep=3) ]";
332 std::string constantsAsString =
"";
335 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
337 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
342 modelParameters.insert(rewParameters.begin(), rewParameters.end());
347 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.9,0.6<=pL<=0.85,0.9<=TOMsg<=0.95,0.85<=TOAck<=0.9", modelParameters);
353TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_4Par) {
354 typedef typename TestFixture::ValueType
ValueType;
356 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
357 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
358 std::string constantsAsString =
"";
361 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
363 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
368 modelParameters.insert(rewParameters.begin(), rewParameters.end());
373 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.9,0.6<=pL<=0.85,0.9<=TOMsg<=0.95,0.85<=TOAck<=0.9", modelParameters);
374 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.7,0.2<=pL<=0.8,0.15<=TOMsg<=0.65,0.3<=TOAck<=0.9", modelParameters);
375 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.4,0.2<=pL<=0.3,0.15<=TOMsg<=0.3,0.1<=TOAck<=0.2", modelParameters);
385TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob) {
386 typedef typename TestFixture::ValueType
ValueType;
388 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
389 std::string formulaAsString =
"P<0.5 [F \"observe0Greater1\" ]";
390 std::string constantsAsString =
"";
394 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
396 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
401 modelParameters.insert(rewParameters.begin(), rewParameters.end());
406 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=PF<=0.75,0.15<=badC<=0.2", modelParameters);
407 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.75<=PF<=0.8,0.2<=badC<=0.3", modelParameters);
408 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.2", modelParameters);
409 auto allVioHardRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.9", modelParameters);
421TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_stepBounded) {
422 typedef typename TestFixture::ValueType
ValueType;
424 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
425 std::string formulaAsString =
"P<0.5 [F<=300 \"observe0Greater1\" ]";
426 std::string constantsAsString =
"";
430 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
432 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
437 modelParameters.insert(rewParameters.begin(), rewParameters.end());
442 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=PF<=0.75,0.15<=badC<=0.2", modelParameters);
443 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.75<=PF<=0.8,0.2<=badC<=0.3", modelParameters);
444 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.2", modelParameters);
445 auto allVioHardRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.9", modelParameters);
457TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_1Par) {
458 typedef typename TestFixture::ValueType
ValueType;
460 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
461 std::string formulaAsString =
"P>0.75 [F \"observe0Greater1\" ]";
462 std::string constantsAsString =
"badC=0.3";
466 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
468 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
473 modelParameters.insert(rewParameters.begin(), rewParameters.end());
478 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.9<=PF<=0.99", modelParameters);
479 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.9", modelParameters);
480 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.01<=PF<=0.8", modelParameters);
490TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_Const) {
491 typedef typename TestFixture::ValueType
ValueType;
493 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
494 std::string formulaAsString =
"P>0.6 [F \"observe0Greater1\" ]";
495 std::string constantsAsString =
"PF=0.9,badC=0.2";
499 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
501 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
506 modelParameters.insert(rewParameters.begin(), rewParameters.end());
511 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"", modelParameters);
517TYPED_TEST(SparseDtmcParameterLiftingTest, ZeroConf) {
518 typedef typename TestFixture::ValueType
ValueType;
520 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/zeroconf4.pm";
521 std::string formulaAsString =
"P>0.5 [F s=5 ]";
522 std::string constantsAsString =
" n = 4";
527 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
529 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
534 modelParameters.insert(rewParameters.begin(), rewParameters.end());
539 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=pL<=0.95,0.8<=pK<=0.95", modelParameters);
540 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pL<=0.9,0.6<=pK<=0.9", modelParameters);
541 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.7,0.1<=pK<=0.7", modelParameters);
SolverEnvironment & solver()
void setPrecision(storm::RationalNumber value)
void setMethod(storm::solver::MinMaxMethod value, bool isSetFromDefault=false)
MinMaxSolverEnvironment & minMax()
This class represents a discrete-time Markov chain.
Base class for all sparse models.
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
std::unique_ptr< storm::modelchecker::RegionModelChecker< ValueType > > initializeRegionModelChecker(Environment const &env, std::shared_ptr< storm::models::sparse::Model< ValueType > > const &model, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task, storm::modelchecker::RegionCheckEngine engine, bool allowModelSimplification=true, bool graphPreserving=true, bool preconditionsValidated=false, MonotonicitySetting monotonicitySetting=MonotonicitySetting(), std::optional< std::pair< std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType >, std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType > > > monotoneParameters=std::nullopt)
std::vector< std::shared_ptr< storm::logic::Formula const > > extractFormulasFromProperties(std::vector< storm::jani::Property > const &properties)
SFTBDDChecker::ValueType ValueType
@ 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
@ ExistsBoth
the formula is satisfied for some parameters but also violated for others
@ CenterViolated
the formula is violated for the parameter Valuation that corresponds to the center point of the regio...
RegionCheckEngine
The considered engine for region checking.
@ ParameterLifting
Parameter lifting approach.
@ ValidatingParameterLifting
Parameter lifting approach with a) inexact (and fast) computation first and b) exact validation of ob...
@ ExactParameterLifting
Parameter lifting approach with exact arithmethics.
std::set< storm::RationalFunctionVariable > getRewardParameters(Model< storm::RationalFunction > const &model)
Get all parameters occurring in rewards.
std::set< storm::RationalFunctionVariable > getProbabilityParameters(Model< storm::RationalFunction > const &model)
Get all probability parameters occurring on transitions.
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes