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 =
47 std::unique_ptr<storm::modelchecker::CheckResult> result;
50 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
51 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.5), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
54 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
55 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.125), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
58 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
59 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
62 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
63 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
66 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
67 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
70 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
71 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
74 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
75 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(1.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
81 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
82 std::string constantsDef =
"N=10";
83 std::string formulasAsString =
"Pmax=? [ F{\"r\"}<=5 x=N ] ";
84 formulasAsString +=
"; \n Pmax=? [ multi( F{\"r\"}<=5 x=N, F{\"l\"}<=10 x=0 )]";
89 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
91 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
95 std::unique_ptr<storm::modelchecker::CheckResult> result;
100 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
101 storm::RationalNumber expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 5);
102 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
105 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
106 expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 15);
107 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
113 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_reward_bounded.nm";
114 std::string constantsDef =
"";
115 std::string formulasAsString =
"Pmax=? [ F{\"a\"}<=3 x=4 ] ";
116 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}<=3 x=4 ] ";
117 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}<1 x=1 ] ";
118 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )] ";
119 formulasAsString +=
"; \n Pmin=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )] ";
120 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<13 x=5, F{\"c\"}<2/5 x=3 )] ";
121 formulasAsString +=
"; \n Pmax=? [multi( F{\"a\"}<=0 x=3, F{\"b\"}<=17 x=4, F{\"c\"}<4/5 x=5 )] ";
126 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
128 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
132 std::unique_ptr<storm::modelchecker::CheckResult> result;
137 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
138 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/5");
139 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
142 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
143 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
144 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
147 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
148 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
149 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
152 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
153 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
154 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
157 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
158 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
159 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
162 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
163 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
164 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
167 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
168 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
169 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],
195 storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision());
198 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
199 EXPECT_NEAR(0.984621063, result->asExplicitQuantitativeCheckResult<
double>()[initState],
200 storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision());
206 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/csma2_2.nm";
207 std::string constantsDef =
"";
208 std::string formulasAsString =
"Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ]";
213 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
215 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
219 std::unique_ptr<storm::modelchecker::CheckResult> result;
224 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
225 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832");
226 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
232 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_lower_reward_bounded.nm";
233 std::string constantsDef =
"";
234 std::string formulasAsString =
"Pmax=? [ F{\"a\"}>=1.1 x=1 ]";
235 formulasAsString +=
"; \n Pmin=? [ F{\"a\"}>=1.1 x=1 ]";
236 formulasAsString +=
"; \n Pmax=? [ F{\"b\"}>3 x=1 ]";
237 formulasAsString +=
"; \n Pmax=? [ F{\"b\"}>=2 x=0 ]";
238 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}<=0.2 x=1, F{\"b\"}>3 x=1) ]";
239 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}>0.2 x=1, F{\"b\"}>3 x=1) ]";
240 formulasAsString +=
"; \n Pmax=? [ multi(F{\"a\"}>=2/5 x=4, F{\"a\"}<=0 x=4) ]";
245 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
247 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
251 std::unique_ptr<storm::modelchecker::CheckResult> result;
256 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
257 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/100");
258 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
261 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
262 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
263 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
266 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
267 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64");
268 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
271 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
272 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"9/16");
273 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
276 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
277 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64");
278 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
281 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
282 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640");
283 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
286 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
287 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/160");
288 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
291#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_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.5), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
321 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
322 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.125), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
325 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
326 EXPECT_EQ(storm::utility::convertNumber<storm::RationalNumber>(0.0), result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
329 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
330 std::vector<storm::RationalNumber> p1 = {storm::utility::convertNumber<storm::RationalNumber>(0.5),
331 storm::utility::convertNumber<storm::RationalNumber>(0.5)};
332 std::vector<storm::RationalNumber> q1 = {storm::utility::convertNumber<storm::RationalNumber>(0.125),
333 storm::utility::convertNumber<storm::RationalNumber>(0.75)};
334 auto expectedAchievableValues =
337 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
338 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
341 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
342 std::vector<storm::RationalNumber> p2 = {storm::utility::convertNumber<storm::RationalNumber>(0.0),
343 storm::utility::convertNumber<storm::RationalNumber>(0.75)};
344 expectedAchievableValues =
346 std::vector<std::vector<storm::RationalNumber>> transformationMatrix(2,
347 std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
348 transformationMatrix[0][0] = -storm::utility::one<storm::RationalNumber>();
349 transformationMatrix[1][1] = storm::utility::one<storm::RationalNumber>();
350 expectedAchievableValues = expectedAchievableValues->affineTransformation(
351 transformationMatrix, std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
352 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
353 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
356 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
357 std::vector<storm::RationalNumber> p3 = {storm::utility::convertNumber<storm::RationalNumber>(0.0),
358 storm::utility::convertNumber<storm::RationalNumber>(-0.75)};
359 std::vector<storm::RationalNumber> q3 = {storm::utility::convertNumber<storm::RationalNumber>(-0.5),
360 storm::utility::convertNumber<storm::RationalNumber>(0.0)};
361 expectedAchievableValues =
363 transformationMatrix[1][1] = -storm::utility::one<storm::RationalNumber>();
364 expectedAchievableValues = expectedAchievableValues->affineTransformation(
365 transformationMatrix, std::vector<storm::RationalNumber>(2, storm::utility::zero<storm::RationalNumber>()));
366 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
367 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
371 if (!storm::test::z3AtLeastVersion(4, 8, 5)) {
372 GTEST_SKIP() <<
"Test disabled since it triggers a bug in the installed version of z3.";
376 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/one_dim_walk.nm";
377 std::string constantsDef =
"N=10";
378 std::string formulasAsString =
"multi(Pmax=? [ F{\"r\"}<=5 x=N ]) ";
379 formulasAsString +=
"; \n multi(Pmax=? [ multi( F{\"r\"}<=5 x=N, F{\"l\"}<=10 x=0 )])";
380 formulasAsString +=
"; \n multi(P>=1/512 [ F{\"r\"}<=5 x=N], Pmax=? [ F{\"l\"}<=10 x=0])";
385 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
387 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
391 std::unique_ptr<storm::modelchecker::CheckResult> result;
394 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
395 storm::RationalNumber expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 5);
396 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
399 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
400 expectedResult =
storm::utility::pow(storm::utility::convertNumber<storm::RationalNumber>(0.5), 15);
401 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
404 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
405 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"2539/4096");
406 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
412 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_reward_bounded.nm";
413 std::string constantsDef =
"";
414 std::string formulasAsString =
"multi(Pmax=? [ F{\"a\"}<=3 x=4 ]) ";
415 formulasAsString +=
"; \n multi(Pmin=? [ F{\"a\"}<=3 x=4 ]) ";
416 formulasAsString +=
"; \n multi(Pmin=? [ F{\"a\"}<1 x=1 ]) ";
417 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )]) ";
418 formulasAsString +=
"; \n multi(Pmin=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<=12 x=5 )]) ";
419 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=4 x=4, F{\"b\"}<13 x=5, F{\"c\"}<2/5 x=3 )]) ";
420 formulasAsString +=
"; \n multi(Pmax=? [multi( F{\"a\"}<=0 x=3, F{\"b\"}<=17 x=4, F{\"c\"}<4/5 x=5 )]) ";
422 "; \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 )]) ";
427 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
429 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
433 std::unique_ptr<storm::modelchecker::CheckResult> result;
436 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
437 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/5");
438 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
441 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
442 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
443 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
446 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
447 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
448 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
451 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
452 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
453 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
456 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
457 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0");
458 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
461 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
462 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
463 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
466 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
467 expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/50");
468 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
471 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
472 std::vector<storm::RationalNumber> p = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1/10"),
473 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0")};
474 std::vector<storm::RationalNumber> q = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"0"),
475 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"19/100")};
476 auto expectedAchievableValues =
479 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
480 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
486 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/zeroconf_dl_not_unfolded.nm";
487 std::string constantsDef =
"N=1000,K=2,reset=true";
488 std::string formulasAsString =
"multi(Pmin=? [ F{\"t\"}<50 \"ipfound\" ])";
489 formulasAsString +=
"; \n multi(Pmax=? [multi(F{\"t\"}<50 \"ipfound\", F{\"r\"}<=0 \"ipfound\") ])";
494 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
499 std::unique_ptr<storm::modelchecker::CheckResult> result;
502 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
503 EXPECT_NEAR(0.9989804701, result->asExplicitQuantitativeCheckResult<
double>()[initState],
504 storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision());
507 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
508 EXPECT_NEAR(0.984621063, result->asExplicitQuantitativeCheckResult<
double>()[initState],
509 storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision());
515 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/csma2_2.nm";
516 std::string constantsDef =
"";
517 std::string formulasAsString =
"multi(Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ])";
518 formulasAsString +=
"; \n multi(Pmax=? [ F{\"time\"}<=70 \"all_delivered\" ], Pmax=? [ !\"collision_max_backoff\" U \"all_delivered\"] )";
523 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
525 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
529 std::unique_ptr<storm::modelchecker::CheckResult> result;
532 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
533 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832");
534 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
537 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
538 std::vector<storm::RationalNumber> p = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"29487882838281/35184372088832"),
539 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"7/8")};
540 auto expectedAchievableValues =
542 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
543 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
549 std::string programFile = STORM_TEST_RESOURCES_DIR
"/mdp/tiny_lower_reward_bounded.nm";
550 std::string constantsDef =
"";
551 std::string formulasAsString =
"multi(Pmax=? [ F{\"a\"}>=1.1 x=1 ])";
552 formulasAsString +=
"; \n multi(Pmax=? [ F{\"a\"}<=0.2 x=1], Pmax=? [F{\"b\"}>3 x=1 ])";
553 formulasAsString +=
"; \n multi(Pmax=? [ F{\"a\"}>0.2 x=1 ], Pmax=? [F{\"b\"}>3 x=1 ])";
554 formulasAsString +=
"; \n multi(Pmax=? [ multi(F{\"a\"}>=2/5 x=4, F{\"a\"}<=0 x=4)], Pmax=? [F {\"b\"}>3 x = 1])";
559 std::vector<std::shared_ptr<storm::logic::Formula const>> formulas =
561 std::shared_ptr<storm::models::sparse::Mdp<storm::RationalNumber>> mdp =
565 std::unique_ptr<storm::modelchecker::CheckResult> result;
570 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
571 storm::RationalNumber expectedResult = storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/100");
572 EXPECT_EQ(expectedResult, result->asExplicitQuantitativeCheckResult<storm::RationalNumber>()[initState]);
575 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
576 std::vector<storm::RationalNumber> p1 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1"),
577 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
578 auto expectedAchievableValues =
580 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
581 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
584 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
585 std::vector<storm::RationalNumber> p2 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"1"),
586 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640")};
587 std::vector<storm::RationalNumber> q2 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/256"),
588 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
589 expectedAchievableValues =
591 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
592 EXPECT_TRUE(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getOverApproximation()->contains(expectedAchievableValues));
595 ASSERT_TRUE(result->isExplicitParetoCurveCheckResult());
596 std::vector<storm::RationalNumber> p3 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"81/160"),
597 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"243/640")};
598 std::vector<storm::RationalNumber> q3 = {storm::utility::convertNumber<storm::RationalNumber, std::string>(
"2187/10240"),
599 storm::utility::convertNumber<storm::RationalNumber, std::string>(
"27/64")};
600 expectedAchievableValues =
602 EXPECT_TRUE(expectedAchievableValues->contains(result->asExplicitParetoCurveCheckResult<storm::RationalNumber>().getUnderApproximation()));
603 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, 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)