Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ObservationTraceUnfolderTest.cpp
Go to the documentation of this file.
1#include <memory>
2
3#include "storm-config.h"
4#include "test/storm_gtest.h"
5
9#include "storm/api/storm.h"
13
14TEST(ObservationTraceUnfolder, Simple) {
15#ifndef STORM_HAVE_Z3
16 GTEST_SKIP() << "Z3 not available.";
17#endif
18 storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/pomdp/simple.prism");
19 program = program.preprocess("slippery=0.4");
20 std::shared_ptr<storm::logic::Formula const> formula = storm::api::parsePropertiesForPrismProgram("Pmax=? [F \"goal\" ]", program).front().getRawFormula();
21 std::shared_ptr<storm::models::sparse::Pomdp<double>> pomdp =
23
24 std::vector<double> risk(pomdp->getNumberOfStates(), storm::utility::zero<double>());
25 std::shared_ptr<storm::expressions::ExpressionManager> exprManager = std::make_shared<storm::expressions::ExpressionManager>();
27
28 storm::pomdp::ObservationTraceUnfolder<double> unfolder(*pomdp, risk, exprManager, options);
29
30 uint64_t initialState = pomdp->getInitialStates().getNextSetIndex(0);
31 std::vector<uint32_t> observations = {pomdp->getObservation(initialState), pomdp->getObservation(initialState), pomdp->getObservation(initialState)};
32
33 std::shared_ptr<storm::models::sparse::Mdp<double>> unfolded = unfolder.transform(observations);
34 EXPECT_TRUE(unfolded != nullptr);
35 EXPECT_GT(unfolded->getNumberOfStates(), 0u);
36 EXPECT_TRUE(unfolded->getStateLabeling().containsLabel("_goal"));
37 EXPECT_TRUE(unfolded->getStateLabeling().containsLabel("_end"));
38 EXPECT_TRUE(unfolded->getStateLabeling().containsLabel("init"));
39 EXPECT_EQ(1u, unfolded->getInitialStates().getNumberOfSetBits());
40}
41
42TEST(ObservationTraceUnfolder, ExpressionManagerOutlivesConstructorArgument) {
43 // This test captures an earlier bug where observationTraceUnfolder stores a reference to shared_ptr<ExpressionManager>
44#ifndef STORM_HAVE_Z3
45 GTEST_SKIP() << "Z3 not available.";
46#endif
47 storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/pomdp/simple.prism");
48 program = program.preprocess("slippery=0.4");
49 std::shared_ptr<storm::logic::Formula const> formula = storm::api::parsePropertiesForPrismProgram("Pmax=? [F \"goal\" ]", program).front().getRawFormula();
50 std::shared_ptr<storm::models::sparse::Pomdp<double>> pomdp =
52
53 std::vector<double> risk(pomdp->getNumberOfStates(), storm::utility::zero<double>());
55
56 std::unique_ptr<storm::pomdp::ObservationTraceUnfolder<double>> unfolder;
57 {
58 std::shared_ptr<storm::expressions::ExpressionManager> exprManager = std::make_shared<storm::expressions::ExpressionManager>();
59 unfolder = std::make_unique<storm::pomdp::ObservationTraceUnfolder<double>>(*pomdp, risk, exprManager, options);
60 // exprManager goes out of scope here. The unfolder must not depend on it still being alive.
61 }
62
63 uint64_t initialState = pomdp->getInitialStates().getNextSetIndex(0);
64 std::vector<uint32_t> observations = {pomdp->getObservation(initialState), pomdp->getObservation(initialState), pomdp->getObservation(initialState)};
65
66 std::shared_ptr<storm::models::sparse::Mdp<double>> unfolded = unfolder->transform(observations);
67 EXPECT_TRUE(unfolded != nullptr);
68 EXPECT_GT(unfolded->getNumberOfStates(), 0u);
69}
TEST(ObservationTraceUnfolder, Simple)
This class represents a partially observable Markov decision process.
Definition Pomdp.h:13
static storm::prism::Program parse(std::string const &filename, bool prismCompatability=false)
Parses the given file into the PRISM storage classes assuming it complies with the PRISM syntax.
Observation-trace unrolling to allow model checking for monitoring.
std::shared_ptr< storm::models::sparse::Mdp< ValueType > > transform(std::vector< uint32_t > const &observations)
Transform in one shot.
Program preprocess(std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions) const
Preprocesses the program by defining the given constant definitions, substituting constants and formu...
Definition Program.cpp:1170
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
std::shared_ptr< storm::models::sparse::Model< ValueType > > buildSparseModel(storm::storage::SymbolicModelDescription const &model, storm::builder::BuilderOptions const &options, typename storm::builder::ExplicitModelBuilder< ValueType >::Options const &explorationOptions=typename storm::builder::ExplicitModelBuilder< ValueType >::Options())
Definition builder.h:117
ValueType zero()
Definition constants.cpp:24