#include "storm/utility/solver.h" #include #include "storm/solver/SymbolicNativeLinearEquationSolver.h" #include "storm/solver/SymbolicEliminationLinearEquationSolver.h" #include "storm/solver/SymbolicGameSolver.h" #include "storm/solver/GurobiLpSolver.h" #include "storm/solver/Z3LpSolver.h" #include "storm/solver/GlpkLpSolver.h" #include "storm/solver/Z3SmtSolver.h" #include "storm/solver/MathsatSmtSolver.h" #include "storm/settings/SettingsManager.h" #include "storm/settings/modules/CoreSettings.h" #include "storm/exceptions/InvalidSettingsException.h" namespace storm { namespace utility { namespace solver { template std::unique_ptr> LpSolverFactory::create(std::string const& name, storm::solver::LpSolverTypeSelection solvT) const { storm::solver::LpSolverType t; if(solvT == storm::solver::LpSolverTypeSelection::FROMSETTINGS) { t = storm::settings::getModule().getLpSolver(); } else { t = convert(solvT); } switch (t) { case storm::solver::LpSolverType::Gurobi: return std::unique_ptr>(new storm::solver::GurobiLpSolver(name)); case storm::solver::LpSolverType::Glpk: return std::unique_ptr>(new storm::solver::GlpkLpSolver(name)); case storm::solver::LpSolverType::Z3: return std::unique_ptr>(new storm::solver::Z3LpSolver(name)); } return nullptr; } template std::unique_ptr> LpSolverFactory::create(std::string const& name) const { return LpSolverFactory::create(name, storm::solver::LpSolverTypeSelection::FROMSETTINGS); } template std::unique_ptr> LpSolverFactory::clone() const { return std::make_unique>(*this); } template std::unique_ptr> GlpkLpSolverFactory::create(std::string const& name) const { return LpSolverFactory::create(name, storm::solver::LpSolverTypeSelection::Glpk); } template std::unique_ptr> GlpkLpSolverFactory::clone() const { return std::make_unique>(*this); } template std::unique_ptr> GurobiLpSolverFactory::create(std::string const& name) const { return LpSolverFactory::create(name, storm::solver::LpSolverTypeSelection::Gurobi); } template std::unique_ptr> GurobiLpSolverFactory::clone() const { return std::make_unique>(*this); } template std::unique_ptr> Z3LpSolverFactory::create(std::string const& name) const { return LpSolverFactory::create(name, storm::solver::LpSolverTypeSelection::Z3); } template std::unique_ptr> Z3LpSolverFactory::clone() const { return std::make_unique>(*this); } template std::unique_ptr> getLpSolver(std::string const& name, storm::solver::LpSolverTypeSelection solvType) { std::unique_ptr> factory(new LpSolverFactory()); return factory->create(name, solvType); } std::unique_ptr SmtSolverFactory::create(storm::expressions::ExpressionManager& manager) const { storm::solver::SmtSolverType smtSolverType = storm::settings::getModule().getSmtSolver(); switch (smtSolverType) { case storm::solver::SmtSolverType::Z3: return std::unique_ptr(new storm::solver::Z3SmtSolver(manager)); case storm::solver::SmtSolverType::Mathsat: return std::unique_ptr(new storm::solver::MathsatSmtSolver(manager)); } return nullptr; } std::unique_ptr Z3SmtSolverFactory::create(storm::expressions::ExpressionManager& manager) const { return std::unique_ptr(new storm::solver::Z3SmtSolver(manager)); } std::unique_ptr MathsatSmtSolverFactory::create(storm::expressions::ExpressionManager& manager) const { return std::unique_ptr(new storm::solver::MathsatSmtSolver(manager)); } std::unique_ptr getSmtSolver(storm::expressions::ExpressionManager& manager) { std::unique_ptr factory(new MathsatSmtSolverFactory()); return factory->create(manager); } template class LpSolverFactory; template class LpSolverFactory; template class GlpkLpSolverFactory; template class GlpkLpSolverFactory; template class GurobiLpSolverFactory; template class GurobiLpSolverFactory; template class Z3LpSolverFactory; template class Z3LpSolverFactory; template std::unique_ptr> getLpSolver(std::string const& name, storm::solver::LpSolverTypeSelection solvType); template std::unique_ptr> getLpSolver(std::string const& name, storm::solver::LpSolverTypeSelection solvType); } } }