Browse Source

warn the user of no shielding action is possible

tempestpy_adaptions
Stefan Pranger 4 years ago
parent
commit
a147552be0
  1. 14
      src/storm/shields/PostSafetyShield.cpp
  2. 5
      src/storm/shields/PreSafetyShield.cpp

14
src/storm/shields/PostSafetyShield.cpp

@ -13,24 +13,21 @@ namespace tempest {
template<typename ValueType, typename IndexType>
storm::storage::PostScheduler<ValueType> PostSafetyShield<ValueType, IndexType>::construct() {
storm::storage::PostScheduler<ValueType> shield(this->rowGroupIndices.size() - 1, this->computeRowGroupSizes());
STORM_LOG_DEBUG(this->rowGroupIndices.size());
STORM_LOG_DEBUG(this->relevantStates);
STORM_LOG_DEBUG(this->coalitionStates.get());
for(auto const& x : this->choiceValues) {
STORM_LOG_DEBUG(x << ",");
}
auto choice_it = this->choiceValues.begin();
if(this->coalitionStates.is_initialized()) {
this->relevantStates &= this->coalitionStates.get();
}
STORM_LOG_DEBUG(this->relevantStates);
for(uint state = 0; state < this->rowGroupIndices.size() - 1; state++) {
if(this->relevantStates.get(state)) {
uint rowGroupSize = this->rowGroupIndices[state + 1] - this->rowGroupIndices[state];
auto maxProbabilityIndex = std::max_element(choice_it, choice_it + rowGroupSize) - choice_it;
ValueType maxProbability = *(choice_it + maxProbabilityIndex);
if(!allowedValue<ValueType, IndexType>(maxProbability, maxProbability, this->shieldingExpression)) {
STORM_LOG_WARN("No shielding action possible with absolute comparison for state with index " << state);
shield.setChoice(0, storm::storage::Distribution<ValueType, IndexType>(), state);
continue;
}
for(uint choice = 0; choice < rowGroupSize; choice++, choice_it++) {
STORM_LOG_DEBUG("processing " << state << " with rowGroupSize of " << rowGroupSize << " choice index " << choice << " prob: " << *choice_it << " > " << maxProbability);
storm::storage::Distribution<ValueType, IndexType> actionDistribution;
if(allowedValue<ValueType, IndexType>(maxProbability, *choice_it, this->shieldingExpression)) {
actionDistribution.addProbability(choice, 1);
@ -38,7 +35,6 @@ namespace tempest {
actionDistribution.addProbability(maxProbabilityIndex, 1);
}
actionDistribution.normalize();
STORM_LOG_DEBUG(" dist: " << actionDistribution);
shield.setChoice(choice, storm::storage::SchedulerChoice<ValueType>(actionDistribution), state);
}
} else {

5
src/storm/shields/PreSafetyShield.cpp

@ -22,6 +22,11 @@ namespace tempest {
uint rowGroupSize = this->rowGroupIndices[state + 1] - this->rowGroupIndices[state];
storm::storage::Distribution<ValueType, IndexType> actionDistribution;
ValueType maxProbability = *std::max_element(choice_it, choice_it + rowGroupSize);
if(!allowedValue<ValueType, IndexType>(maxProbability, maxProbability, this->shieldingExpression)) {
STORM_LOG_WARN("No shielding action possible with absolute comparison for state with index " << state);
shield.setChoice(storm::storage::Distribution<ValueType, IndexType>(), state);
continue;
}
for(uint choice = 0; choice < rowGroupSize; choice++, choice_it++) {
if(allowedValue<ValueType, IndexType>(maxProbability, *choice_it, this->shieldingExpression)) {
actionDistribution.addProbability(choice, *choice_it);

Loading…
Cancel
Save