Storm 1.13.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SparseMultiObjectivePreprocessor.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <string>
5
12
13namespace storm {
14
15class Environment;
16
17namespace modelchecker {
18namespace multiobjective {
19namespace preprocessing {
20
21/*
22 * This class invokes the necessary preprocessing for the constraint based multi-objective model checking algorithm
23 */
24template<class SparseModelType>
26 public:
27 typedef typename SparseModelType::ValueType ValueType;
28 typedef typename SparseModelType::RewardModelType RewardModelType;
30
38 static ReturnType preprocess(Environment const& env, SparseModelType const& originalModel, storm::logic::MultiObjectiveFormula const& originalFormula,
39 bool produceScheduler);
40
41 private:
42 struct PreprocessorData {
43 std::shared_ptr<SparseModelType> model;
44 std::vector<std::shared_ptr<Objective<ValueType>>> objectives;
45
46 // Indices of the objectives that require a check for finite reward
47 storm::storage::BitVector finiteRewardCheckObjectives;
48
49 std::string rewardModelNamePrefix;
50
51 // If set, some states have been merged to a deadlock state with this label.
52 boost::optional<std::string> deadlockLabel;
53
54 // Mapping of incorporated memory to model+memory
55 std::optional<storm::storage::SparseModelMemoryProductReverseData> memoryIncorporationReverseData;
56
57 PreprocessorData(std::shared_ptr<SparseModelType> model);
58 };
59
63 static void removeIrrelevantStates(std::shared_ptr<SparseModelType>& model, boost::optional<std::string>& deadlockLabel,
64 storm::logic::MultiObjectiveFormula const& originalFormula);
65
73 static void preprocessOperatorFormula(storm::logic::OperatorFormula const& formula, PreprocessorData& data);
74 static void preprocessProbabilityOperatorFormula(storm::logic::ProbabilityOperatorFormula const& formula, storm::logic::OperatorInformation const& opInfo,
75 PreprocessorData& data);
76 static void preprocessRewardOperatorFormula(storm::logic::RewardOperatorFormula const& formula, storm::logic::OperatorInformation const& opInfo,
77 PreprocessorData& data);
78 static void preprocessTimeOperatorFormula(storm::logic::TimeOperatorFormula const& formula, storm::logic::OperatorInformation const& opInfo,
79 PreprocessorData& data);
80 static void preprocessLongRunAverageOperatorFormula(storm::logic::LongRunAverageOperatorFormula const& formula,
81 storm::logic::OperatorInformation const& opInfo, PreprocessorData& data);
82 static void preprocessUntilFormula(storm::logic::UntilFormula const& formula, storm::logic::OperatorInformation const& opInfo, PreprocessorData& data,
83 std::shared_ptr<storm::logic::Formula const> subformula = nullptr);
84 static void preprocessBoundedUntilFormula(storm::logic::BoundedUntilFormula const& formula, storm::logic::OperatorInformation const& opInfo,
85 PreprocessorData& data);
86 static void preprocessGloballyFormula(storm::logic::GloballyFormula const& formula, storm::logic::OperatorInformation const& opInfo,
87 PreprocessorData& data);
88 static void preprocessEventuallyFormula(storm::logic::EventuallyFormula const& formula, storm::logic::OperatorInformation const& opInfo,
89 PreprocessorData& data, boost::optional<std::string> const& optionalRewardModelName = boost::none);
90 static void preprocessCumulativeRewardFormula(storm::logic::CumulativeRewardFormula const& formula, storm::logic::OperatorInformation const& opInfo,
91 PreprocessorData& data, boost::optional<std::string> const& optionalRewardModelName = boost::none);
92 static void preprocessTotalRewardFormula(storm::logic::TotalRewardFormula const& formula, storm::logic::OperatorInformation const& opInfo,
93 PreprocessorData& data, boost::optional<std::string> const& optionalRewardModelName = boost::none);
94 static void preprocessLongRunAverageRewardFormula(storm::logic::LongRunAverageRewardFormula const& formula, storm::logic::OperatorInformation const& opInfo,
95 PreprocessorData& data, boost::optional<std::string> const& optionalRewardModelName = boost::none);
96
100 static ReturnType buildResult(SparseModelType const& originalModel, storm::logic::MultiObjectiveFormula const& originalFormula, PreprocessorData& data);
101
105 static typename ReturnType::QueryType getQueryType(std::vector<Objective<ValueType>> const& objectives);
106};
107
108} // namespace preprocessing
109} // namespace multiobjective
110} // namespace modelchecker
111} // namespace storm
static ReturnType preprocess(Environment const &env, SparseModelType const &originalModel, storm::logic::MultiObjectiveFormula const &originalFormula, bool produceScheduler)
Preprocesses the given model w.r.t.
A bit vector that is internally represented as a vector of 64-bit values.
Definition BitVector.h:16