1#include "storm-config.h"
22 GTEST_SKIP() <<
"Z3 not available.";
29 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
30 std::string constantsDef =
"N=2";
31 std::string formulasAsString =
"Pmax=? [ F{\"r\"}<=1 x=N ] ";
32 formulasAsString +=
"; \n Pmax=? [ multi( F{\"r\"}<=1 x=N, F{\"l\"}<=2 x=0 )]";
33 formulasAsString +=
"; \n Pmin=? [ multi( F{\"r\"}<=1 x=N, F{\"l\"}<=2 x=0 )]";
34 formulasAsString +=
"; \n Pmax=? [ F{\"r\"}>=1 x=N ] ";
35 formulasAsString +=
"; \n Pmax=? [ F{\"r\"}>=3 x=N ] ";
36 formulasAsString +=
"; \n Pmin=? [ F{\"r\"}>=2 x=N ] ";
37 formulasAsString +=
"; \n Pmax=? [ multi( F{\"r\"}>=1 x=N, F{\"l\"}>=2 x=0 )]";
42 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
44 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
48 std::unique_ptr<storm::modelchecker::CheckResult> result;
51 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
52 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.5), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
55 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
56 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.125), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
59 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
60 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
63 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
64 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
67 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
68 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
71 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
72 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
75 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
76 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
82 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
83 std::string constantsDef =
"N=10";
84 std::string formulasAsString =
"Pmax=? [ F{\"r\"}<=5 x=N ] ";
85 formulasAsString +=
"; \n Pmax=? [ multi( F{\"r\"}<=5 x=N, F{\"l\"}<=10 x=0 )]";
90 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
92 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
97 std::unique_ptr<storm::modelchecker::CheckResult> result;
102 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
103 storm::RationalNumber expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 5);
104 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
107 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
108 expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 15);
109 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
115 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_reward_bounded.nm";
116 std::string constantsDef =
"";
117 std::string formulasAsString =
"Pmax=? [ F{\"a\"}<=3 x=4 ] ";
118 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}<=3 x=4 ] ";
119 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}<1 x=1 ] ";
120 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )] ";
121 formulasAsString +=
"; \n Pmin=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )] ";
122 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<13 x=5, F{\"c\"}<2/5 x=3 )] ";
123 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=0 x=3, F{\"b\"}<=17 x=4, F{\"c\"}<4/5 x=5 )] ";
128 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
130 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
135 std::unique_ptr<storm::modelchecker::CheckResult> result;
140 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
141 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/5");
142 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
145 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
146 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
147 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
150 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
151 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
152 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
155 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
156 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
157 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
160 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
161 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
162 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
165 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
166 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
167 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
170 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
171 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
172 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
178 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/zeroconf_dl_not_unfolded.nm";
179 std::string constantsDef =
"N=1000,K=2,reset=true";
180 std::string formulasAsString =
"Pmin=? [ F{\"t\"}<50 \"ipfound\" ]";
181 formulasAsString +=
"; \n Pmax=? [multi(F{\"t\"}<50 \"ipfound\", F{\"r\"}<=0 \"ipfound\") ]";
186 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
192 std::unique_ptr<storm::modelchecker::CheckResult> result;
197 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
198 EXPECT_NEAR(0.9989804701, result->asExplicitQuantitativeCheckResult<
double>()[initState],
202 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
203 EXPECT_NEAR(0.984621063, result->asExplicitQuantitativeCheckResult<
double>()[initState],
210 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/csma2_2.nm";
211 std::string constantsDef =
"";
212 std::string formulasAsString =
"Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ]";
217 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
219 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
224 std::unique_ptr<storm::modelchecker::CheckResult> result;
229 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
230 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832");
231 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
237 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_lower_reward_bounded.nm";
238 std::string constantsDef =
"";
239 std::string formulasAsString =
"Pmax=? [ F{\"a\"}>=1.1 x=1 ]";
240 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}>=1.1 x=1 ]";
241 formulasAsString +=
"; \n Pmax=? [ F{\"b\"}>3 x=1 ]";
242 formulasAsString +=
"; \n Pmax=? [ F{\"b\"}>=2 x=0 ]";
243 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}<=0.2 x=1, F{\"b\"}>3 x=1) ]";
244 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}>0.2 x=1, F{\"b\"}>3 x=1) ]";
245 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}>=2/5 x=4, F{\"a\"}<=0 x=4) ]";
250 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
252 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
257 std::unique_ptr<storm::modelchecker::CheckResult> result;
262 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
263 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/100");
264 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
267 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
268 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
269 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
272 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
273 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64");
274 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
277 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
278 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"9/16");
279 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
282 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
283 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64");
284 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
287 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
288 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640");
289 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
292 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
293 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/160");
294 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
297#ifdef STORM_HAVE_Z3_OPTIMIZE
302 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
303 std::string constantsDef =
"N=2";
304 std::string formulasAsString =
"multi(Pmax=? [ F{\"r\"}<=1 x=N ]) ";
305 formulasAsString +=
"; \n multi(Pmax=? [ multi( F{\"r\"}<=1 x=N, F{\"l\"}<=2 x=0 )])";
306 formulasAsString +=
"; \n multi(Pmin=? [ multi( F{\"r\"}<=1 x=N, F{\"l\"}<=2 x=0 )])";
307 formulasAsString +=
"; \n multi(Pmax=? [ F{\"r\"}<=1 x=N], Pmax=? [ F{\"l\"}<=2 x=0])";
308 formulasAsString +=
"; \n multi(Pmin=? [ F{\"r\"}<=1 x=N], Pmax=? [ F{\"l\"}<=2 x=0])";
309 formulasAsString +=
"; \n multi(Pmin=? [ F{\"r\"}<=1 x=N], Pmin=? [ F{\"l\"}<=2 x=0])";
314 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
316 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
321 std::unique_ptr<storm::modelchecker::CheckResult> result;
324 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
325 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.5), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
328 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
329 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.125), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
332 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
333 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
336 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
337 std::vector<storm::RationalNumber> p1 = {storm::utility::convertNumber<storm::RationalNumber>(0.5),
338 storm::utility::convertNumber<storm::RationalNumber>(0.5)};
339 std::vector<storm::RationalNumber> q1 = {storm::utility::convertNumber<storm::RationalNumber>(0.125),
340 storm::utility::convertNumber<storm::RationalNumber>(0.75)};
341 auto expectedAchievableValues =
344 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
345 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
348 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
349 std::vector<storm::RationalNumber> p2 = {storm::utility::convertNumber<storm::RationalNumber>(0.0),
350 storm::utility::convertNumber<storm::RationalNumber>(0.75)};
351 expectedAchievableValues =
353 std::vector<std::vector<storm::RationalNumber>> transformationMatrix(2,
354 std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
355 transformationMatrix[0][0] = -storm::utility::one<storm::RationalNumber>();
356 transformationMatrix[1][1] = storm::utility::one<storm::RationalNumber>();
357 expectedAchievableValues = expectedAchievableValues->affineTransformation(
358 transformationMatrix, std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
359 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
360 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
363 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
364 std::vector<storm::RationalNumber> p3 = {storm::utility::convertNumber<storm::RationalNumber>(0.0),
365 storm::utility::convertNumber<storm::RationalNumber>(-0.75)};
366 std::vector<storm::RationalNumber> q3 = {storm::utility::convertNumber<storm::RationalNumber>(-0.5),
367 storm::utility::convertNumber<storm::RationalNumber>(0.0)};
368 expectedAchievableValues =
370 transformationMatrix[1][1] = -storm::utility::one<storm::RationalNumber>();
371 expectedAchievableValues = expectedAchievableValues->affineTransformation(
372 transformationMatrix, std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
373 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
374 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
378 if (!storm::test::z3AtLeastVersion(4, 8, 5)) {
379 GTEST_SKIP() <<
"Test disabled since it triggers a bug in the installed version of z3.";
383 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
384 std::string constantsDef =
"N=10";
385 std::string formulasAsString =
"multi(Pmax=? [ F{\"r\"}<=5 x=N ]) ";
386 formulasAsString +=
"; \n multi(Pmax=? [ multi( F{\"r\"}<=5 x=N, F{\"l\"}<=10 x=0 )])";
387 formulasAsString +=
"; \n multi(P>=1/512 [ F{\"r\"}<=5 x=N], Pmax=? [ F{\"l\"}<=10 x=0])";
392 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
394 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
399 std::unique_ptr<storm::modelchecker::CheckResult> result;
402 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
403 storm::RationalNumber expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 5);
404 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
407 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
408 expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 15);
409 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
412 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
413 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"2539/4096");
414 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
420 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_reward_bounded.nm";
421 std::string constantsDef =
"";
422 std::string formulasAsString =
"multi(Pmax=? [ F{\"a\"}<=3 x=4 ]) ";
423 formulasAsString +=
"; \n multi(Pmin=? [ F{\"a\"}<=3 x=4 ]) ";
424 formulasAsString +=
"; \n multi(Pmin=? [ F{\"a\"}<1 x=1 ]) ";
425 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )]) ";
426 formulasAsString +=
"; \n multi(Pmin=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )]) ";
427 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<13 x=5, F{\"c\"}<2/5 x=3 )]) ";
428 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=0 x=3, F{\"b\"}<=17 x=4, F{\"c\"}<4/5 x=5 )]) ";
430 "; \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 )]) ";
435 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
437 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
442 std::unique_ptr<storm::modelchecker::CheckResult> result;
445 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
446 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/5");
447 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
450 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
451 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
452 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
455 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
456 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
457 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
460 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
461 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
462 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
465 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
466 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
467 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
470 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
471 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
472 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
475 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
476 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
477 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
480 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
481 std::vector<storm::RationalNumber> p = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/10"),
482 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0")};
483 std::vector<storm::RationalNumber> q = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0"),
484 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"19/100")};
485 auto expectedAchievableValues =
488 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
489 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
495 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/zeroconf_dl_not_unfolded.nm";
496 std::string constantsDef =
"N=1000,K=2,reset=true";
497 std::string formulasAsString =
"multi(Pmin=? [ F{\"t\"}<50 \"ipfound\" ])";
498 formulasAsString +=
"; \n multi(Pmax=? [multi(F{\"t\"}<50 \"ipfound\", F{\"r\"}<=0 \"ipfound\") ])";
503 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
509 std::unique_ptr<storm::modelchecker::CheckResult> result;
512 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
513 EXPECT_NEAR(0.9989804701, result->asExplicitQuantitativeCheckResult<
double>()[initState],
517 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
518 EXPECT_NEAR(0.984621063, result->asExplicitQuantitativeCheckResult<
double>()[initState],
525 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/csma2_2.nm";
526 std::string constantsDef =
"";
527 std::string formulasAsString =
"multi(Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ])";
528 formulasAsString +=
"; \n multi(Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ], Pmax=? [ !\"collision_max_backoff\" U \"all_delivered\"] )";
533 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
535 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
540 std::unique_ptr<storm::modelchecker::CheckResult> result;
543 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
544 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832");
545 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
548 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
549 std::vector<storm::RationalNumber> p = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832"),
550 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"7/8")};
551 auto expectedAchievableValues =
553 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
554 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
560 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_lower_reward_bounded.nm";
561 std::string constantsDef =
"";
562 std::string formulasAsString =
"multi(Pmax=? [ F{\"a\"}>=1.1 x=1 ])";
563 formulasAsString +=
"; \n multi(Pmax=? [ F{\"a\"}<=0.2 x=1], Pmax=? [F{\"b\"}>3 x=1 ])";
564 formulasAsString +=
"; \n multi(Pmax=? [ F{\"a\"}>0.2 x=1 ], Pmax=? [F{\"b\"}>3 x=1 ])";
565 formulasAsString +=
"; \n multi(Pmax=? [ multi(F{\"a\"}>=2/5 x=4, F{\"a\"}<=0 x=4)], Pmax=? [F {\"b\"}>3 x = 1])";
570 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
572 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
577 std::unique_ptr<storm::modelchecker::CheckResult> result;
582 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
583 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/100");
584 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
587 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
588 std::vector<storm::RationalNumber> p1 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1"),
589 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
590 auto expectedAchievableValues =
592 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
593 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
596 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
597 std::vector<storm::RationalNumber> p2 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1"),
598 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640")};
599 std::vector<storm::RationalNumber> q2 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/256"),
600 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
601 expectedAchievableValues =
603 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
604 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
607 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
608 std::vector<storm::RationalNumber> p3 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/160"),
609 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640")};
610 std::vector<storm::RationalNumber> q3 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"2187/10240"),
611 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
612 expectedAchievableValues =
614 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
615 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
TEST_F(SparseMdpMultiDimensionalRewardUnfoldingTest, single_obj_one_dim_walk_small)
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)
SettingsType const & getModule()
Get module.
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)