1#include "storm-config.h"
20class DoubleViEnvironment {
31class DoubleSVIEnvironment {
42class RationalPiEnvironment {
51template<
typename TestType>
52class SparseDtmcParameterLiftingTest :
public ::testing::Test {
54 typedef typename TestType::ValueType
ValueType;
55 SparseDtmcParameterLiftingTest() : _environment(TestType::createEnvironment()) {}
59 virtual void SetUp() {
61 GTEST_SKIP() <<
"Z3 not available.";
63 carl::VariablePool::getInstance().clear();
65 virtual void TearDown() {
66 carl::VariablePool::getInstance().clear();
73typedef ::testing::Types<DoubleViEnvironment, DoubleSVIEnvironment, RationalPiEnvironment>
TestingTypes;
77TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob) {
78 typedef typename TestFixture::ValueType
ValueType;
80 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
81 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
82 std::string constantsAsString =
"";
87 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
89 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
94 modelParameters.insert(rewParameters.begin(), rewParameters.end());
96 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
97 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
100 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
101 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
102 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
115TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob_no_simplification) {
116 typedef typename TestFixture::ValueType
ValueType;
118 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
119 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
120 std::string constantsAsString =
"";
125 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
127 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
132 modelParameters.insert(rewParameters.begin(), rewParameters.end());
134 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
135 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true),
false,
false);
138 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
139 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
140 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
153TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew) {
154 typedef typename TestFixture::ValueType
ValueType;
155 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
156 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
157 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
161 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
163 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
168 modelParameters.insert(rewParameters.begin(), rewParameters.end());
170 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
171 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
174 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
175 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
176 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
189TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Bounded) {
190 typedef typename TestFixture::ValueType
ValueType;
191 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
192 std::string formulaAsString =
"R>2.5 [ C<=300]";
193 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
197 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
199 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
204 modelParameters.insert(rewParameters.begin(), rewParameters.end());
206 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
207 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
210 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
211 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
212 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
225TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Prob_exactValidation) {
226 typedef typename TestFixture::ValueType
ValueType;
227 if (!std::is_same<ValueType, storm::RationalNumber>::value) {
228 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
229 std::string formulaAsString =
"P<=0.84 [F s=5 ]";
230 std::string constantsAsString =
"";
235 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
237 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
240 auto regionChecker = storm::api::initializeValidatingRegionModelChecker<storm::RationalFunction, ValueType, storm::RationalNumber>(
241 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
245 modelParameters.insert(rewParameters.begin(), rewParameters.end());
248 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pL<=0.9,0.75<=pK<=0.95", modelParameters);
249 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.4<=pL<=0.65,0.75<=pK<=0.95", modelParameters);
250 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pL<=0.73,0.2<=pK<=0.715", modelParameters);
264TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_exactValidation) {
265 typedef typename TestFixture::ValueType
ValueType;
266 if (!std::is_same<ValueType, storm::RationalNumber>::value) {
267 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
268 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
269 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
273 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
275 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
280 modelParameters.insert(rewParameters.begin(), rewParameters.end());
282 auto regionChecker = storm::api::initializeValidatingRegionModelChecker<storm::RationalFunction, ValueType, storm::RationalNumber>(
283 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
286 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
287 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
288 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
302TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Bounded_exactValidation) {
303 typedef typename TestFixture::ValueType
ValueType;
305 if (!std::is_same<ValueType, storm::RationalNumber>::value) {
306 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
307 std::string formulaAsString =
"R>2.5 [ C<=300]";
308 std::string constantsAsString =
"pL=0.9,TOAck=0.5";
312 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
314 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
319 modelParameters.insert(rewParameters.begin(), rewParameters.end());
321 auto regionChecker = storm::api::initializeValidatingRegionModelChecker<storm::RationalFunction, ValueType, storm::RationalNumber>(
322 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
325 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.7<=pK<=0.875,0.75<=TOMsg<=0.95", modelParameters);
326 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pK<=0.9,0.5<=TOMsg<=0.95", modelParameters);
327 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=pK<=0.3,0.2<=TOMsg<=0.3", modelParameters);
341TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_Infty) {
342 typedef typename TestFixture::ValueType
ValueType;
344 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
345 std::string formulaAsString =
"R>2.5 [F (s=0&srep=3) ]";
346 std::string constantsAsString =
"";
349 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
351 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
356 modelParameters.insert(rewParameters.begin(), rewParameters.end());
358 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
359 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
362 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);
369TYPED_TEST(SparseDtmcParameterLiftingTest, Brp_Rew_4Par) {
370 typedef typename TestFixture::ValueType
ValueType;
372 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp_rewards16_2.pm";
373 std::string formulaAsString =
"R>2.5 [F ((s=5) | (s=0&srep=3)) ]";
374 std::string constantsAsString =
"";
377 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
379 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
384 modelParameters.insert(rewParameters.begin(), rewParameters.end());
386 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
387 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
390 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);
391 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);
392 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);
405TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob) {
406 typedef typename TestFixture::ValueType
ValueType;
408 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
409 std::string formulaAsString =
"P<0.5 [F \"observe0Greater1\" ]";
410 std::string constantsAsString =
"";
414 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
416 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
421 modelParameters.insert(rewParameters.begin(), rewParameters.end());
423 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
424 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
427 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=PF<=0.75,0.15<=badC<=0.2", modelParameters);
428 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.75<=PF<=0.8,0.2<=badC<=0.3", modelParameters);
429 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.2", modelParameters);
430 auto allVioHardRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.9", modelParameters);
446TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_stepBounded) {
447 typedef typename TestFixture::ValueType
ValueType;
449 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
450 std::string formulaAsString =
"P<0.5 [F<=300 \"observe0Greater1\" ]";
451 std::string constantsAsString =
"";
455 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
457 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
462 modelParameters.insert(rewParameters.begin(), rewParameters.end());
464 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
465 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
468 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.1<=PF<=0.75,0.15<=badC<=0.2", modelParameters);
469 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.75<=PF<=0.8,0.2<=badC<=0.3", modelParameters);
470 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.2", modelParameters);
471 auto allVioHardRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.95,0.2<=badC<=0.9", modelParameters);
487TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_1Par) {
488 typedef typename TestFixture::ValueType
ValueType;
490 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
491 std::string formulaAsString =
"P>0.75 [F \"observe0Greater1\" ]";
492 std::string constantsAsString =
"badC=0.3";
496 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
498 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
503 modelParameters.insert(rewParameters.begin(), rewParameters.end());
505 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
506 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
509 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.9<=PF<=0.99", modelParameters);
510 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=PF<=0.9", modelParameters);
511 auto allVioRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.01<=PF<=0.8", modelParameters);
524TYPED_TEST(SparseDtmcParameterLiftingTest, Crowds_Prob_Const) {
525 typedef typename TestFixture::ValueType
ValueType;
527 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/crowds3_5.pm";
528 std::string formulaAsString =
"P>0.6 [F \"observe0Greater1\" ]";
529 std::string constantsAsString =
"PF=0.9,badC=0.2";
533 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
535 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
540 modelParameters.insert(rewParameters.begin(), rewParameters.end());
542 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
543 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
546 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"", modelParameters);
553TYPED_TEST(SparseDtmcParameterLiftingTest, ZeroConf) {
554 typedef typename TestFixture::ValueType
ValueType;
556 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/zeroconf4.pm";
557 std::string formulaAsString =
"P>0.5 [F s=5 ]";
558 std::string constantsAsString =
" n = 4";
563 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
565 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
570 modelParameters.insert(rewParameters.begin(), rewParameters.end());
572 auto regionChecker = storm::api::initializeParameterLiftingRegionModelChecker<storm::RationalFunction, ValueType>(
573 this->env(), model, storm::api::createTask<storm::RationalFunction>(formulas[0],
true));
576 auto allSatRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.8<=pL<=0.95,0.8<=pK<=0.95", modelParameters);
577 auto exBothRegion = storm::api::parseRegion<storm::RationalFunction>(
"0.6<=pL<=0.9,0.6<=pK<=0.9", modelParameters);
578 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.
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::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 parameters in the given region
@ AllViolated
the formula is violated for all parameters in the given region
@ Unknown
the result is unknown
@ 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...
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