1#ifndef LP_SOPLEX_SOLVER_INTERFACE_H
2#define LP_SOPLEX_SOLVER_INTERFACE_H
4#include "downward/lp/solver_interface.h"
7#pragma GCC diagnostic push
8#pragma GCC diagnostic ignored "-Wunused-parameter"
9#pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
10#if (__GNUG__ >= 11) || (__clang_major__ >= 12)
11#pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion"
14#pragma GCC diagnostic ignored "-Wuse-after-free"
21#pragma GCC diagnostic pop
25class SoPlexSolverInterface :
public SolverInterface {
27 mutable soplex::SoPlex soplex;
28 int num_permanent_constraints;
29 int num_temporary_constraints;
32 SoPlexSolverInterface();
34 virtual void load_problem(
const LinearProgram& lp)
override;
35 virtual void add_temporary_constraints(
36 const named_vector::NamedVector<LPConstraint>& constraints)
override;
37 virtual void clear_temporary_constraints()
override;
38 virtual double get_infinity()
const override;
40 virtual void set_objective_coefficients(
41 const std::vector<double>& coefficients)
override;
43 set_objective_coefficient(
int index,
double coefficient)
override;
44 virtual void set_constraint_lower_bound(
int index,
double bound)
override;
45 virtual void set_constraint_upper_bound(
int index,
double bound)
override;
46 virtual void set_variable_lower_bound(
int index,
double bound)
override;
47 virtual void set_variable_upper_bound(
int index,
double bound)
override;
49 virtual void set_mip_gap(
double gap)
override;
51 virtual void solve()
override;
52 virtual void write_lp(
const std::string& filename)
const override;
53 virtual void print_failure_analysis()
const override;
54 virtual bool is_infeasible()
const override;
55 virtual bool is_unbounded()
const override;
57 virtual bool has_optimal_solution()
const override;
59 virtual double get_objective_value()
const override;
61 virtual std::vector<double> extract_solution()
const override;
63 virtual int get_num_variables()
const override;
64 virtual int get_num_constraints()
const override;
65 virtual bool has_temporary_constraints()
const override;
66 virtual void print_statistics()
const override;
68 virtual std::vector<double> extract_dual_solution()
const override;
70 virtual void add_variable(
71 const LPVariable& var,
72 const std::vector<int>& ids,
73 const std::vector<double>& coefs,
74 std::string_view name =
"")
override;
77 add_constraint(
const LPConstraint& constraint, std::string_view name =
"")