Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SparseCbQuery.cpp
Go to the documentation of this file.
2
11
12namespace storm {
13namespace modelchecker {
14namespace multiobjective {
15
16template<class SparseModelType>
18 : originalModel(preprocessorResult.originalModel),
19 originalFormula(preprocessorResult.originalFormula),
20 objectives(std::move(preprocessorResult.objectives)) {
22 STORM_LOG_THROW(rewardAnalysis.rewardFinitenessType != preprocessing::RewardFinitenessType::Infinite, storm::exceptions::NotSupportedException,
23 "TThere is no Pareto optimal scheduler that yields finite reward for all objectives. This is not supported.");
24
25 STORM_LOG_THROW(rewardAnalysis.totalRewardLessInfinityEStates, storm::exceptions::UnexpectedException,
26 "The set of states with reward < infinity for some scheduler has not been computed during preprocessing.");
27 STORM_LOG_THROW(preprocessorResult.containsOnlyTrivialObjectives(), storm::exceptions::NotSupportedException,
28 "At least one objective was not reduced to an expected (total or cumulative) reward objective during preprocessing. This is not supported "
29 "by the considered weight vector checker.");
30 STORM_LOG_THROW(preprocessorResult.preprocessedModel->getInitialStates().getNumberOfSetBits() == 1, storm::exceptions::NotSupportedException,
31 "The model has multiple initial states.");
32
33 // Build a subsystem of the preprocessor result model that discards states that yield infinite reward for all schedulers.
34 // We can also merge the states that will have reward zero anyway.
35 storm::storage::BitVector maybeStates = rewardAnalysis.totalRewardLessInfinityEStates.get() & ~rewardAnalysis.reward0AStates;
36 std::set<std::string> relevantRewardModels;
37 for (auto const& obj : this->objectives) {
38 obj.formula->gatherReferencedRewardModels(relevantRewardModels);
39 }
41 auto mergerResult = merger.mergeTargetAndSinkStates(maybeStates, rewardAnalysis.reward0AStates, storm::storage::BitVector(maybeStates.size(), false),
42 std::vector<std::string>(relevantRewardModels.begin(), relevantRewardModels.end()));
43
44 preprocessedModel = mergerResult.model;
45 reward0EStates = rewardAnalysis.totalReward0EStates % maybeStates;
46 if (mergerResult.targetState) {
47 // There is an additional state in the result
49 }
50 expressionManager = std::make_shared<storm::expressions::ExpressionManager>();
51}
52
55
58} // namespace multiobjective
59} // namespace modelchecker
60} // namespace storm
std::shared_ptr< storm::expressions::ExpressionManager > expressionManager
std::shared_ptr< SparseModelType > preprocessedModel
std::vector< Objective< typename SparseModelType::ValueType > > objectives
SparseCbQuery(preprocessing::SparseMultiObjectivePreprocessorResult< SparseModelType > const &preprocessorResult)
static ReturnType analyze(storm::modelchecker::multiobjective::preprocessing::SparseMultiObjectivePreprocessorResult< SparseModelType > const &preprocessorResult)
Analyzes the reward objectives of the multi objective query.
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:16
size_t size() const
Retrieves the number of bits this bit vector can store.
void resize(uint64_t newLength, bool init=false)
Resizes the bit vector to hold the given new number of bits.
bool get(uint64_t index) const
Retrieves the truth value of the bit at the given index and performs a bound check.
ReturnType mergeTargetAndSinkStates(storm::storage::BitVector const &maybeStates, storm::storage::BitVector const &targetStates, storm::storage::BitVector const &sinkStates, std::vector< std::string > const &selectedRewardModels=std::vector< std::string >(), boost::optional< storm::storage::BitVector > const &choiceFilter=boost::none) const
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30
std::shared_ptr< SparseModelType > model