#pragma once #include "storm/solver/LpSolver.h" #include "storm/solver/StandardMinMaxLinearEquationSolver.h" #include "storm/utility/solver.h" namespace storm { namespace solver { template class LpMinMaxLinearEquationSolver : public StandardMinMaxLinearEquationSolver { public: LpMinMaxLinearEquationSolver(std::unique_ptr>&& linearEquationSolverFactory, std::unique_ptr>&& lpSolverFactory); LpMinMaxLinearEquationSolver(storm::storage::SparseMatrix const& A, std::unique_ptr>&& linearEquationSolverFactory, std::unique_ptr>&& lpSolverFactory); LpMinMaxLinearEquationSolver(storm::storage::SparseMatrix&& A, std::unique_ptr>&& linearEquationSolverFactory, std::unique_ptr>&& lpSolverFactory); virtual bool internalSolveEquations(OptimizationDirection dir, std::vector& x, std::vector const& b) const override; virtual void clearCache() const override; private: std::unique_ptr> lpSolverFactory; }; template class LpMinMaxLinearEquationSolverFactory : public StandardMinMaxLinearEquationSolverFactory { public: LpMinMaxLinearEquationSolverFactory(bool trackScheduler = false); LpMinMaxLinearEquationSolverFactory(std::unique_ptr>&& lpSolverFactory, bool trackScheduler = false); LpMinMaxLinearEquationSolverFactory(std::unique_ptr>&& linearEquationSolverFactory, std::unique_ptr>&& lpSolverFactory, bool trackScheduler = false); virtual void setMinMaxMethod(MinMaxMethodSelection const& newMethod) override; virtual void setMinMaxMethod(MinMaxMethod const& newMethod) override; // Make the other create methods visible. using MinMaxLinearEquationSolverFactory::create; virtual std::unique_ptr> create() const override; private: std::unique_ptr> lpSolverFactory; }; } }