#include "tracker.h" #include "src/helpers.h" #include #include template using SparsePomdp = storm::models::sparse::Pomdp; template using SparsePomdpTracker = storm::generator::BeliefSupportTracker; template using NDPomdpTrackerSparse = storm::generator::NondeterministicBeliefTracker>; template using NDPomdpTrackerDense = storm::generator::NondeterministicBeliefTracker>; template void define_tracker(py::module& m, std::string const& vtSuffix) { py::class_> tracker(m, ("BeliefSupportTracker" + vtSuffix).c_str(), "Tracker for BeliefSupports"); tracker.def(py::init const&>(), py::arg("pomdp")); tracker.def("get_current_belief_support", &SparsePomdpTracker::getCurrentBeliefSupport, "What is the support given the trace so far"); tracker.def("track", &SparsePomdpTracker::track, py::arg("action"), py::arg("observation")); py::class_> sbel(m, ("SparseBeliefState" + vtSuffix).c_str(), "Belief state in sparse format"); sbel.def("get", &storm::generator::SparseBeliefState::get, py::arg("state")); sbel.def_property_readonly("risk", &storm::generator::SparseBeliefState::getRisk); sbel.def("__str__", &storm::generator::SparseBeliefState::toString); sbel.def_property_readonly("is_valid", &storm::generator::SparseBeliefState::isValid); // // py::class_> dbel(m, "DenseBeliefStateDouble", "Belief state in dense format"); // dbel.def("get", &storm::generator::ObservationDenseBeliefState::get, py::arg("state")); // dbel.def_property_readonly("risk", &storm::generator::ObservationDenseBeliefState::getRisk); // dbel.def("__str__", &storm::generator::ObservationDenseBeliefState::toString); py::class_::Options> opts(m, ("NondeterministicBeliefTracker" + vtSuffix + "SparseOptions").c_str(), "Options for the corresponding tracker"); opts.def(py::init<>()); opts.def_readwrite("track_timeout", &NDPomdpTrackerSparse::Options::trackTimeOut); opts.def_readwrite("reduction_timeout", &NDPomdpTrackerSparse::Options::timeOut); opts.def_readwrite("reduction_wiggle", &NDPomdpTrackerSparse::Options::wiggle); py::class_> ndetbelieftracker(m, ("NondeterministicBeliefTracker" + vtSuffix + "Sparse").c_str(), "Tracker for belief states and uncontrollable actions"); ndetbelieftracker.def(py::init const&, typename NDPomdpTrackerSparse::Options>(), py::arg("pomdp"), py::arg("options")); ndetbelieftracker.def("reset", &NDPomdpTrackerSparse::reset); ndetbelieftracker.def("set_risk", &NDPomdpTrackerSparse::setRisk, py::arg("risk")); ndetbelieftracker.def("obtain_current_risk",&NDPomdpTrackerSparse::getCurrentRisk, py::arg("max")=true); ndetbelieftracker.def("track", &NDPomdpTrackerSparse::track, py::arg("observation")); ndetbelieftracker.def("obtain_beliefs", &NDPomdpTrackerSparse::getCurrentBeliefs); ndetbelieftracker.def("size", &NDPomdpTrackerSparse::getNumberOfBeliefs); ndetbelieftracker.def("dimension", &NDPomdpTrackerSparse::getCurrentDimension); ndetbelieftracker.def("obtain_last_observation", &NDPomdpTrackerSparse::getCurrentObservation); ndetbelieftracker.def("reduce",&NDPomdpTrackerSparse::reduce); ndetbelieftracker.def("reduction_timed_out", &NDPomdpTrackerSparse::hasTimedOut); // py::class_> ndetbelieftrackerd(m, "NondeterministicBeliefTrackerDoubleDense", "Tracker for belief states and uncontrollable actions"); // ndetbelieftrackerd.def(py::init const&>(), py::arg("pomdp")); // ndetbelieftrackerd.def("reset", &NDPomdpTrackerDense::reset); // ndetbelieftrackerd.def("set_risk", &NDPomdpTrackerDense::setRisk, py::arg("risk")); // ndetbelieftrackerd.def("obtain_current_risk",&NDPomdpTrackerDense::getCurrentRisk, py::arg("max")=true); // ndetbelieftrackerd.def("track", &NDPomdpTrackerDense::track, py::arg("observation")); // ndetbelieftrackerd.def("obtain_beliefs", &NDPomdpTrackerDense::getCurrentBeliefs); // ndetbelieftrackerd.def("obtain_last_observation", &NDPomdpTrackerDense::getCurrentObservation); // ndetbelieftrackerd.def("reduce",&NDPomdpTrackerDense::reduce); } template void define_tracker(py::module& m, std::string const& vtSuffix); template void define_tracker(py::module& m, std::string const& vtSuffix);