Browse Source

POMDP Approximation: Use relative gap

tempestpy_adaptions
Tim Quatmann 5 years ago
parent
commit
1766bc385e
  1. 7
      src/storm-pomdp/modelchecker/ApproximatePOMDPModelchecker.cpp

7
src/storm-pomdp/modelchecker/ApproximatePOMDPModelchecker.cpp

@ -536,6 +536,8 @@ namespace storm {
bool restoreAllActions = false;
bool checkRewireForAllActions = false;
ValueType gap = storm::utility::abs<ValueType>(overApproximation->getUpperValueBoundAtCurrentState() - overApproximation->getLowerValueBoundAtCurrentState());
// Get the relative gap
gap = gap * storm::utility::convertNumber<ValueType, uint64_t>(2) / (storm::utility::abs<ValueType>(overApproximation->getLowerValueBoundAtCurrentState()) + storm::utility::abs<ValueType>(overApproximation->getUpperValueBoundAtCurrentState()));
if (!hasOldBehavior) {
// Case 1
// If we explore this state and if it has no old behavior, it is clear that an "old" optimal scheduler can be extended to a scheduler that reaches this state
@ -723,7 +725,10 @@ namespace storm {
underApproximation->setCurrentStateIsTruncated();
} else if (!stateAlreadyExplored) {
// Check whether we want to explore the state now!
if (storm::utility::abs<ValueType>(underApproximation->getUpperValueBoundAtCurrentState() - underApproximation->getLowerValueBoundAtCurrentState()) < heuristicParameters.gapThreshold) {
ValueType gap = storm::utility::abs<ValueType>(underApproximation->getUpperValueBoundAtCurrentState() - underApproximation->getLowerValueBoundAtCurrentState());
// Get the relative gap
gap = gap * storm::utility::convertNumber<ValueType, uint64_t>(2) / (storm::utility::abs<ValueType>(underApproximation->getLowerValueBoundAtCurrentState()) + storm::utility::abs<ValueType>(underApproximation->getUpperValueBoundAtCurrentState()));
if (gap < heuristicParameters.gapThreshold) {
stopExploration = true;
underApproximation->setCurrentStateIsTruncated();
} else if (underApproximation->getCurrentNumberOfMdpStates() >= heuristicParameters.sizeThreshold) {

Loading…
Cancel
Save