14 std::set<uint32_t> oldObservations;
15 for (
auto const state : stateSet) {
16 oldObservations.insert(pomdp->getObservation(state));
21 std::map<uint32_t, uint32_t> oldToNewObservationMap;
22 uint32_t freshObs = pomdp->getNrObservations();
24 uint32_t obs = pomdp->getObservation(state);
25 if (oldObservations.count(obs) > 0) {
27 if (oldToNewObservationMap.emplace(obs, freshObs).second) {
37 if (oldToNewObservationMap.empty()) {
38 return {pomdp, std::move(oldObservations)};
41 auto newObservationVector = pomdp->getObservations();
42 for (
auto const state : stateSet) {
43 auto findRes = oldToNewObservationMap.find(pomdp->getObservation(state));
44 if (findRes != oldToNewObservationMap.end()) {
45 newObservationVector[state] = findRes->second;
50 auto transformed = std::make_shared<storm::models::sparse::Pomdp<ValueType>>(*pomdp);
51 transformed->updateObservations(std::move(newObservationVector),
true);
54 std::set<uint32_t> newObservations;
55 for (
auto const& obs : oldObservations) {
56 auto findRes = oldToNewObservationMap.find(obs);
57 if (findRes == oldToNewObservationMap.end()) {
58 newObservations.insert(obs);
60 newObservations.insert(findRes->second);
64 return {transformed, std::move(newObservations)};