Browse Source

two fixes after encoding from non-empty winning regions

tempestpy_adaptions
Sebastian Junges 5 years ago
parent
commit
005e23d5d5
  1. 13
      src/storm-pomdp/analysis/MemlessStrategySearchQualitative.cpp

13
src/storm-pomdp/analysis/MemlessStrategySearchQualitative.cpp

@ -423,7 +423,7 @@ namespace storm {
if (!atLeastOneOfStates.empty()) { if (!atLeastOneOfStates.empty()) {
smtSolver->add(storm::expressions::disjunction(atLeastOneOfStates)); smtSolver->add(storm::expressions::disjunction(atLeastOneOfStates));
} }
smtSolver->push();
std::set<storm::expressions::Expression> allOfTheseAssumption; std::set<storm::expressions::Expression> allOfTheseAssumption;
@ -447,11 +447,13 @@ namespace storm {
for (auto const &statesForObservation : statesPerObservation) { for (auto const &statesForObservation : statesPerObservation) {
schedulerForObs.push_back(0); schedulerForObs.push_back(0);
for (auto const& winningSet : winningRegion.getWinningSetsPerObservation(obs)) { for (auto const& winningSet : winningRegion.getWinningSetsPerObservation(obs)) {
assert(!winningSet.empty());
assert(obs < schedulerForObs.size());
++(schedulerForObs[obs]);
auto constant = expressionManager->integer(schedulerForObs[obs]);
for (auto const &stateOffset : ~winningSet) { for (auto const &stateOffset : ~winningSet) {
uint64_t state = statesForObservation[stateOffset]; uint64_t state = statesForObservation[stateOffset];
assert(obs < schedulerForObs.size());
++(schedulerForObs[obs]);
auto constant = expressionManager->integer(schedulerForObs[obs]);
STORM_LOG_TRACE("State " << state << " with observation " << obs << " does not allow scheduler " << constant);
// PAPER COMMENT 14: // PAPER COMMENT 14:
smtSolver->add(!(continuationVarExpressions[state] && smtSolver->add(!(continuationVarExpressions[state] &&
(schedulerVariableExpressions[obs] == constant))); (schedulerVariableExpressions[obs] == constant)));
@ -473,14 +475,13 @@ namespace storm {
} }
smtSolver->push();
for (uint64_t obs = 0; obs < pomdp.getNrObservations(); ++obs) { for (uint64_t obs = 0; obs < pomdp.getNrObservations(); ++obs) {
auto constant = expressionManager->integer(schedulerForObs[obs]); auto constant = expressionManager->integer(schedulerForObs[obs]);
smtSolver->add(schedulerVariableExpressions[obs] <= constant); smtSolver->add(schedulerVariableExpressions[obs] <= constant);
smtSolver->add(storm::expressions::iff(observationUpdatedExpressions[obs], updateForObservationExpressions[obs])); smtSolver->add(storm::expressions::iff(observationUpdatedExpressions[obs], updateForObservationExpressions[obs]));
} }
assert(pomdp.getNrObservations() == schedulerForObs.size()); assert(pomdp.getNrObservations() == schedulerForObs.size());

Loading…
Cancel
Save