|
@ -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()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|