|
|
@ -367,7 +367,7 @@ namespace storm { |
|
|
|
bsmap_type beliefStateMap; |
|
|
|
|
|
|
|
std::deque<uint64_t> beliefsToBeExpanded; |
|
|
|
storm::storage::BitVector expandedBeliefs; |
|
|
|
storm::storage::BitVector foundBeliefs; |
|
|
|
|
|
|
|
// current ID -> action -> reward
|
|
|
|
std::map<uint64_t, std::vector<ValueType>> beliefActionRewards; |
|
|
@ -445,13 +445,14 @@ namespace storm { |
|
|
|
if (options.explorationThreshold > storm::utility::zero<ValueType>()) { |
|
|
|
STORM_PRINT("Exploration threshold: " << options.explorationThreshold << std::endl) |
|
|
|
} |
|
|
|
expandedBeliefs.grow(newBeliefGrid.getNumberOfGridPointIds(), false); |
|
|
|
foundBeliefs.grow(newBeliefGrid.getNumberOfGridPointIds(), false); |
|
|
|
for (auto const& belId : beliefsToBeExpanded) { |
|
|
|
foundBeliefs.set(belId, true); |
|
|
|
} |
|
|
|
while (!beliefsToBeExpanded.empty()) { |
|
|
|
uint64_t currId = beliefsToBeExpanded.front(); |
|
|
|
|
|
|
|
beliefsToBeExpanded.pop_front(); |
|
|
|
expandedBeliefs.set(currId, true); // Do not expand this belief again.
|
|
|
|
assert(currId < expandedBeliefs.size()); |
|
|
|
|
|
|
|
uint64_t currMdpState = beliefStateMap.left.at(currId); |
|
|
|
auto const& currBelief = newBeliefGrid.getGridPoint(currId); |
|
|
|
uint32_t currObservation = pomdp.getObservation(currBelief.begin()->first); |
|
|
@ -478,12 +479,13 @@ namespace storm { |
|
|
|
for (uint64_t action = 0; action < numChoices; ++action) { |
|
|
|
auto successorGridPoints = newBeliefGrid.expandAction(currId, action, observationResolutionVector); |
|
|
|
// Check for newly found grid points
|
|
|
|
expandedBeliefs.grow(newBeliefGrid.getNumberOfGridPointIds(), false); |
|
|
|
foundBeliefs.grow(newBeliefGrid.getNumberOfGridPointIds(), false); |
|
|
|
for (auto const& successor : successorGridPoints) { |
|
|
|
auto successorId = successor.first; |
|
|
|
auto successorBelief = newBeliefGrid.getGridPoint(successorId); |
|
|
|
auto successorObservation = pomdp.getObservation(successorBelief.begin()->first); |
|
|
|
if (!expandedBeliefs.get(successorId)) { |
|
|
|
if (!foundBeliefs.get(successorId)) { |
|
|
|
foundBeliefs.set(successorId); |
|
|
|
beliefsToBeExpanded.push_back(successorId); |
|
|
|
beliefStateMap.insert(bsmap_type::value_type(successorId, nextMdpStateId)); |
|
|
|
++nextMdpStateId; |
|
|
|