Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SolverEnvironment.cpp
Go to the documentation of this file.
2
3#include "storm-config.h"
5
8
11
12namespace storm {
13
15 forceSoundness = false;
16 forceExact = false;
17 linearEquationSolverType = storm::solver::EquationSolverType::Topological;
18 linearEquationSolverTypeSetFromDefault = true;
19#if defined STORM_HAVE_GLPK
20 lpSolverType = storm::solver::LpSolverType::Glpk;
21#elif defined STORM_HAVE_SOPLEX
22 lpSolverType = storm::solver::LpSolverType::Soplex;
23#else
24 lpSolverType = storm::solver::LpSolverType::Z3;
25#endif
26 lpSolverTypeSetFromDefault = true;
27#if defined STORM_DEFAULT_SMT_SOLVER_Z3
28 smtSolverType = storm::solver::SmtSolverType::Z3;
29#elif defined STORM_DEFAULT_SMT_SOLVER_MATHSAT
30 smtSolverType = storm::solver::SmtSolverType::Mathsat;
31#else
32 smtSolverType = storm::solver::SmtSolverType::Z3;
33#endif
34 smtSolverTypeSetFromDefault = true;
35 debug = false;
36 verbose = false;
37 showProgressDelay = 5;
38}
39
41 // Intentionally left empty
42}
43
45 return eigenSolverEnvironment.get();
46}
47
49 return eigenSolverEnvironment.get();
50}
51
53 return eliminationSolverEnvironment.get();
54}
55
57 return eliminationSolverEnvironment.get();
58}
59
61 return gameSolverEnvironment.get();
62}
63
65 return gameSolverEnvironment.get();
66}
67
69 return glpkSolverEnvironment.get();
70}
71
73 return glpkSolverEnvironment.get();
74}
75
77 return gmmxxSolverEnvironment.get();
78}
79
81 return gmmxxSolverEnvironment.get();
82}
83
85 return gurobiSolverEnvironment.get();
86}
87
89 return gurobiSolverEnvironment.get();
90}
91
93 return longRunAverageSolverEnvironment.get();
94}
95
97 return longRunAverageSolverEnvironment.get();
98}
99
101 return minMaxSolverEnvironment.get();
102}
103
105 return minMaxSolverEnvironment.get();
106}
107
109 return multiplierEnvironment.get();
110}
111
113 return multiplierEnvironment.get();
114}
115
117 return nativeSolverEnvironment.get();
118}
119
121 return nativeSolverEnvironment.get();
122}
123
125 return oviSolverEnvironment.get();
126}
127
129 return oviSolverEnvironment.get();
130}
131
133 return timeBoundedSolverEnvironment.get();
134}
135
137 return timeBoundedSolverEnvironment.get();
138}
139
141 return topologicalSolverEnvironment.get();
142}
143
145 return topologicalSolverEnvironment.get();
146}
147
149 return verbose;
150}
151
153 SolverEnvironment::verbose = value;
154}
155
157 return showProgressDelay;
158}
159
161 SolverEnvironment::showProgressDelay = delay;
162}
163
164storm::solver::EquationSolverType const& SolverEnvironment::getLinearEquationSolverType() const {
165 return linearEquationSolverType;
166}
167
168void SolverEnvironment::setLinearEquationSolverType(storm::solver::EquationSolverType const& value, bool isSetFromDefault) {
169 linearEquationSolverTypeSetFromDefault = isSetFromDefault;
170 linearEquationSolverType = value;
171}
172
174 return linearEquationSolverTypeSetFromDefault;
175}
176
177storm::solver::LpSolverType const& SolverEnvironment::getLpSolverType() const {
178 return lpSolverType;
179}
180
181void SolverEnvironment::setLpSolverType(storm::solver::LpSolverType const& value, bool isSetFromDefault) {
182 lpSolverTypeSetFromDefault = isSetFromDefault;
183 lpSolverType = value;
184}
185
187 return lpSolverTypeSetFromDefault;
188}
189
190storm::solver::SmtSolverType const& SolverEnvironment::getSmtSolverType() const {
191 return smtSolverType;
192}
193
194void SolverEnvironment::setSmtSolverType(storm::solver::SmtSolverType const& value, bool isSetFromDefault) {
195 smtSolverTypeSetFromDefault = isSetFromDefault;
196 smtSolverType = value;
197}
198
200 return smtSolverTypeSetFromDefault;
201}
202
203std::pair<boost::optional<storm::RationalNumber>, boost::optional<bool>> SolverEnvironment::getPrecisionOfLinearEquationSolver(
204 storm::solver::EquationSolverType const& solverType) const {
205 std::pair<boost::optional<storm::RationalNumber>, boost::optional<bool>> result;
206 switch (solverType) {
207 case storm::solver::EquationSolverType::Gmmxx:
208 result.first = gmmxx().getPrecision();
209 break;
210 case storm::solver::EquationSolverType::Eigen:
211 result.first = eigen().getPrecision();
212 break;
213 case storm::solver::EquationSolverType::Native:
214 result.first = native().getPrecision();
215 result.second = native().getRelativeTerminationCriterion();
216 break;
217 case storm::solver::EquationSolverType::Elimination:
218 break;
219 case storm::solver::EquationSolverType::Topological:
220 result = getPrecisionOfLinearEquationSolver(topological().getUnderlyingEquationSolverType());
221 break;
222 default:
223 STORM_LOG_THROW(false, storm::exceptions::UnexpectedException, "The selected solver type is unknown.");
224 }
225 return result;
226}
227
228void SolverEnvironment::setLinearEquationSolverPrecision(boost::optional<storm::RationalNumber> const& newPrecision,
229 boost::optional<bool> const& relativePrecision) {
230 // Assert that each solver type is handled in this method.
231 STORM_LOG_ASSERT(getLinearEquationSolverType() == storm::solver::EquationSolverType::Native ||
232 getLinearEquationSolverType() == storm::solver::EquationSolverType::Gmmxx ||
233 getLinearEquationSolverType() == storm::solver::EquationSolverType::Eigen ||
234 getLinearEquationSolverType() == storm::solver::EquationSolverType::Elimination ||
235 getLinearEquationSolverType() == storm::solver::EquationSolverType::Topological,
236 "The current solver type is not respected in this method.");
237 if (newPrecision) {
238 native().setPrecision(newPrecision.get());
239 gmmxx().setPrecision(newPrecision.get());
240 eigen().setPrecision(newPrecision.get());
241 // Elimination and Topological solver do not have a precision
242 }
243 if (relativePrecision) {
244 native().setRelativeTerminationCriterion(relativePrecision.get());
245 // gmm, eigen, elimination, and topological solvers do not have a precision
246 }
247}
248
250 return forceSoundness;
251}
252
254 SolverEnvironment::forceSoundness = value;
255}
257 return forceExact;
258}
259
261 SolverEnvironment::forceExact = value;
262}
263
265 return debug;
266}
267
269 SolverEnvironment::debug = value;
270}
271
272} // namespace storm
void setPrecision(storm::RationalNumber value)
storm::RationalNumber const & getPrecision() const
storm::RationalNumber const & getPrecision() const
void setPrecision(storm::RationalNumber value)
storm::RationalNumber const & getPrecision() const
bool const & getRelativeTerminationCriterion() const
void setPrecision(storm::RationalNumber value)
TopologicalSolverEnvironment & topological()
void setLinearEquationSolverType(storm::solver::EquationSolverType const &value, bool isSetFromDefault=false)
OviSolverEnvironment & ovi()
EigenSolverEnvironment & eigen()
MinMaxSolverEnvironment & minMax()
void setShowProgressDelay(uint64_t delay)
MultiplierEnvironment & multiplier()
storm::solver::EquationSolverType const & getLinearEquationSolverType() const
void setLinearEquationSolverPrecision(boost::optional< storm::RationalNumber > const &newPrecision, boost::optional< bool > const &relativePrecision=boost::none)
EliminationSolverEnvironment & elimination()
bool isLinearEquationSolverTypeSetFromDefaultValue() const
GlpkSolverEnvironment & glpk()
bool isLpSolverTypeSetFromDefaultValue() const
uint64_t getShowProgressDelay() const
GameSolverEnvironment & game()
void setLpSolverType(storm::solver::LpSolverType const &value, bool isSetFromDefault=false)
TimeBoundedSolverEnvironment & timeBounded()
storm::solver::LpSolverType const & getLpSolverType() const
bool isSmtSolverTypeSetFromDefaultValue() const
NativeSolverEnvironment & native()
GurobiSolverEnvironment & gurobi()
GmmxxSolverEnvironment & gmmxx()
LongRunAverageSolverEnvironment & lra()
storm::solver::SmtSolverType const & getSmtSolverType() const
Retrieves the SMT solver that is currently selected.
std::pair< boost::optional< storm::RationalNumber >, boost::optional< bool > > getPrecisionOfLinearEquationSolver(storm::solver::EquationSolverType const &solverType) const
void setSmtSolverType(storm::solver::SmtSolverType const &value, bool isSetFromDefault=false)
#define STORM_LOG_ASSERT(cond, message)
Definition macros.h:9
#define STORM_LOG_THROW(cond, exception, message)
Definition macros.h:39