|
|
@ -3,10 +3,11 @@ |
|
|
|
#include <algorithm>
|
|
|
|
#include <set>
|
|
|
|
|
|
|
|
#include "storm/environment/modelchecker/MultiObjectiveModelCheckerEnvironment.h"
|
|
|
|
#include "storm/models/sparse/Mdp.h"
|
|
|
|
#include "storm/models/sparse/MarkovAutomaton.h"
|
|
|
|
#include "storm/models/sparse/StandardRewardModel.h"
|
|
|
|
#include "storm/modelchecker/multiobjective/preprocessing/SparseMultiObjectiveMemoryIncorporation.h"
|
|
|
|
#include "storm/transformer/MemoryIncorporation.h"
|
|
|
|
#include "storm/modelchecker/propositional/SparsePropositionalModelChecker.h"
|
|
|
|
#include "storm/modelchecker/prctl/helper/BaierUpperRewardBoundsComputer.h"
|
|
|
|
#include "storm/modelchecker/results/ExplicitQualitativeCheckResult.h"
|
|
|
@ -30,9 +31,26 @@ namespace storm { |
|
|
|
namespace preprocessing { |
|
|
|
|
|
|
|
template<typename SparseModelType> |
|
|
|
typename SparseMultiObjectivePreprocessor<SparseModelType>::ReturnType SparseMultiObjectivePreprocessor<SparseModelType>::preprocess(SparseModelType const& originalModel, storm::logic::MultiObjectiveFormula const& originalFormula) { |
|
|
|
typename SparseMultiObjectivePreprocessor<SparseModelType>::ReturnType SparseMultiObjectivePreprocessor<SparseModelType>::preprocess(Environment const& env, SparseModelType const& originalModel, storm::logic::MultiObjectiveFormula const& originalFormula) { |
|
|
|
|
|
|
|
std::shared_ptr<SparseModelType> model; |
|
|
|
|
|
|
|
// Incorporate the necessary memory
|
|
|
|
if (env.modelchecker().multi().isSchedulerRestrictionSet()) { |
|
|
|
auto const& schedRestr = env.modelchecker().multi().getSchedulerRestriction(); |
|
|
|
if (schedRestr.getMemoryPattern() == storm::storage::SchedulerClass::MemoryPattern::GoalMemory) { |
|
|
|
model = storm::transformer::MemoryIncorporation<SparseModelType>::incorporateGoalMemory(originalModel, originalFormula.getSubformulas()); |
|
|
|
} else if (schedRestr.getMemoryPattern() == storm::storage::SchedulerClass::MemoryPattern::Arbitrary && schedRestr.getMemoryStates() > 1) { |
|
|
|
model = storm::transformer::MemoryIncorporation<SparseModelType>::incorporateFullMemory(originalModel, schedRestr.getMemoryStates()); |
|
|
|
} else if (schedRestr.isPositional()) { |
|
|
|
model = std::make_shared<SparseModelType>(originalModel); |
|
|
|
} else { |
|
|
|
STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "The given scheduler restriction has not been implemented."); |
|
|
|
} |
|
|
|
} else { |
|
|
|
model = storm::transformer::MemoryIncorporation<SparseModelType>::incorporateGoalMemory(originalModel, originalFormula.getSubformulas()); |
|
|
|
} |
|
|
|
|
|
|
|
auto model = SparseMultiObjectiveMemoryIncorporation<SparseModelType>::incorporateGoalMemory(originalModel, originalFormula); |
|
|
|
PreprocessorData data(model); |
|
|
|
|
|
|
|
//Invoke preprocessing on the individual objectives
|
|
|
|