3#include <boost/optional.hpp>
16namespace modelchecker {
17namespace multiobjective {
18namespace preprocessing {
20template<
class SparseModelType>
33 std::vector<Objective<typename SparseModelType::ValueType>>
objectives;
49 if (obj.formula->isRewardOperatorFormula() && obj.formula->getSubformula().isTotalRewardFormula()) {
63 if (obj.formula->isRewardOperatorFormula() && obj.formula->getSubformula().isLongRunAverageRewardFormula()) {
76 if (obj.formula->isRewardOperatorFormula() && obj.formula->getSubformula().isCumulativeRewardFormula()) {
77 auto const& subf = obj.formula->getSubformula().asCumulativeRewardFormula();
78 return subf.isMultiDimensional() || subf.getTimeBoundReference().isRewardBound();
79 }
else if (obj.
formula->isProbabilityOperatorFormula() && obj.
formula->getSubformula().isBoundedUntilFormula()) {
80 auto const& subf = obj.formula->getSubformula().asBoundedUntilFormula();
81 return subf.isMultiDimensional() || subf.getTimeBoundReference().isRewardBound();
89 out <<
"\n---------------------------------------------------------------------------------------------------------------------------------------\n";
90 out <<
" Multi-objective Query \n";
91 out <<
"---------------------------------------------------------------------------------------------------------------------------------------\n";
92 out <<
"\nOriginal Formula: \n";
93 out <<
"--------------------------------------------------------------\n";
94 out <<
"\t" << originalFormula <<
'\n';
95 out <<
"\nThe query considers " << objectives.size() <<
" objectives:\n";
96 out <<
"--------------------------------------------------------------\n";
97 for (
auto const& obj : objectives) {
98 obj.printToStream(out);
101 out <<
"Number of Long-Run-Average Reward Objectives (after preprocessing): " << getNumberOfLongRunAverageRewardFormulas() <<
".\n";
102 out <<
"Number of Total Reward Objectives (after preprocessing): " << getNumberOfTotalRewardFormulas() <<
".\n";
103 out <<
"--------------------------------------------------------------\n";
104 out <<
"\nOriginal Model Information:\n";
105 originalModel.printModelInformationToStream(out);
106 out <<
"\nPreprocessed Model Information:\n";
107 preprocessedModel->printModelInformationToStream(out);
108 out <<
"\n---------------------------------------------------------------------------------------------------------------------------------------\n";
A bit vector that is internally represented as a vector of 64-bit values.
std::shared_ptr< storm::logic::OperatorFormula const > formula
bool containsLongRunAverageRewardFormulas() const
std::optional< storm::storage::SparseModelMemoryProductReverseData > memoryIncorporationReverseData
uint64_t getNumberOfLongRunAverageRewardFormulas() const
SparseModelType const & originalModel
SparseMultiObjectivePreprocessorResult(storm::logic::MultiObjectiveFormula const &originalFormula, SparseModelType const &originalModel)
std::shared_ptr< SparseModelType > preprocessedModel
std::vector< Objective< typename SparseModelType::ValueType > > objectives
bool containsOnlyTotalRewardFormulas() const
bool containsRewardBoundedObjective() const
storm::storage::BitVector maybeInfiniteRewardObjectives
friend std::ostream & operator<<(std::ostream &out, SparseMultiObjectivePreprocessorResult< SparseModelType > const &ret)
storm::logic::MultiObjectiveFormula const & originalFormula
void printToStream(std::ostream &out) const
uint64_t getNumberOfTotalRewardFormulas() const