14 #ifndef OR_TOOLS_MATH_OPT_SOLVERS_GLOP_SOLVER_H_
15 #define OR_TOOLS_MATH_OPT_SOLVERS_GLOP_SOLVER_H_
24 #include "absl/container/flat_hash_map.h"
25 #include "absl/status/status.h"
26 #include "absl/status/statusor.h"
27 #include "absl/types/span.h"
32 #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"
39 #include "ortools/math_opt/sparse_containers.pb.h"
46 static absl::StatusOr<std::unique_ptr<SolverInterface>>
New(
47 const ModelProto&
model,
const SolverInitializerProto& initializer);
49 absl::StatusOr<SolveResultProto>
Solve(
51 const ModelSolveParametersProto& model_parameters,
52 const CallbackRegistrationProto& callback_registration,
54 absl::Status
Update(
const ModelUpdateProto& model_update)
override;
55 bool CanUpdate(
const ModelUpdateProto& model_update)
override;
59 static std::pair<glop::GlopParameters, std::vector<std::string>>
61 const CommonSolveParametersProto& common_solver_parameters,
62 const glop::GlopParameters& glop_parameters);
67 void AddVariables(
const VariablesProto& variables);
68 void AddLinearConstraints(
const LinearConstraintsProto& linear_constraints);
70 void DeleteVariables(absl::Span<const int64_t> ids_to_delete);
71 void DeleteLinearConstraints(absl::Span<const int64_t> ids_to_delete);
73 void SetOrUpdateObjectiveCoefficients(
74 const SparseDoubleVectorProto& linear_objective_coefficients);
75 void SetOrUpdateConstraintMatrix(
76 const SparseDoubleMatrixProto& linear_constraint_matrix);
78 void UpdateVariableBounds(
const VariableUpdatesProto& variable_updates);
79 void UpdateLinearConstraintBounds(
80 const LinearConstraintUpdatesProto& linear_constraint_updates);
83 const ModelSolveParametersProto& model_parameters,
84 SolveResultProto& solve_result);
89 absl::flat_hash_map<int64_t, glop::ColIndex> variables_;
90 absl::flat_hash_map<int64_t, glop::RowIndex> linear_constraints_;
bool CanUpdate(const ModelUpdateProto &model_update) override
static std::pair< glop::GlopParameters, std::vector< std::string > > MergeCommonParameters(const CommonSolveParametersProto &common_solver_parameters, const glop::GlopParameters &glop_parameters)
absl::Status Update(const ModelUpdateProto &model_update) override
absl::StatusOr< SolveResultProto > Solve(const SolveParametersProto ¶meters, const ModelSolveParametersProto &model_parameters, const CallbackRegistrationProto &callback_registration, Callback cb) override
static absl::StatusOr< std::unique_ptr< SolverInterface > > New(const ModelProto &model, const SolverInitializerProto &initializer)
std::function< absl::StatusOr< CallbackResultProto >(const CallbackDataProto &)> Callback
Collection of objects used to extend the Constraint Solver library.