1#include "storm-config.h"
16void graphalgorithm_test(std::string
const& path, std::string
const& constants, std::string formulaString) {
20 std::shared_ptr<storm::models::sparse::Pomdp<double>> pomdp =
29 pomdp->getTransitionMatrix().makeRowGroupsAbsorbing(surelyNotAlmostSurelyReachTarget);
33void oneshot_test(std::string
const& path, std::string
const& constants, std::string formulaString, uint64_t lookahead) {
37 std::shared_ptr<storm::models::sparse::Pomdp<double>> pomdp =
46 pomdp->getTransitionMatrix().makeRowGroupsAbsorbing(surelyNotAlmostSurelyReachTarget);
48 std::shared_ptr<storm::utility::solver::SmtSolverFactory> smtSolverFactory = std::make_shared<storm::utility::solver::Z3SmtSolverFactory>();
53void iterativesearch_test(std::string
const& path, std::string
const& constants, std::string formulaString,
bool wr) {
57 std::shared_ptr<storm::models::sparse::Pomdp<double>> pomdp =
66 pomdp->getTransitionMatrix().makeRowGroupsAbsorbing(surelyNotAlmostSurelyReachTarget);
69 std::shared_ptr<storm::utility::solver::SmtSolverFactory> smtSolverFactory = std::make_shared<storm::utility::solver::Z3SmtSolverFactory>();
71 uint64_t lookahead = pomdp->getNumberOfStates();
80void symbolicbelsup_test(std::string
const& path, std::string
const& constants, std::string formulaString,
bool wr) {
84 std::shared_ptr<storm::models::sparse::Pomdp<double>> pomdp =
93 pomdp->getTransitionMatrix().makeRowGroupsAbsorbing(surelyNotAlmostSurelyReachTarget);
97 janicreator.
generate(targetStates, surelyNotAlmostSurelyReachTarget);
98 bool initialOnly = !wr;
106 GTEST_SKIP() <<
"Z3 not available.";
112 graphalgorithm_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.4",
"Pmax=? [F \"goal\" ]");
113 graphalgorithm_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.0",
"Pmax=? [F \"goal\" ]");
117 graphalgorithm_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [F \"goal\" ]");
118 graphalgorithm_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [F \"goal\" ]");
119 graphalgorithm_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [!\"bad\" U \"goal\" ]");
120 graphalgorithm_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [!\"bad\" U \"goal\"]");
124 oneshot_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.4",
"Pmax=? [F \"goal\" ]", 5);
125 oneshot_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.0",
"Pmax=? [F \"goal\" ]", 5);
129 oneshot_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [F \"goal\" ]", 5);
130 oneshot_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [F \"goal\" ]", 5);
131 oneshot_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [F \"goal\" ]", 30);
132 oneshot_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [F \"goal\" ]", 30);
133 oneshot_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [!\"bad\" U \"goal\" ]", 5);
134 oneshot_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [!\"bad\" U \"goal\"]", 5);
138 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.4",
"Pmax=? [F \"goal\" ]",
false);
139 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.0",
"Pmax=? [F \"goal\" ]",
false);
141 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.4",
"Pmax=? [F \"goal\" ]",
true);
142 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.0",
"Pmax=? [F \"goal\" ]",
true);
146 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [F \"goal\" ]",
false);
147 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [F \"goal\" ]",
false);
148 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [!\"bad\" U \"goal\" ]",
false);
149 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [!\"bad\" U \"goal\"]",
false);
151 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [F \"goal\" ]",
true);
152 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [F \"goal\" ]",
true);
153 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [!\"bad\" U \"goal\" ]",
true);
154 iterativesearch_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [!\"bad\" U \"goal\"]",
true);
158 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.4",
"Pmax=? [F \"goal\" ]",
false);
159 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.0",
"Pmax=? [F \"goal\" ]",
false);
161 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.4",
"Pmax=? [F \"goal\" ]",
true);
162 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/simple.prism",
"slippery=0.0",
"Pmax=? [F \"goal\" ]",
true);
166 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [F \"goal\" ]",
false);
167 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [F \"goal\" ]",
false);
168 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [!\"bad\" U \"goal\" ]",
false);
169 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [!\"bad\" U \"goal\"]",
false);
171 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [F \"goal\" ]",
true);
172 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [F \"goal\" ]",
true);
173 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.4",
"Pmax=? [!\"bad\" U \"goal\" ]",
true);
174 symbolicbelsup_test(STORM_TEST_RESOURCES_DIR
"/pomdp/maze2.prism",
"sl=0.0",
"Pmax=? [!\"bad\" U \"goal\"]",
true);
void oneshot_test(std::string const &path, std::string const &constants, std::string formulaString, uint64_t lookahead)
void symbolicbelsup_test(std::string const &path, std::string const &constants, std::string formulaString, bool wr)
TEST_F(QualitativeAnalysis, GraphAlgorithm_Simple)
void graphalgorithm_test(std::string const &path, std::string const &constants, std::string formulaString)
void iterativesearch_test(std::string const &path, std::string const &constants, std::string formulaString, bool wr)
storm::storage::BitVector analyseProbSmaller1(storm::logic::ProbabilityOperatorFormula const &formula) const
storm::storage::BitVector analyseProb1(storm::logic::ProbabilityOperatorFormula const &formula) const
This class represents a partially observable Markov decision process.
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.
bool analyzeForInitialStates(uint64_t k)
void computeWinningRegion(uint64_t k)
bool analyzeForInitialStates(uint64_t k)
Check if you can find a memoryless policy from the initial states.
void verifySymbolic(bool onlyInitial=true)
void generate(storm::storage::BitVector const &targetStates, storm::storage::BitVector const &badStates)
A bit vector that is internally represented as a vector of 64-bit values.
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
FormulaInformation getFormulaInformation(PomdpType const &pomdp, storm::logic::ProbabilityOperatorFormula const &formula)
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)