Storm
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
69template std::vector<storm::RationalNumber> transformObjectiveValuesToOriginal(std::vector<Objective<double>> objectives,
70 std::vector<storm::RationalNumber> const& point);
71template std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> transformObjectivePolytopeToOriginal(
72 std::vector<Objective<double>> objectives, std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> const& polytope);
73template std::vector<storm::RationalNumber> transformObjectiveValuesToOriginal(std::vector<Objective<storm::RationalNumber>> objectives,
74 std::vector<storm::RationalNumber> const& point);
75template std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> transformObjectivePolytopeToOriginal(
76 std::vector<Objective<storm::RationalNumber>> objectives, std::shared_ptr<storm::storage::geometry::Polytope<storm::RationalNumber>> const& polytope);
77} // namespace multiobjective
78} // namespace modelchecker
79} // namespace storm
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)
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.
Definition cli.cpp:18