Storm 1.13.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ObservationTraceUnfolderTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
7#include "storm/api/storm.h"
11
12TEST(ObservationTraceUnfolder, Simple) {
13#ifndef STORM_HAVE_Z3
14 GTEST_SKIP() << "Z3 not available.";
15#endif
16 storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/pomdp/simple.prism");
17 program = storm::utility::prism::preprocess(program, "slippery=0.4");
18 std::shared_ptr<storm::logic::Formula const> formula = storm::api::parsePropertiesForPrismProgram("Pmax=? [F \"goal\" ]", program).front().getRawFormula();
19 std::shared_ptr<storm::models::sparse::Pomdp<double>> pomdp =
21
22 std::vector<double> risk(pomdp->getNumberOfStates(), storm::utility::zero<double>());
23 std::shared_ptr<storm::expressions::ExpressionManager> exprManager = std::make_shared<storm::expressions::ExpressionManager>();
25
26 storm::pomdp::ObservationTraceUnfolder<double> unfolder(*pomdp, risk, exprManager, options);
27
28 uint64_t initialState = pomdp->getInitialStates().getNextSetIndex(0);
29 std::vector<uint32_t> observations = {pomdp->getObservation(initialState), pomdp->getObservation(initialState), pomdp->getObservation(initialState)};
30
31 std::shared_ptr<storm::models::sparse::Mdp<double>> unfolded = unfolder.transform(observations);
32 EXPECT_TRUE(unfolded != nullptr);
33 EXPECT_GT(unfolded->getNumberOfStates(), 0u);
34 EXPECT_TRUE(unfolded->getStateLabeling().containsLabel("_goal"));
35 EXPECT_TRUE(unfolded->getStateLabeling().containsLabel("_end"));
36 EXPECT_TRUE(unfolded->getStateLabeling().containsLabel("init"));
37 EXPECT_EQ(1u, unfolded->getInitialStates().getNumberOfSetBits());
38}
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.
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)
Definition builder.h:109
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)
Definition prism.cpp:13
ValueType zero()
Definition constants.cpp:24