Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
MultiObjectiveFormula.cpp
Go to the documentation of this file.
2#include <boost/any.hpp>
3#include <ostream>
4
8
9namespace storm {
10namespace logic {
11
12MultiObjectiveFormula::MultiObjectiveFormula(std::vector<std::shared_ptr<Formula const>> const& subformulas) : subformulas(subformulas) {
13 // Intentionally left empty
14}
15
17 // Intentionally left empty
18}
19
21 return true;
22}
23
25 for (auto const& subformula : this->subformulas) {
26 if (subformula->hasQuantitativeResult()) {
27 return false;
28 }
29 }
30 return true;
31}
32
36
38 bool hasExactlyOneQuantitativeSubformula = false;
39 for (auto const& subformula : this->subformulas) {
40 if (subformula->hasQuantitativeResult()) {
41 if (hasExactlyOneQuantitativeSubformula) {
42 return false;
43 }
44 hasExactlyOneQuantitativeSubformula = true;
45 }
46 }
47 return hasExactlyOneQuantitativeSubformula;
48}
49
53
54Formula const& MultiObjectiveFormula::getSubformula(uint_fast64_t index) const {
55 STORM_LOG_THROW(index < getNumberOfSubformulas(), storm::exceptions::InvalidArgumentException,
56 "Tried to access subformula with index " << index << " but there are only " << this->getNumberOfSubformulas() << " subformulas.");
57 return *this->subformulas[index];
58}
59
61 return this->subformulas.size();
62}
63
64std::vector<std::shared_ptr<Formula const>> const& MultiObjectiveFormula::getSubformulas() const {
65 return this->subformulas;
66}
67
68boost::any MultiObjectiveFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const {
69 return visitor.visit(*this, data);
70}
71
72void MultiObjectiveFormula::gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const {
73 for (auto const& subformula : this->subformulas) {
74 subformula->gatherAtomicExpressionFormulas(atomicExpressionFormulas);
75 }
76}
77
78void MultiObjectiveFormula::gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const {
79 for (auto const& subformula : this->subformulas) {
80 subformula->gatherAtomicLabelFormulas(atomicLabelFormulas);
81 }
82}
83
84void MultiObjectiveFormula::gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const {
85 for (auto const& subformula : this->subformulas) {
86 subformula->gatherReferencedRewardModels(referencedRewardModels);
87 }
88}
89
90std::ostream& MultiObjectiveFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
91 // No parentheses necessary
92 out << "multi(";
93 for (uint_fast64_t index = 0; index < this->getNumberOfSubformulas(); ++index) {
94 if (index > 0) {
95 out << ", ";
96 }
97 this->getSubformula(index).writeToStream(out);
98 }
99 out << ")";
100 return out;
101}
102} // namespace logic
103} // 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
MultiObjectiveFormula(std::vector< std::shared_ptr< Formula const > > const &subformulas)
virtual bool isMultiObjectiveFormula() const override
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 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
LabParser.cpp.
Definition cli.cpp:18