#include "tracker.h" #include "src/helpers.h" #include #include #include #include template using SparsePomdp = storm::models::sparse::Pomdp; template std::shared_ptr> createWinningRegionSolver(SparsePomdp const& pomdp, storm::logic::Formula const& formula, storm::pomdp::MemlessSearchOptions const& options) { STORM_LOG_TRACE("Run qualitative preprocessing..."); storm::analysis::QualitativeAnalysisOnGraphs qualitativeAnalysis(pomdp); // After preprocessing, this might be done cheaper. storm::storage::BitVector targetStates = qualitativeAnalysis.analyseProb1(formula.asProbabilityOperatorFormula()); storm::storage::BitVector surelyNotAlmostSurelyReachTarget = qualitativeAnalysis.analyseProbSmaller1(formula.asProbabilityOperatorFormula()); storm::expressions::ExpressionManager expressionManager; std::shared_ptr smtSolverFactory = std::make_shared(); return std::make_shared>(pomdp, targetStates, surelyNotAlmostSurelyReachTarget, smtSolverFactory, options); } template void define_qualitative_policy_search(py::module& m, std::string const& vtSuffix) { m.def(("create_iterative_qualitative_search_solver_" + vtSuffix).c_str(), &createWinningRegionSolver, "Create solver " ,py::arg("pomdp"), py::arg("formula"), py::arg("options")); py::class_, std::shared_ptr>> mssq(m, ("IterativeQualitativeSearchSolver" + vtSuffix).c_str(), "Solver for POMDPs that solves qualitative queries"); mssq.def("compute_winning_region", &storm::pomdp::MemlessStrategySearchQualitative::computeWinningRegion, py::arg("lookahead")); mssq.def_property_readonly("last_winning_region", &storm::pomdp::MemlessStrategySearchQualitative::getLastWinningRegion, "get the last computed winning region"); py::class_> wrqi(m, ("BeliefSupportWinningRegionQueryInterface" + vtSuffix).c_str()); wrqi.def(py::init const&, storm::pomdp::WinningRegion const&>(), py::arg("pomdp"), py::arg("BeliefSupportWinningRegion")); wrqi.def("query_current_belief", &storm::pomdp::WinningRegionQueryInterface::isInWinningRegion, py::arg("current_belief")); wrqi.def("query_action", &storm::pomdp::WinningRegionQueryInterface::staysInWinningRegion, py::arg("current_belief"), py::arg("action")); } template void define_qualitative_policy_search(py::module& m, std::string const& vtSuffix); void define_qualitative_policy_search_nt(py::module& m) { py::class_ mssqopts(m, "IterativeQualitativeSearchOptions", "Options for the IterativeQualitativeSearch"); mssqopts.def(py::init<>()); py::class_ winningRegion(m, "BeliefSupportWinningRegion"); }