Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
MinMaxLinearEquationSolverRequirements.cpp
Go to the documentation of this file.
2
5
6namespace storm {
7namespace solver {
8
10 : lowerBoundsRequirement(linearEquationSolverRequirements.lowerBounds()), upperBoundsRequirement(linearEquationSolverRequirements.upperBounds()) {
11 // Intentionally left empty.
12}
13
15 acyclicRequirement.enable(critical);
16 return *this;
17}
18
20 uniqueSolutionRequirement.enable(critical);
21 return *this;
22}
23
25 validInitialSchedulerRequirement.enable(critical);
26 return *this;
27}
28
30 lowerBoundsRequirement.enable(critical);
31 return *this;
32}
33
35 upperBoundsRequirement.enable(critical);
36 return *this;
37}
38
44
46 return acyclicRequirement;
47}
48
50 return uniqueSolutionRequirement;
51}
52
54 return validInitialSchedulerRequirement;
55}
56
58 return lowerBoundsRequirement;
59}
60
62 return upperBoundsRequirement;
63}
64
66 switch (element) {
68 return acyclic();
70 return uniqueSolution();
72 return validInitialScheduler();
74 return lowerBounds();
76 return upperBounds();
77 }
78 STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentException, "Unknown ElementType.");
79}
80
82 acyclicRequirement.clear();
83}
84
86 uniqueSolutionRequirement.clear();
87}
88
90 validInitialSchedulerRequirement.clear();
91}
92
94 lowerBoundsRequirement.clear();
95}
96
98 upperBoundsRequirement.clear();
99}
100
105
107 return acyclicRequirement || uniqueSolutionRequirement || validInitialSchedulerRequirement || lowerBoundsRequirement || upperBoundsRequirement;
108}
109
111 return acyclicRequirement.isCritical() || uniqueSolutionRequirement.isCritical() || validInitialSchedulerRequirement.isCritical() ||
112 lowerBoundsRequirement.isCritical() || upperBoundsRequirement.isCritical();
113}
114
116 std::string res = "[";
117 bool first = true;
118 if (acyclic()) {
119 if (!first) {
120 res += ", ";
121 } else {
122 first = false;
123 }
124 res += "Acyclic";
125 if (acyclic().isCritical()) {
126 res += "(mandatory)";
127 }
128 }
129 if (uniqueSolution()) {
130 if (!first) {
131 res += ", ";
132 } else {
133 first = false;
134 }
135 res += "UniqueSolution";
136 if (uniqueSolution().isCritical()) {
137 res += "(mandatory)";
138 }
139 }
140 if (validInitialScheduler()) {
141 if (!first) {
142 res += ", ";
143 } else {
144 first = false;
145 }
146 res += "validInitialScheduler";
147 if (validInitialScheduler().isCritical()) {
148 res += "(mandatory)";
149 }
150 }
151 if (lowerBounds()) {
152 if (!first) {
153 res += ", ";
154 } else {
155 first = false;
156 }
157 res += "lowerBounds";
158 if (lowerBounds().isCritical()) {
159 res += "(mandatory)";
160 }
161 }
162 if (upperBounds()) {
163 if (!first) {
164 res += ", ";
165 } else {
166 first = false;
167 }
168 res += "upperBounds";
169 if (upperBounds().isCritical()) {
170 res += "(mandatory)";
171 }
172 }
173 res += "]";
174 return res;
175}
176
177} // namespace solver
178} // namespace storm
MinMaxLinearEquationSolverRequirements(LinearEquationSolverRequirements const &linearEquationSolverRequirements=LinearEquationSolverRequirements())
SolverRequirement const & get(Element const &element) const
MinMaxLinearEquationSolverRequirements & requireBounds(bool critical=true)
MinMaxLinearEquationSolverRequirements & requireUniqueSolution(bool critical=true)
MinMaxLinearEquationSolverRequirements & requireLowerBounds(bool critical=true)
MinMaxLinearEquationSolverRequirements & requireValidInitialScheduler(bool critical=true)
MinMaxLinearEquationSolverRequirements & requireUpperBounds(bool critical=true)
std::string getEnabledRequirementsAsString() const
Returns a string that enumerates the enabled requirements.
MinMaxLinearEquationSolverRequirements & requireAcyclic(bool critical=true)
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:28