You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
5.0 KiB
125 lines
5.0 KiB
#ifndef STORM_UTILITY_SOLVER_H_
|
|
#define STORM_UTILITY_SOLVER_H_
|
|
|
|
#include <iostream>
|
|
|
|
#include <set>
|
|
#include <vector>
|
|
#include <memory>
|
|
|
|
#include "storm/adapters/RationalFunctionAdapter.h"
|
|
|
|
#include "storm/storage/sparse/StateType.h"
|
|
#include "storm/storage/dd/DdType.h"
|
|
#include "storm/solver/SolverSelectionOptions.h"
|
|
|
|
namespace storm {
|
|
namespace solver {
|
|
template<storm::dd::DdType T, typename ValueType>
|
|
class SymbolicGameSolver;
|
|
|
|
template<storm::dd::DdType T, typename V>
|
|
class SymbolicLinearEquationSolver;
|
|
|
|
template<storm::dd::DdType T, typename V>
|
|
class SymbolicMinMaxLinearEquationSolver;
|
|
|
|
template<typename V>
|
|
class LinearEquationSolver;
|
|
|
|
template<typename V>
|
|
class MinMaxLinearEquationSolver;
|
|
|
|
class LpSolver;
|
|
class SmtSolver;
|
|
}
|
|
|
|
namespace storage {
|
|
template<typename V> class SparseMatrix;
|
|
}
|
|
|
|
namespace dd {
|
|
template<storm::dd::DdType Type, typename ValueType>
|
|
class Add;
|
|
|
|
template<storm::dd::DdType Type>
|
|
class Bdd;
|
|
}
|
|
|
|
namespace expressions {
|
|
class Variable;
|
|
class ExpressionManager;
|
|
}
|
|
|
|
namespace utility {
|
|
namespace solver {
|
|
|
|
template<storm::dd::DdType Type, typename ValueType>
|
|
class SymbolicGameSolverFactory {
|
|
public:
|
|
virtual std::unique_ptr<storm::solver::SymbolicGameSolver<Type, ValueType>> create(storm::dd::Add<Type, ValueType> const& A, storm::dd::Bdd<Type> const& allRows, storm::dd::Bdd<Type> const& illegalPlayer1Mask, storm::dd::Bdd<Type> const& illegalPlayer2Mask, std::set<storm::expressions::Variable> const& rowMetaVariables, std::set<storm::expressions::Variable> const& columnMetaVariables, std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs, std::set<storm::expressions::Variable> const& player1Variables, std::set<storm::expressions::Variable> const& player2Variables) const;
|
|
};
|
|
|
|
class LpSolverFactory {
|
|
public:
|
|
/*!
|
|
* Creates a new linear equation solver instance with the given name.
|
|
*
|
|
* @param name The name of the LP solver.
|
|
* @return A pointer to the newly created solver.
|
|
*/
|
|
virtual std::unique_ptr<storm::solver::LpSolver> create(std::string const& name) const;
|
|
virtual std::unique_ptr<storm::solver::LpSolver> create(std::string const& name, storm::solver::LpSolverTypeSelection solvType) const;
|
|
|
|
virtual std::unique_ptr<LpSolverFactory> clone() const;
|
|
|
|
};
|
|
|
|
class GlpkLpSolverFactory : public LpSolverFactory {
|
|
public:
|
|
virtual std::unique_ptr<storm::solver::LpSolver> create(std::string const& name) const override;
|
|
virtual std::unique_ptr<LpSolverFactory> clone() const override;
|
|
};
|
|
|
|
class GurobiLpSolverFactory : public LpSolverFactory {
|
|
public:
|
|
virtual std::unique_ptr<storm::solver::LpSolver> create(std::string const& name) const override;
|
|
virtual std::unique_ptr<LpSolverFactory> clone() const override;
|
|
};
|
|
|
|
class Z3LpSolverFactory : public LpSolverFactory {
|
|
public:
|
|
virtual std::unique_ptr<storm::solver::LpSolver> create(std::string const& name) const override;
|
|
virtual std::unique_ptr<LpSolverFactory> clone() const override;
|
|
};
|
|
|
|
std::unique_ptr<storm::solver::LpSolver> getLpSolver(std::string const& name, storm::solver::LpSolverTypeSelection solvType = storm::solver::LpSolverTypeSelection::FROMSETTINGS) ;
|
|
|
|
class SmtSolverFactory {
|
|
public:
|
|
/*!
|
|
* Creates a new SMT solver instance.
|
|
*
|
|
* @param manager The expression manager responsible for the expressions that will be given to the SMT
|
|
* solver.
|
|
* @return A pointer to the newly created solver.
|
|
*/
|
|
virtual std::unique_ptr<storm::solver::SmtSolver> create(storm::expressions::ExpressionManager& manager) const;
|
|
};
|
|
|
|
class Z3SmtSolverFactory : public SmtSolverFactory {
|
|
public:
|
|
virtual std::unique_ptr<storm::solver::SmtSolver> create(storm::expressions::ExpressionManager& manager) const;
|
|
};
|
|
|
|
class MathsatSmtSolverFactory : public SmtSolverFactory {
|
|
public:
|
|
virtual std::unique_ptr<storm::solver::SmtSolver> create(storm::expressions::ExpressionManager& manager) const;
|
|
};
|
|
|
|
std::unique_ptr<storm::solver::SmtSolver> getSmtSolver(storm::expressions::ExpressionManager& manager);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif /* STORM_UTILITY_SOLVER_H_ */
|