1#include "storm-config.h"
21 GTEST_SKIP() <<
"Z3 not available.";
28 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
29 std::string constantsDef =
"N=2";
30 std::string formulasAsString =
"Pmax=? [ F{\"r\"}<=1 x=N ] ";
31 formulasAsString +=
"; \n Pmax=? [ multi( F{\"r\"}<=1 x=N, F{\"l\"}<=2 x=0 )]";
32 formulasAsString +=
"; \n Pmin=? [ multi( F{\"r\"}<=1 x=N, F{\"l\"}<=2 x=0 )]";
33 formulasAsString +=
"; \n Pmax=? [ F{\"r\"}>=1 x=N ] ";
34 formulasAsString +=
"; \n Pmax=? [ F{\"r\"}>=3 x=N ] ";
35 formulasAsString +=
"; \n Pmin=? [ F{\"r\"}>=2 x=N ] ";
36 formulasAsString +=
"; \n Pmax=? [ multi( F{\"r\"}>=1 x=N, F{\"l\"}>=2 x=0 )]";
41 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
43 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
46 std::unique_ptr<storm::modelchecker::CheckResult> result;
49 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
50 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.5), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
53 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
54 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.125), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
57 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
58 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
61 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
62 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
65 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
66 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
69 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
70 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
73 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
74 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
80 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
81 std::string constantsDef =
"N=10";
82 std::string formulasAsString =
"Pmax=? [ F{\"r\"}<=5 x=N ] ";
83 formulasAsString +=
"; \n Pmax=? [ multi( F{\"r\"}<=5 x=N, F{\"l\"}<=10 x=0 )]";
88 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
90 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
94 std::unique_ptr<storm::modelchecker::CheckResult> result;
99 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
100 storm::RationalNumber expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 5);
101 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
104 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
105 expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 15);
106 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
112 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_reward_bounded.nm";
113 std::string constantsDef =
"";
114 std::string formulasAsString =
"Pmax=? [ F{\"a\"}<=3 x=4 ] ";
115 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}<=3 x=4 ] ";
116 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}<1 x=1 ] ";
117 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )] ";
118 formulasAsString +=
"; \n Pmin=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )] ";
119 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<13 x=5, F{\"c\"}<2/5 x=3 )] ";
120 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=0 x=3, F{\"b\"}<=17 x=4, F{\"c\"}<4/5 x=5 )] ";
125 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
127 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
131 std::unique_ptr<storm::modelchecker::CheckResult> result;
136 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
137 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/5");
138 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
141 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
142 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
143 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
146 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
147 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
148 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
151 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
152 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
153 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
156 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
157 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
158 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
161 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
162 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
163 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
166 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
167 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
168 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
175 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/zeroconf_dl_not_unfolded.nm";
176 std::string constantsDef =
"N=1000,K=2,reset=true";
177 std::string formulasAsString =
"Pmin=? [ F{\"t\"}<50 \"ipfound\" ]";
178 formulasAsString +=
"; \n Pmax=? [multi(F{\"t\"}<50 \"ipfound\", F{\"r\"}<=0 \"ipfound\") ]";
183 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
188 std::unique_ptr<storm::modelchecker::CheckResult> result;
193 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
194 EXPECT_NEAR(0.9989804701, result->asExplicitQuantitativeCheckResult<
double>()[initState], prec);
197 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
198 EXPECT_NEAR(0.984621063, result->asExplicitQuantitativeCheckResult<
double>()[initState], prec);
204 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/csma2_2.nm";
205 std::string constantsDef =
"";
206 std::string formulasAsString =
"Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ]";
211 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
213 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
217 std::unique_ptr<storm::modelchecker::CheckResult> result;
222 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
223 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832");
224 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
230 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_lower_reward_bounded.nm";
231 std::string constantsDef =
"";
232 std::string formulasAsString =
"Pmax=? [ F{\"a\"}>=1.1 x=1 ]";
233 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}>=1.1 x=1 ]";
234 formulasAsString +=
"; \n Pmax=? [ F{\"b\"}>3 x=1 ]";
235 formulasAsString +=
"; \n Pmax=? [ F{\"b\"}>=2 x=0 ]";
236 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}<=0.2 x=1, F{\"b\"}>3 x=1) ]";
237 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}>0.2 x=1, F{\"b\"}>3 x=1) ]";
238 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}>=2/5 x=4, F{\"a\"}<=0 x=4) ]";
243 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
245 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
249 std::unique_ptr<storm::modelchecker::CheckResult> result;
254 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
255 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/100");
256 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
259 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
260 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
261 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
264 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
265 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64");
266 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
269 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
270 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"9/16");
271 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
274 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
275 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64");
276 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
279 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
280 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640");
281 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
284 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
285 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/160");
286 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
289#ifdef STORM_HAVE_Z3_OPTIMIZE
296 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
297 std::string constantsDef =
"N=2";
298 std::string formulasAsString =
"multi(Pmax=? [ F{\"r\"}<=1 x=N ]) ";
299 formulasAsString +=
"; \n multi(Pmax=? [ multi( F{\"r\"}<=1 x=N, F{\"l\"}<=2 x=0 )])";
300 formulasAsString +=
"; \n multi(Pmin=? [ multi( F{\"r\"}<=1 x=N, F{\"l\"}<=2 x=0 )])";
301 formulasAsString +=
"; \n multi(Pmax=? [ F{\"r\"}<=1 x=N], Pmax=? [ F{\"l\"}<=2 x=0])";
302 formulasAsString +=
"; \n multi(Pmin=? [ F{\"r\"}<=1 x=N], Pmax=? [ F{\"l\"}<=2 x=0])";
303 formulasAsString +=
"; \n multi(Pmin=? [ F{\"r\"}<=1 x=N], Pmin=? [ F{\"l\"}<=2 x=0])";
308 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
310 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
314 std::unique_ptr<storm::modelchecker::CheckResult> result;
317 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
318 EXPECT_NEAR(storm::utility::convertNumber<storm::RationalNumber>(0.5), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
321 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
322 EXPECT_NEAR(storm::utility::convertNumber<storm::RationalNumber>(0.125), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState],
326 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
327 EXPECT_NEAR(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
330 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
331 std::vector<storm::RationalNumber> p1 = {storm::utility::convertNumber<storm::RationalNumber>(0.5),
332 storm::utility::convertNumber<storm::RationalNumber>(0.5)};
333 std::vector<storm::RationalNumber> q1 = {storm::utility::convertNumber<storm::RationalNumber>(0.125),
334 storm::utility::convertNumber<storm::RationalNumber>(0.75)};
335 auto expectedAchievableValues =
338 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
339 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
342 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
343 std::vector<storm::RationalNumber> p2 = {storm::utility::convertNumber<storm::RationalNumber>(0.0),
344 storm::utility::convertNumber<storm::RationalNumber>(0.75)};
345 expectedAchievableValues =
347 std::vector<std::vector<storm::RationalNumber>> transformationMatrix(2,
348 std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
349 transformationMatrix[0][0] = -storm::utility::one<storm::RationalNumber>();
350 transformationMatrix[1][1] = storm::utility::one<storm::RationalNumber>();
351 expectedAchievableValues = expectedAchievableValues->affineTransformation(
352 transformationMatrix, std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
353 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
354 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
357 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
358 std::vector<storm::RationalNumber> p3 = {storm::utility::convertNumber<storm::RationalNumber>(0.0),
359 storm::utility::convertNumber<storm::RationalNumber>(-0.75)};
360 std::vector<storm::RationalNumber> q3 = {storm::utility::convertNumber<storm::RationalNumber>(-0.5),
361 storm::utility::convertNumber<storm::RationalNumber>(0.0)};
362 expectedAchievableValues =
364 transformationMatrix[1][1] = -storm::utility::one<storm::RationalNumber>();
365 expectedAchievableValues = expectedAchievableValues->affineTransformation(
366 transformationMatrix, std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
367 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
368 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
372 if (!storm::test::z3AtLeastVersion(4, 8, 5)) {
373 GTEST_SKIP() <<
"Test disabled since it triggers a bug in the installed version of z3.";
379 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
380 std::string constantsDef =
"N=10";
381 std::string formulasAsString =
"multi(Pmax=? [ F{\"r\"}<=5 x=N ]) ";
382 formulasAsString +=
"; \n multi(Pmax=? [ multi( F{\"r\"}<=5 x=N, F{\"l\"}<=10 x=0 )])";
383 formulasAsString +=
"; \n multi(P>=1/512 [ F{\"r\"}<=5 x=N], Pmax=? [ F{\"l\"}<=10 x=0])";
388 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
390 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
394 std::unique_ptr<storm::modelchecker::CheckResult> result;
397 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
398 storm::RationalNumber expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 5);
399 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
402 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
403 expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 15);
404 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
407 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
408 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"2539/4096");
409 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
417 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_reward_bounded.nm";
418 std::string constantsDef =
"";
419 std::string formulasAsString =
"multi(Pmax=? [ F{\"a\"}<=3 x=4 ]) ";
420 formulasAsString +=
"; \n multi(Pmin=? [ F{\"a\"}<=3 x=4 ]) ";
421 formulasAsString +=
"; \n multi(Pmin=? [ F{\"a\"}<1 x=1 ]) ";
422 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )]) ";
423 formulasAsString +=
"; \n multi(Pmin=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )]) ";
424 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<13 x=5, F{\"c\"}<2/5 x=3 )]) ";
425 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=0 x=3, F{\"b\"}<=17 x=4, F{\"c\"}<4/5 x=5 )]) ";
427 "; \n multi(Pmax=? [multi( F{\"a\"}<=0 x=3, F{\"c\"}<1/2 x=5 )], Pmax=? [multi( F{\"b\"}<=0 x=3, F{\"c\"}<=4/5 x=5 )]) ";
432 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
434 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
438 std::unique_ptr<storm::modelchecker::CheckResult> result;
441 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
442 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/5");
443 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
446 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
447 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
448 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
451 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
452 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
453 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
456 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
457 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
458 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
461 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
462 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
463 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
466 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
467 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
468 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
471 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
472 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
473 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
476 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
477 std::vector<storm::RationalNumber> p = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/10"),
478 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0")};
479 std::vector<storm::RationalNumber> q = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0"),
480 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"19/100")};
481 auto expectedAchievableValues =
484 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
485 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
492 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/zeroconf_dl_not_unfolded.nm";
493 std::string constantsDef =
"N=1000,K=2,reset=true";
494 std::string formulasAsString =
"multi(Pmin=? [ F{\"t\"}<50 \"ipfound\" ])";
495 formulasAsString +=
"; \n multi(Pmax=? [multi(F{\"t\"}<50 \"ipfound\", F{\"r\"}<=0 \"ipfound\") ])";
500 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
505 std::unique_ptr<storm::modelchecker::CheckResult> result;
508 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
509 EXPECT_NEAR(0.9989804701, result->asExplicitQuantitativeCheckResult<
double>()[initState], prec);
512 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
513 EXPECT_NEAR(0.984621063, result->asExplicitQuantitativeCheckResult<
double>()[initState], prec);
521 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/csma2_2.nm";
522 std::string constantsDef =
"";
523 std::string formulasAsString =
"multi(Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ])";
524 formulasAsString +=
"; \n multi(Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ], Pmax=? [ !\"collision_max_backoff\" U \"all_delivered\"] )";
529 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
531 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
535 std::unique_ptr<storm::modelchecker::CheckResult> result;
538 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
539 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832");
540 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
543 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
544 std::vector<storm::RationalNumber> p = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832"),
545 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"7/8")};
546 auto expectedAchievableValues =
548 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
549 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
557 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_lower_reward_bounded.nm";
558 std::string constantsDef =
"";
559 std::string formulasAsString =
"multi(Pmax=? [ F{\"a\"}>=1.1 x=1 ])";
560 formulasAsString +=
"; \n multi(Pmax=? [ F{\"a\"}<=0.2 x=1], Pmax=? [F{\"b\"}>3 x=1 ])";
561 formulasAsString +=
"; \n multi(Pmax=? [ F{\"a\"}>0.2 x=1 ], Pmax=? [F{\"b\"}>3 x=1 ])";
562 formulasAsString +=
"; \n multi(Pmax=? [ multi(F{\"a\"}>=2/5 x=4, F{\"a\"}<=0 x=4)], Pmax=? [F {\"b\"}>3 x = 1])";
567 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
569 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
573 std::unique_ptr<storm::modelchecker::CheckResult> result;
578 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
579 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/100");
580 EXPECT_NEAR(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState], prec);
583 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
584 std::vector<storm::RationalNumber> p1 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1"),
585 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
586 auto expectedAchievableValues =
588 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
589 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
592 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
593 std::vector<storm::RationalNumber> p2 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1"),
594 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640")};
595 std::vector<storm::RationalNumber> q2 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/256"),
596 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
597 expectedAchievableValues =
599 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
600 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
603 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
604 std::vector<storm::RationalNumber> p3 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/160"),
605 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640")};
606 std::vector<storm::RationalNumber> q3 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"2187/10240"),
607 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
608 expectedAchievableValues =
610 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
611 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
TEST_F(SparseMdpMultiDimensionalRewardUnfoldingTest, single_obj_one_dim_walk_small)
SolverEnvironment & solver()
ModelCheckerEnvironment & modelchecker()
MultiObjectiveModelCheckerEnvironment & multi()
storm::RationalNumber const & getPrecision() const
void setForceExact(bool value)
This class represents a (discrete-time) Markov decision process.
storm::storage::BitVector const & getInitialStates() const
Retrieves the initial states of the model.
const_iterator begin() const
Returns an iterator to the indices of the set bits in the bit vector.
static std::shared_ptr< Polytope< ValueType > > createDownwardClosure(std::vector< Point > const &points)
Creates the downward closure of the given points (i.e., the set { x | ex.
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)
std::unique_ptr< storm::modelchecker::CheckResult > verifyWithSparseEngine(storm::Environment const &env, std::shared_ptr< storm::models::sparse::Dtmc< ValueType > > const &dtmc, storm::modelchecker::CheckTask< storm::logic::Formula, ValueType > const &task)
std::unique_ptr< CheckResult > performMultiObjectiveModelChecking(Environment const &env, SparseModelType const &model, storm::logic::MultiObjectiveFormula const &formula, bool produceScheduler)
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)
ValueType pow(ValueType const &value, int_fast64_t exponent)