54 static absl::StatusOr<std::unique_ptr<SolverInterface>>
New(
57 absl::StatusOr<SolveResultProto>
Solve(
64 absl::StatusOr<ComputeInfeasibleSubsystemResultProto>
81 struct AuxiliaryStructureHandler {
85 absl::Status DeleteStructure(
GScip& gscip);
87 std::vector<SCIP_VAR*> variables;
88 std::vector<SCIP_CONS*> constraints;
91 explicit GScipSolver(std::unique_ptr<GScip> gscip);
95 const absl::flat_hash_map<int64_t, double>&
96 linear_objective_coefficients);
100 absl::StatusOr<bool> UpdateVariables(
103 absl::Status AddQuadraticObjectiveTerms(
107 absl::Status AddLinearConstraints(
113 absl::Status UpdateLinearConstraints(
116 std::optional<int64_t> first_new_var_id,
117 std::optional<int64_t> first_new_cstr_id);
119 absl::Status AddQuadraticConstraints(
120 const google::protobuf::Map<int64_t, QuadraticConstraintProto>&
121 quadratic_constraints);
123 absl::Status AddIndicatorConstraints(
124 const google::protobuf::Map<int64_t, IndicatorConstraintProto>&
125 indicator_constraints);
130 absl::StatusOr<std::pair<SCIP_VAR*, SCIP_CONS*>>
137 absl::StatusOr<std::pair<GScipSOSData, AuxiliaryStructureHandler>>
140 absl::Status AddSos1Constraints(
141 const google::protobuf::Map<int64_t, SosConstraintProto>&
143 absl::Status AddSos2Constraints(
144 const google::protobuf::Map<int64_t, SosConstraintProto>&
147 absl::flat_hash_set<SCIP_VAR*> LookupAllVariables(
148 absl::Span<const int64_t> variable_ids);
149 absl::StatusOr<SolveResultProto> CreateSolveResultProto(
152 std::optional<double> cutoff);
164 std::unique_ptr<GScipSolverConstraintData> constraint_data_;
165 const std::unique_ptr<GScip> gscip_;
169 bool has_quadratic_objective_ =
false;
170 absl::flat_hash_map<int64_t, SCIP_CONS*> linear_constraints_;
171 absl::flat_hash_map<int64_t, SCIP_CONS*> quadratic_constraints_;
175 absl::flat_hash_map<int64_t, std::optional<std::pair<SCIP_CONS*, int64_t>>>
176 indicator_constraints_;
177 absl::flat_hash_map<int64_t, std::pair<SCIP_CONS*, AuxiliaryStructureHandler>>
179 absl::flat_hash_map<int64_t, std::pair<SCIP_CONS*, AuxiliaryStructureHandler>>
absl::StatusOr< SolveResultProto > Solve(const SolveParametersProto ¶meters, const ModelSolveParametersProto &model_parameters, MessageCallback message_cb, const CallbackRegistrationProto &callback_registration, Callback cb, const SolveInterrupter *absl_nullable interrupter) override