14#ifndef OR_TOOLS_MATH_OPT_SOLVERS_GSCIP_SOLVER_H_
15#define OR_TOOLS_MATH_OPT_SOLVERS_GSCIP_SOLVER_H_
21#include "absl/container/flat_hash_map.h"
22#include "absl/container/flat_hash_set.h"
23#include "absl/status/status.h"
24#include "absl/status/statusor.h"
25#include "absl/types/span.h"
27#include "ortools/gscip/gscip.pb.h"
29#include "ortools/math_opt/callback.pb.h"
33#include "ortools/math_opt/model.pb.h"
34#include "ortools/math_opt/model_parameters.pb.h"
35#include "ortools/math_opt/model_update.pb.h"
36#include "ortools/math_opt/parameters.pb.h"
37#include "ortools/math_opt/result.pb.h"
38#include "ortools/math_opt/sparse_containers.pb.h"
39#include "scip/type_cons.h"
40#include "scip/type_var.h"
47 static absl::StatusOr<std::unique_ptr<SolverInterface>>
New(
50 absl::StatusOr<SolveResultProto>
Solve(
52 const ModelSolveParametersProto& model_parameters,
54 const CallbackRegistrationProto& callback_registration,
Callback cb,
56 absl::Status
Update(
const ModelUpdateProto& model_update)
override;
57 bool CanUpdate(
const ModelUpdateProto& model_update)
override;
62 const SolveParametersProto& solve_parameters);
87 InterruptEventHandler();
89 SCIP_RETCODE Init(
GScip* gscip)
override;
94 SCIP_RETCODE TryCallInterruptIfNeeded(
GScip* gscip);
102 explicit GScipSolver(std::unique_ptr<GScip> gscip);
105 absl::Status AddVariables(
const VariablesProto& variables,
106 const absl::flat_hash_map<int64_t, double>&
107 linear_objective_coefficients);
110 absl::Status UpdateVariables(
const VariableUpdatesProto& variable_updates);
113 absl::Status AddLinearConstraints(
114 const LinearConstraintsProto& linear_constraints,
115 const SparseDoubleMatrixProto& linear_constraint_matrix);
119 absl::Status UpdateLinearConstraints(
120 const LinearConstraintUpdatesProto linear_constraint_updates,
121 const SparseDoubleMatrixProto& linear_constraint_matrix,
122 std::optional<int64_t> first_new_var_id,
123 std::optional<int64_t> first_new_cstr_id);
125 absl::flat_hash_set<SCIP_VAR*> LookupAllVariables(
127 absl::StatusOr<SolveResultProto> CreateSolveResultProto(
129 const ModelSolveParametersProto& model_parameters,
130 std::optional<double> cutoff);
135 const std::unique_ptr<GScip> gscip_;
136 InterruptEventHandler interrupt_event_handler_;
137 absl::flat_hash_map<int64_t, SCIP_VAR*> variables_;
138 absl::flat_hash_map<int64_t, SCIP_CONS*> linear_constraints_;
bool CanUpdate(const ModelUpdateProto &model_update) override
absl::Status Update(const ModelUpdateProto &model_update) override
static absl::StatusOr< std::unique_ptr< SolverInterface > > New(const ModelProto &model, const InitArgs &init_args)
absl::StatusOr< SolveResultProto > Solve(const SolveParametersProto ¶meters, const ModelSolveParametersProto &model_parameters, MessageCallback message_cb, const CallbackRegistrationProto &callback_registration, Callback cb, SolveInterrupter *interrupter) override
static absl::StatusOr< GScipParameters > MergeParameters(const SolveParametersProto &solve_parameters)
std::function< void(const std::vector< std::string > &)> MessageCallback
std::function< absl::StatusOr< CallbackResultProto >(const CallbackDataProto &)> Callback
absl::Span< const int64_t > variable_ids
Collection of objects used to extend the Constraint Solver library.