Storm 1.10.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
MultiObjectivePostprocessing.cpp
Go to the documentation of this file.
2
4
5namespace storm {
6namespace modelchecker {
7namespace multiobjective {
8
9template<typename ValueType, typename GeometryValueType>
10std::vector<GeometryValueType> transformObjectiveValuesToOriginal(std::vector<Objective<ValueType>> objectives, std::vector<GeometryValueType> const& point) {
11 std::vector<GeometryValueType> result;
12 result.reserve(point.size());
13 for (uint_fast64_t objIndex = 0; objIndex < objectives.size(); ++objIndex) {
14 auto const& obj = objectives[objIndex];
15 if (storm::solver::maximize(obj.formula->getOptimalityType())) {
16 if (obj.considersComplementaryEvent) {
17 result.push_back(storm::utility::one<GeometryValueType>() - point[objIndex]);
18 } else {
19 result.push_back(point[objIndex]);
20 }
21 } else {
22 if (obj.considersComplementaryEvent) {
23 result.push_back(storm::utility::one<GeometryValueType>() + point[objIndex]);
24 } else {
25 result.push_back(-point[objIndex]);
26 }
27 }
28 }
29 return result;
30}
31
32template<typename ValueType, typename GeometryValueType>
33std::shared_ptr<storm::storage::geometry::Polytope<GeometryValueType>> transformObjectivePolytopeToOriginal(
34 std::vector<Objective<ValueType>> objectives, std::shared_ptr<storm::storage::geometry::Polytope<GeometryValueType>> const& polytope) {
35 if (polytope->isEmpty()) {
37 }
38 if (polytope->isUniversal()) {
40 }
41 uint_fast64_t numObjectives = objectives.size();
42 std::vector<std::vector<GeometryValueType>> transformationMatrix(numObjectives,
43 std::vector<GeometryValueType>(numObjectives, storm::utility::zero<GeometryValueType>()));
44 std::vector<GeometryValueType> transformationVector;
45 transformationVector.reserve(numObjectives);
46 for (uint_fast64_t objIndex = 0; objIndex < numObjectives; ++objIndex) {
47 auto const& obj = objectives[objIndex];
48 if (storm::solver::maximize(obj.formula->getOptimalityType())) {
49 if (obj.considersComplementaryEvent) {
50 transformationMatrix[objIndex][objIndex] = -storm::utility::one<GeometryValueType>();
51 transformationVector.push_back(storm::utility::one<GeometryValueType>());
52 } else {
53 transformationMatrix[objIndex][objIndex] = storm::utility::one<GeometryValueType>();
54 transformationVector.push_back(storm::utility::zero<GeometryValueType>());
55 }
56 } else {
57 if (obj.considersComplementaryEvent) {
58 transformationMatrix[objIndex][objIndex] = storm::utility::one<GeometryValueType>();
59 transformationVector.push_back(storm::utility::one<GeometryValueType>());
60 } else {
61 transformationMatrix[objIndex][objIndex] = -storm::utility::one<GeometryValueType>();
62 transformationVector.push_back(storm::utility::zero<GeometryValueType>());
63 }
64 }
65 }
66 return polytope->affineTransformation(transformationMatrix, transformationVector);
67}
68
69/*
70 * This function is only responsible to reverse changes to the model made in the preprocessor
71 * (not the ones done by specific checkers)
72 */
73template<typename ValueType>
75 std::vector<storm::storage::Scheduler<ValueType>>& schedulers) {
76 for (auto& currScheduler : schedulers) {
77 currScheduler = reverseData.createMemorySchedulerFromProductScheduler(currScheduler);
78 }
79}
80
81template std::vector<storm::RationalNumber> transformObjectiveValuesToOriginal(std::vector<Objective<double>> objectives,
82 std::vector<storm::RationalNumber> const& point);
83template std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> transformObjectivePolytopeToOriginal(
84 std::vector<Objective<double>> objectives, std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> const& polytope);
85template std::vector<storm::RationalNumber> transformObjectiveValuesToOriginal(std::vector<Objective<storm::RationalNumber>> objectives,
86 std::vector<storm::RationalNumber> const& point);
87template std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> transformObjectivePolytopeToOriginal(
88 std::vector<Objective<storm::RationalNumber>> objectives, std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> const& polytope);
89
91 std::vector<storm::storage::Scheduler<double>>& schedulers);
92
95
96} // namespace multiobjective
97} // namespace modelchecker
98} // namespace storm
This class defines which action is chosen in a particular state of a non-deterministic model.
Definition Scheduler.h:18
Data to restore memory incorporation applied with SparseModelMemoryProduct.
storm::storage::Scheduler< ValueType > createMemorySchedulerFromProductScheduler(storm::storage::Scheduler< ValueType > const &productScheduler) const
Creates a finite-memory scheduler from a scheduler of the product model.
static std::shared_ptr< Polytope< ValueType > > createUniversalPolytope()
Creates the universal polytope (i.e., the set R^n)
Definition Polytope.cpp:27
static std::shared_ptr< Polytope< ValueType > > createEmptyPolytope()
Creates the empty polytope (i.e., emptyset)
Definition Polytope.cpp:32
std::vector< GeometryValueType > transformObjectiveValuesToOriginal(std::vector< Objective< ValueType > > objectives, std::vector< GeometryValueType > const &point)
void transformObjectiveSchedulersToOriginal(storm::storage::SparseModelMemoryProductReverseData const &reverseData, std::vector< storm::storage::Scheduler< ValueType > > &schedulers)
std::shared_ptr< storm::storage::geometry::Polytope< GeometryValueType > > transformObjectivePolytopeToOriginal(std::vector< Objective< ValueType > > objectives, std::shared_ptr< storm::storage::geometry::Polytope< GeometryValueType > > const &polytope)
bool constexpr maximize(OptimizationDirection d)
LabParser.cpp.