Storm 1.11.1.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>
10GeometryValueType transformObjectiveValueToOriginal(Objective<ValueType> const& objective, GeometryValueType const& value) {
11 if (storm::solver::maximize(objective.formula->getOptimalityType())) {
12 if (objective.considersComplementaryEvent) {
13 return storm::utility::one<GeometryValueType>() - value;
14 } else {
15 return value;
16 }
17 } else {
18 if (objective.considersComplementaryEvent) {
19 return storm::utility::one<GeometryValueType>() + value;
20 } else {
21 return -value;
22 }
23 }
24}
25
26template<typename ValueType, typename GeometryValueType>
27std::vector<GeometryValueType> transformObjectiveValuesToOriginal(std::vector<Objective<ValueType>> const& objectives,
28 std::vector<GeometryValueType> const& point) {
29 std::vector<GeometryValueType> result;
30 result.reserve(point.size());
31 for (uint_fast64_t objIndex = 0; objIndex < objectives.size(); ++objIndex) {
32 result.push_back(transformObjectiveValueToOriginal(objectives[objIndex], point[objIndex]));
33 }
34 return result;
35}
36
37template<typename ValueType, typename GeometryValueType>
38std::shared_ptr<storm::storage::geometry::Polytope<GeometryValueType>> transformObjectivePolytopeToOriginal(
39 std::vector<Objective<ValueType>> const& objectives, std::shared_ptr<storm::storage::geometry::Polytope<GeometryValueType>> const& polytope) {
40 if (polytope->isEmpty()) {
42 }
43 if (polytope->isUniversal()) {
45 }
46 uint_fast64_t numObjectives = objectives.size();
47 std::vector<std::vector<GeometryValueType>> transformationMatrix(numObjectives,
48 std::vector<GeometryValueType>(numObjectives, storm::utility::zero<GeometryValueType>()));
49 std::vector<GeometryValueType> transformationVector;
50 transformationVector.reserve(numObjectives);
51 for (uint_fast64_t objIndex = 0; objIndex < numObjectives; ++objIndex) {
52 auto const& obj = objectives[objIndex];
53 if (storm::solver::maximize(obj.formula->getOptimalityType())) {
54 if (obj.considersComplementaryEvent) {
55 transformationMatrix[objIndex][objIndex] = -storm::utility::one<GeometryValueType>();
56 transformationVector.push_back(storm::utility::one<GeometryValueType>());
57 } else {
58 transformationMatrix[objIndex][objIndex] = storm::utility::one<GeometryValueType>();
59 transformationVector.push_back(storm::utility::zero<GeometryValueType>());
60 }
61 } else {
62 if (obj.considersComplementaryEvent) {
63 transformationMatrix[objIndex][objIndex] = storm::utility::one<GeometryValueType>();
64 transformationVector.push_back(storm::utility::one<GeometryValueType>());
65 } else {
66 transformationMatrix[objIndex][objIndex] = -storm::utility::one<GeometryValueType>();
67 transformationVector.push_back(storm::utility::zero<GeometryValueType>());
68 }
69 }
70 }
71 return polytope->affineTransformation(transformationMatrix, transformationVector);
72}
73
74/*
75 * This function is only responsible to reverse changes to the model made in the preprocessor
76 * (not the ones done by specific checkers)
77 */
78template<typename ValueType>
80 std::vector<storm::storage::Scheduler<ValueType>>& schedulers) {
81 for (auto& currScheduler : schedulers) {
82 currScheduler = reverseData.createMemorySchedulerFromProductScheduler(currScheduler);
83 }
84}
85
86template storm::RationalNumber transformObjectiveValueToOriginal(Objective<double> const& objective, storm::RationalNumber const& value);
87template std::vector<storm::RationalNumber> transformObjectiveValuesToOriginal(std::vector<Objective<double>> const& objectives,
88 std::vector<storm::RationalNumber> const& point);
89template std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> transformObjectivePolytopeToOriginal(
90 std::vector<Objective<double>> const& objectives, std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> const& polytope);
91
92template storm::RationalNumber transformObjectiveValueToOriginal(Objective<storm::RationalNumber> const& objective, storm::RationalNumber const& value);
93template std::vector<storm::RationalNumber> transformObjectiveValuesToOriginal(std::vector<Objective<storm::RationalNumber>> const& objectives,
94 std::vector<storm::RationalNumber> const& point);
95template std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> transformObjectivePolytopeToOriginal(
96 std::vector<Objective<storm::RationalNumber>> const& objectives,
97 std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> const& polytope);
98
100 std::vector<storm::storage::Scheduler<double>>& schedulers);
101
103 std::vector<storm::storage::Scheduler<storm::RationalNumber>>& schedulers);
104
105} // namespace multiobjective
106} // namespace modelchecker
107} // 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:24
static std::shared_ptr< Polytope< ValueType > > createEmptyPolytope()
Creates the empty polytope (i.e., emptyset)
Definition Polytope.cpp:29
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 > > const &objectives, std::shared_ptr< storm::storage::geometry::Polytope< GeometryValueType > > const &polytope)
std::vector< GeometryValueType > transformObjectiveValuesToOriginal(std::vector< Objective< ValueType > > const &objectives, std::vector< GeometryValueType > const &point)
GeometryValueType transformObjectiveValueToOriginal(Objective< ValueType > const &objective, GeometryValueType const &value)
bool constexpr maximize(OptimizationDirection d)
std::shared_ptr< storm::logic::OperatorFormula const > formula
Definition Objective.h:20