15 std::set<uint32_t> oldObservations;
16 for (
auto const state : stateSet) {
17 oldObservations.insert(pomdp->getObservation(state));
22 std::map<uint32_t, uint32_t> oldToNewObservationMap;
23 uint32_t freshObs = pomdp->getNrObservations();
25 uint32_t obs = pomdp->getObservation(state);
26 if (oldObservations.count(obs) > 0) {
28 if (oldToNewObservationMap.emplace(obs, freshObs).second) {
38 if (oldToNewObservationMap.empty()) {
39 return {pomdp, std::move(oldObservations)};
42 auto newObservationVector = pomdp->getObservations();
43 for (
auto const state : stateSet) {
44 auto findRes = oldToNewObservationMap.find(pomdp->getObservation(state));
45 if (findRes != oldToNewObservationMap.end()) {
46 newObservationVector[state] = findRes->second;
51 auto transformed = std::make_shared<storm::models::sparse::Pomdp<ValueType>>(*pomdp);
52 transformed->updateObservations(std::move(newObservationVector),
true);
55 std::set<uint32_t> newObservations;
56 for (
auto const& obs : oldObservations) {
57 auto findRes = oldToNewObservationMap.find(obs);
58 if (findRes == oldToNewObservationMap.end()) {
59 newObservations.insert(obs);
61 newObservations.insert(findRes->second);
65 return {transformed, std::move(newObservations)};