14 #ifndef OR_TOOLS_MATH_OPT_SOLVERS_GLOP_SOLVER_H_
15 #define OR_TOOLS_MATH_OPT_SOLVERS_GLOP_SOLVER_H_
25 #include "absl/container/flat_hash_map.h"
26 #include "absl/status/status.h"
27 #include "absl/status/statusor.h"
28 #include "absl/types/span.h"
30 #include "ortools/glop/parameters.pb.h"
33 #include "ortools/math_opt/callback.pb.h"
37 #include "ortools/math_opt/model.pb.h"
38 #include "ortools/math_opt/model_parameters.pb.h"
39 #include "ortools/math_opt/model_update.pb.h"
40 #include "ortools/math_opt/parameters.pb.h"
41 #include "ortools/math_opt/result.pb.h"
42 #include "ortools/math_opt/solution.pb.h"
43 #include "ortools/math_opt/sparse_containers.pb.h"
50 static absl::StatusOr<std::unique_ptr<SolverInterface>>
New(
53 absl::StatusOr<SolveResultProto>
Solve(
55 const ModelSolveParametersProto& model_parameters,
57 const CallbackRegistrationProto& callback_registration,
Callback cb,
59 absl::StatusOr<bool>
Update(
const ModelUpdateProto& model_update)
override;
64 const SolveParametersProto& solver_parameters,
bool setting_initial_basis,
65 bool has_message_callback);
70 void AddVariables(
const VariablesProto& variables);
71 void AddLinearConstraints(
const LinearConstraintsProto& linear_constraints);
73 void DeleteVariables(absl::Span<const int64_t> ids_to_delete);
74 void DeleteLinearConstraints(absl::Span<const int64_t> ids_to_delete);
76 void SetOrUpdateObjectiveCoefficients(
77 const SparseDoubleVectorProto& linear_objective_coefficients);
78 void SetOrUpdateConstraintMatrix(
79 const SparseDoubleMatrixProto& linear_constraint_matrix);
81 void UpdateVariableBounds(
const VariableUpdatesProto& variable_updates);
82 void UpdateLinearConstraintBounds(
83 const LinearConstraintUpdatesProto& linear_constraint_updates);
89 const ModelSolveParametersProto& model_parameters,
90 SolveResultProto& solve_result);
91 absl::StatusOr<SolveResultProto> MakeSolveResult(
93 const ModelSolveParametersProto& model_parameters,
97 absl::Duration solve_time,
98 SolveStatsProto& solve_stats);
100 void SetGlopBasis(
const BasisProto& basis);
105 absl::flat_hash_map<int64_t, glop::ColIndex> variables_;
106 absl::flat_hash_map<int64_t, glop::RowIndex> linear_constraints_;
absl::StatusOr< bool > 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< glop::GlopParameters > MergeSolveParameters(const SolveParametersProto &solver_parameters, bool setting_initial_basis, bool has_message_callback)
std::function< void(const std::vector< std::string > &)> MessageCallback
std::function< absl::StatusOr< CallbackResultProto >(const CallbackDataProto &)> Callback
Collection of objects used to extend the Constraint Solver library.