Browse Source

belief support tracking test and cleaning

tempestpy_adaptions
Sebastian Junges 4 years ago
parent
commit
6ce1f96efc
  1. 6
      src/storm-pomdp/generator/BeliefSupportTracker.cpp
  2. 15
      src/storm-pomdp/generator/BeliefSupportTracker.h
  3. 2
      src/test/storm-pomdp/CMakeLists.txt
  4. 47
      src/test/storm-pomdp/tracking/BeliefSupportTrackingTest.cpp

6
src/storm-pomdp/generator/BeliefSupportTracker.cpp

@ -29,6 +29,12 @@ namespace storm {
currentBeliefSupport = newBeliefSupport; currentBeliefSupport = newBeliefSupport;
} }
template<typename ValueType>
void BeliefSupportTracker<ValueType>::reset() {
currentBeliefSupport = pomdp.getInitialStates();
}
template class BeliefSupportTracker<double>; template class BeliefSupportTracker<double>;
template class BeliefSupportTracker<storm::RationalNumber>; template class BeliefSupportTracker<storm::RationalNumber>;

15
src/storm-pomdp/generator/BeliefSupportTracker.h

@ -12,10 +12,21 @@ namespace storm {
*/ */
public: public:
BeliefSupportTracker(storm::models::sparse::Pomdp<ValueType> const& pomdp); BeliefSupportTracker(storm::models::sparse::Pomdp<ValueType> const& pomdp);
/**
* The current belief support according to the tracker
* @return
*/
storm::storage::BitVector const& getCurrentBeliefSupport() const; storm::storage::BitVector const& getCurrentBeliefSupport() const;
/*!
* Update current belief support state
* @param action The action that was taken
* @param observation The new (state) observation
*/
void track(uint64_t action, uint64_t observation); void track(uint64_t action, uint64_t observation);
/*!
* Reset to initial state
*/
void reset();
private: private:
storm::models::sparse::Pomdp<ValueType> const& pomdp; storm::models::sparse::Pomdp<ValueType> const& pomdp;

2
src/test/storm-pomdp/CMakeLists.txt

@ -9,7 +9,7 @@ register_source_groups_from_filestructure("${ALL_FILES}" test)
# Note that the tests also need the source files, except for the main file # Note that the tests also need the source files, except for the main file
include_directories(${GTEST_INCLUDE_DIR}) include_directories(${GTEST_INCLUDE_DIR})
foreach (testsuite analysis transformation modelchecker)
foreach (testsuite analysis transformation modelchecker tracking)
file(GLOB_RECURSE TEST_${testsuite}_FILES ${STORM_TESTS_BASE_PATH}/${testsuite}/*.h ${STORM_TESTS_BASE_PATH}/${testsuite}/*.cpp) file(GLOB_RECURSE TEST_${testsuite}_FILES ${STORM_TESTS_BASE_PATH}/${testsuite}/*.h ${STORM_TESTS_BASE_PATH}/${testsuite}/*.cpp)
add_executable (test-pomdp-${testsuite} ${TEST_${testsuite}_FILES} ${STORM_TESTS_BASE_PATH}/storm-test.cpp) add_executable (test-pomdp-${testsuite} ${TEST_${testsuite}_FILES} ${STORM_TESTS_BASE_PATH}/storm-test.cpp)

47
src/test/storm-pomdp/tracking/BeliefSupportTrackingTest.cpp

@ -0,0 +1,47 @@
#include "test/storm_gtest.h"
#include "storm-config.h"
#include "storm/models/sparse/StandardRewardModel.h"
#include "storm-parsers/parser/PrismParser.h"
#include "storm/builder/ExplicitModelBuilder.h"
#include "storm/api/storm.h"
#include "storm-parsers/api/storm-parsers.h"
#include "storm-pomdp/analysis/FormulaInformation.h"
#include "storm-pomdp/transformer/MakePOMDPCanonic.h"
#include "storm-pomdp/generator/BeliefSupportTracker.h"
// TODO
// These tests depend on the interpretation of action and observation numbers and those may change.
// A more robust test would take the high-level actions and observations and track on those.
TEST(BeliefSupportTracking, Maze) {
storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/pomdp/maze2.prism");
program = storm::utility::prism::preprocess(program, "sl=0.4");
std::shared_ptr<storm::logic::Formula const> formula = storm::api::parsePropertiesForPrismProgram("Pmax=? [F \"goal\" ]", program).front().getRawFormula();
std::shared_ptr<storm::models::sparse::Pomdp<double>> pomdp = storm::api::buildSparseModel<double>(program, {formula})->as<storm::models::sparse::Pomdp<double>>();
storm::transformer::MakePOMDPCanonic<double> makeCanonic(*pomdp);
pomdp = makeCanonic.transform();
storm::generator::BeliefSupportTracker<double> tracker(*pomdp);
EXPECT_EQ(pomdp->getInitialStates(), tracker.getCurrentBeliefSupport());
tracker.track(0,0);
auto beliefsup = tracker.getCurrentBeliefSupport();
EXPECT_EQ(6ul, beliefsup.getNumberOfSetBits());
tracker.track(0,0);
EXPECT_EQ(beliefsup, tracker.getCurrentBeliefSupport());
tracker.track(0,1);
EXPECT_TRUE(tracker.getCurrentBeliefSupport().empty());
tracker.reset();
EXPECT_EQ(pomdp->getInitialStates(), tracker.getCurrentBeliefSupport());
tracker.track(0, 0);
EXPECT_EQ(beliefsup, tracker.getCurrentBeliefSupport());
tracker.track(1,0);
EXPECT_EQ(beliefsup, tracker.getCurrentBeliefSupport());
tracker.track(2,1);
EXPECT_EQ(1ul, tracker.getCurrentBeliefSupport().getNumberOfSetBits());
tracker.track(3,0);
EXPECT_EQ(1ul, tracker.getCurrentBeliefSupport().getNumberOfSetBits());
tracker.track(3,0);
EXPECT_EQ(2ul, tracker.getCurrentBeliefSupport().getNumberOfSetBits());
}
Loading…
Cancel
Save