Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
solver.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
5
6namespace storm {
7
8class Environment;
9
10namespace solver {
11
12template<typename ValueType, bool RawMode>
13class LpSolver;
14
16
17class SmtSolver;
18} // namespace solver
19
20namespace expressions {
22} // namespace expressions
23} // namespace storm
24
25namespace storm::utility::solver {
26template<typename ValueType>
28 public:
29 virtual ~LpSolverFactory() = default;
30
37 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, false>> create(storm::Environment const& env, std::string const& name) const = 0;
38 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, true>> createRaw(storm::Environment const& env, std::string const& name) const = 0;
39 virtual std::unique_ptr<LpSolverFactory<ValueType>> clone() const = 0;
40};
41
42template<typename ValueType>
43class GlpkLpSolverFactory : public LpSolverFactory<ValueType> {
44 public:
45 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, false>> create(storm::Environment const& env, std::string const& name) const override;
46 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, true>> createRaw(storm::Environment const& env, std::string const& name) const override;
47 virtual std::unique_ptr<LpSolverFactory<ValueType>> clone() const override;
48};
49
50template<typename ValueType>
51class SoplexLpSolverFactory : public LpSolverFactory<ValueType> {
52 public:
53 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, false>> create(storm::Environment const& env, std::string const& name) const override;
54 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, true>> createRaw(storm::Environment const& env, std::string const& name) const override;
55 virtual std::unique_ptr<LpSolverFactory<ValueType>> clone() const override;
56};
57
58template<typename ValueType>
59class HighsLpSolverFactory : public LpSolverFactory<ValueType> {
60 public:
61 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, false>> create(storm::Environment const& env, std::string const& name) const override;
62 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, true>> createRaw(storm::Environment const& env, std::string const& name) const override;
63 virtual std::unique_ptr<LpSolverFactory<ValueType>> clone() const override;
64};
65
66template<typename ValueType>
67class GurobiLpSolverFactory : public LpSolverFactory<ValueType> {
68 public:
69 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, false>> create(storm::Environment const& env, std::string const& name) const override;
70 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, true>> createRaw(storm::Environment const& env, std::string const& name) const override;
71 virtual std::unique_ptr<LpSolverFactory<ValueType>> clone() const override;
72
73 private:
74 std::shared_ptr<storm::solver::GurobiEnvironment> const& getOrCreateGurobiEnvironment(storm::Environment const& env) const;
75
76 mutable std::shared_ptr<storm::solver::GurobiEnvironment> environment;
77};
78
79template<typename ValueType>
80class Z3LpSolverFactory : public LpSolverFactory<ValueType> {
81 public:
82 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, false>> create(storm::Environment const& env, std::string const& name) const override;
83 virtual std::unique_ptr<storm::solver::LpSolver<ValueType, true>> createRaw(storm::Environment const& env, std::string const& name) const override;
84 virtual std::unique_ptr<LpSolverFactory<ValueType>> clone() const override;
85};
86
87template<typename ValueType>
88std::unique_ptr<LpSolverFactory<ValueType>> getLpSolverFactory(
89 storm::Environment const& env, storm::solver::LpSolverTypeSelection solvType = storm::solver::LpSolverTypeSelection::FROMSETTINGS);
90
91template<typename ValueType>
92std::unique_ptr<storm::solver::LpSolver<ValueType, false>> getLpSolver(
93 storm::Environment const& env, std::string const& name, storm::solver::LpSolverTypeSelection solvType = storm::solver::LpSolverTypeSelection::FROMSETTINGS);
94
95template<typename ValueType>
96std::unique_ptr<storm::solver::LpSolver<ValueType, true>> getRawLpSolver(
97 storm::Environment const& env, std::string const& name, storm::solver::LpSolverTypeSelection solvType = storm::solver::LpSolverTypeSelection::FROMSETTINGS);
98
100 public:
101 virtual ~SmtSolverFactory() = default;
102
110 virtual std::unique_ptr<storm::solver::SmtSolver> create(storm::expressions::ExpressionManager& manager) const;
111};
112
114 public:
115 virtual std::unique_ptr<storm::solver::SmtSolver> create(storm::expressions::ExpressionManager& manager) const;
116};
117
119 public:
120 virtual std::unique_ptr<storm::solver::SmtSolver> create(storm::expressions::ExpressionManager& manager) const;
121};
122
123std::unique_ptr<storm::solver::SmtSolver> getSmtSolver(storm::expressions::ExpressionManager& manager);
124} // namespace storm::utility::solver
This class is responsible for managing a set of typed variables and all expressions using these varia...
An interface that captures the functionality of an LP solver.
Definition LpSolver.h:50
An interface that captures the functionality of an SMT solver.
Definition SmtSolver.h:21
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, false > > create(storm::Environment const &env, std::string const &name) const override
Creates a new linear equation solver instance with the given name.
Definition solver.cpp:25
virtual std::unique_ptr< LpSolverFactory< ValueType > > clone() const override
Definition solver.cpp:38
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, true > > createRaw(storm::Environment const &env, std::string const &name) const override
Definition solver.cpp:31
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, true > > createRaw(storm::Environment const &env, std::string const &name) const override
Definition solver.cpp:88
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, false > > create(storm::Environment const &env, std::string const &name) const override
Creates a new linear equation solver instance with the given name.
Definition solver.cpp:83
virtual std::unique_ptr< LpSolverFactory< ValueType > > clone() const override
Definition solver.cpp:95
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, true > > createRaw(storm::Environment const &env, std::string const &name) const override
Definition solver.cpp:64
virtual std::unique_ptr< LpSolverFactory< ValueType > > clone() const override
Definition solver.cpp:69
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, false > > create(storm::Environment const &env, std::string const &name) const override
Creates a new linear equation solver instance with the given name.
Definition solver.cpp:59
virtual std::unique_ptr< LpSolverFactory< ValueType > > clone() const =0
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, false > > create(storm::Environment const &env, std::string const &name) const =0
Creates a new linear equation solver instance with the given name.
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, true > > createRaw(storm::Environment const &env, std::string const &name) const =0
virtual std::unique_ptr< storm::solver::SmtSolver > create(storm::expressions::ExpressionManager &manager) const
Creates a new SMT solver instance.
Definition solver.cpp:185
virtual std::unique_ptr< storm::solver::SmtSolver > create(storm::expressions::ExpressionManager &manager) const
Creates a new SMT solver instance.
Definition solver.cpp:159
virtual std::unique_ptr< LpSolverFactory< ValueType > > clone() const override
Definition solver.cpp:54
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, false > > create(storm::Environment const &env, std::string const &name) const override
Creates a new linear equation solver instance with the given name.
Definition solver.cpp:43
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, true > > createRaw(storm::Environment const &env, std::string const &name) const override
Definition solver.cpp:48
virtual std::unique_ptr< LpSolverFactory< ValueType > > clone() const override
Definition solver.cpp:110
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, false > > create(storm::Environment const &env, std::string const &name) const override
Creates a new linear equation solver instance with the given name.
Definition solver.cpp:100
virtual std::unique_ptr< storm::solver::LpSolver< ValueType, true > > createRaw(storm::Environment const &env, std::string const &name) const override
Definition solver.cpp:105
virtual std::unique_ptr< storm::solver::SmtSolver > create(storm::expressions::ExpressionManager &manager) const
Creates a new SMT solver instance.
Definition solver.cpp:181
std::unique_ptr< LpSolverFactory< ValueType > > getLpSolverFactory(storm::Environment const &env, storm::solver::LpSolverTypeSelection solvType)
Definition solver.cpp:115
std::unique_ptr< storm::solver::LpSolver< ValueType, true > > getRawLpSolver(storm::Environment const &env, std::string const &name, storm::solver::LpSolverTypeSelection solvType)
Definition solver.cpp:153
std::unique_ptr< storm::solver::SmtSolver > getSmtSolver(storm::expressions::ExpressionManager &manager)
Definition solver.cpp:189
std::unique_ptr< storm::solver::LpSolver< ValueType > > getLpSolver(storm::Environment const &env, std::string const &name, storm::solver::LpSolverTypeSelection solvType)
Definition solver.cpp:146