1#ifndef LP_SOLVER_INTERFACE_H
2#define LP_SOLVER_INTERFACE_H
8namespace named_vector {
18class SolverInterface {
20 virtual ~SolverInterface() =
default;
22 virtual void load_problem(
const LinearProgram& lp) = 0;
23 virtual void add_temporary_constraints(
24 const named_vector::NamedVector<LPConstraint>& constraints) = 0;
25 virtual void clear_temporary_constraints() = 0;
26 virtual double get_infinity()
const = 0;
29 set_objective_coefficients(
const std::vector<double>& coefficients) = 0;
30 virtual void set_objective_coefficient(
int index,
double coefficient) = 0;
31 virtual void set_constraint_lower_bound(
int index,
double bound) = 0;
32 virtual void set_constraint_upper_bound(
int index,
double bound) = 0;
33 virtual void set_variable_lower_bound(
int index,
double bound) = 0;
34 virtual void set_variable_upper_bound(
int index,
double bound) = 0;
36 virtual void set_mip_gap(
double gap) = 0;
38 virtual void solve() = 0;
39 virtual void write_lp(
const std::string& filename)
const = 0;
40 virtual void print_failure_analysis()
const = 0;
41 virtual bool is_infeasible()
const = 0;
42 virtual bool is_unbounded()
const = 0;
51 virtual bool has_optimal_solution()
const = 0;
58 virtual double get_objective_value()
const = 0;
66 virtual std::vector<double> extract_solution()
const = 0;
68 virtual int get_num_variables()
const = 0;
69 virtual int get_num_constraints()
const = 0;
70 virtual bool has_temporary_constraints()
const = 0;
71 virtual void print_statistics()
const = 0;
73 virtual std::vector<double> extract_dual_solution()
const = 0;
75 virtual void add_variable(
76 const LPVariable& var,
77 const std::vector<int>& constraints,
78 const std::vector<double>& coefficients,
79 std::string_view name =
"") = 0;
81 virtual void add_constraint(
82 const LPConstraint& constraint,
83 std::string_view name =
"") = 0;