Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
MultiObjectiveFormula.cpp
Go to the documentation of this file.
2#include <algorithm>
3#include <boost/any.hpp>
4#include <ostream>
5
9
10namespace storm {
11namespace logic {
12
13MultiObjectiveFormula::MultiObjectiveFormula(std::vector<std::shared_ptr<Formula const>> const& subformulas, Type type) : subformulas(subformulas), type(type) {
14 // Intentionally left empty
15}
16
18 // Intentionally left empty
19}
20
22 return true;
23}
24
26 return this->type == Type::Tradeoff;
27}
28
30 return this->type == Type::Lexicographic;
31}
32
36
38 return std::all_of(subformulas.begin(), subformulas.end(), [](auto const& f) { return f->hasQualitativeResult(); });
39}
40
44
46 auto numQuant = std::count_if(subformulas.begin(), subformulas.end(), [](auto const& f) { return f->hasQuantitativeResult(); });
47 return numQuant == 1;
48}
49
51 auto numQuant = std::count_if(subformulas.begin(), subformulas.end(), [](auto const& f) { return f->hasQuantitativeResult(); });
52 return numQuant > 1;
53}
54
55Formula const& MultiObjectiveFormula::getSubformula(uint_fast64_t index) const {
56 STORM_LOG_THROW(index < getNumberOfSubformulas(), storm::exceptions::InvalidArgumentException,
57 "Tried to access subformula with index " << index << " but there are only " << this->getNumberOfSubformulas() << " subformulas.");
58 return *this->subformulas[index];
59}
60
62 return this->subformulas.size();
63}
64
65std::vector<std::shared_ptr<Formula const>> const& MultiObjectiveFormula::getSubformulas() const {
66 return this->subformulas;
67}
68
69boost::any MultiObjectiveFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const {
70 return visitor.visit(*this, data);
71}
72
73void MultiObjectiveFormula::gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const {
74 for (auto const& subformula : this->subformulas) {
75 subformula->gatherAtomicExpressionFormulas(atomicExpressionFormulas);
76 }
77}
78
79void MultiObjectiveFormula::gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const {
80 for (auto const& subformula : this->subformulas) {
81 subformula->gatherAtomicLabelFormulas(atomicLabelFormulas);
82 }
83}
84
85void MultiObjectiveFormula::gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const {
86 for (auto const& subformula : this->subformulas) {
87 subformula->gatherReferencedRewardModels(referencedRewardModels);
88 }
89}
90
91void MultiObjectiveFormula::gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const {
92 for (auto const& subformula : this->subformulas) {
93 subformula->gatherUsedVariables(usedVariables);
94 }
95}
96
97std::ostream& MultiObjectiveFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
98 // No parentheses necessary
99 out << "multi";
100 if (isLexicographic()) {
101 out << "lex";
102 }
103 out << "(";
104 for (uint_fast64_t index = 0; index < this->getNumberOfSubformulas(); ++index) {
105 if (index > 0) {
106 out << ", ";
107 }
108 this->getSubformula(index).writeToStream(out);
109 }
110 out << ")";
111 return out;
112}
113} // namespace logic
114} // namespace storm
virtual std::ostream & writeToStream(std::ostream &out, bool allowParentheses=false) const =0
Writes the forumla to the given output stream.
virtual boost::any visit(AtomicExpressionFormula const &f, boost::any const &data) const =0
std::vector< std::shared_ptr< Formula const > > const & getSubformulas() const
virtual bool isMultiObjectiveFormula() const override
MultiObjectiveFormula(std::vector< std::shared_ptr< Formula const > > const &subformulas, Type type)
virtual std::ostream & writeToStream(std::ostream &out, bool allowParentheses=false) const override
Writes the forumla to the given output stream.
virtual void gatherAtomicLabelFormulas(std::vector< std::shared_ptr< AtomicLabelFormula const > > &atomicLabelFormulas) const override
virtual void gatherReferencedRewardModels(std::set< std::string > &referencedRewardModels) const override
virtual bool hasQuantitativeResult() const override
virtual boost::any accept(FormulaVisitor const &visitor, boost::any const &data) const override
virtual void gatherUsedVariables(std::set< storm::expressions::Variable > &usedVariables) const override
virtual bool hasQualitativeResult() const override
Formula const & getSubformula(uint_fast64_t index) const
virtual void gatherAtomicExpressionFormulas(std::vector< std::shared_ptr< AtomicExpressionFormula const > > &atomicExpressionFormulas) const override
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:30