AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
soplex_solver_interface.h
1#ifndef LP_SOPLEX_SOLVER_INTERFACE_H
2#define LP_SOPLEX_SOLVER_INTERFACE_H
3
4#include "downward/lp/solver_interface.h"
5
6#ifdef __GNUG__
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"
12#endif
13#if __GNUG__ >= 12
14#pragma GCC diagnostic ignored "-Wuse-after-free"
15#endif
16#endif
17
18#include <soplex.h>
19
20#ifdef __GNUG__
21#pragma GCC diagnostic pop
22#endif
23
24namespace lp {
25class SoPlexSolverInterface : public SolverInterface {
26 // The reference to the solver is mutable because objValueReal is not const.
27 mutable soplex::SoPlex soplex;
28 int num_permanent_constraints;
29 int num_temporary_constraints;
30
31public:
32 SoPlexSolverInterface();
33
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;
39
40 virtual void set_objective_coefficients(
41 const std::vector<double>& coefficients) override;
42 virtual void
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;
48
49 virtual void set_mip_gap(double gap) override;
50
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;
56
57 virtual bool has_optimal_solution() const override;
58
59 virtual double get_objective_value() const override;
60
61 virtual std::vector<double> extract_solution() const override;
62
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;
67
68 virtual std::vector<double> extract_dual_solution() const override;
69
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;
75
76 virtual void
77 add_constraint(const LPConstraint& constraint, std::string_view name = "")
78 override;
79};
80} // namespace lp
81
82#endif