OR-Tools  9.3
glop_solver.h
Go to the documentation of this file.
1// Copyright 2010-2021 Google LLC
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14#ifndef OR_TOOLS_MATH_OPT_SOLVERS_GLOP_SOLVER_H_
15#define OR_TOOLS_MATH_OPT_SOLVERS_GLOP_SOLVER_H_
16
17#include <stdint.h>
18
19#include <atomic>
20#include <memory>
21#include <string>
22#include <utility>
23#include <vector>
24
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"
44
45namespace operations_research {
46namespace math_opt {
47
49 public:
50 static absl::StatusOr<std::unique_ptr<SolverInterface>> New(
51 const ModelProto& model, const InitArgs& init_args);
52
53 absl::StatusOr<SolveResultProto> Solve(
54 const SolveParametersProto& parameters,
55 const ModelSolveParametersProto& model_parameters,
56 MessageCallback message_cb,
57 const CallbackRegistrationProto& callback_registration, Callback cb,
58 SolveInterrupter* interrupter) override;
59 absl::Status Update(const ModelUpdateProto& model_update) override;
60 bool CanUpdate(const ModelUpdateProto& model_update) override;
61
62 // Returns the merged parameters and a list of warnings from any parameter
63 // settings that are invalid for this solver.
64 static absl::StatusOr<glop::GlopParameters> MergeSolveParameters(
65 const SolveParametersProto& solver_parameters, bool setting_initial_basis,
66 bool has_message_callback);
67
68 private:
69 GlopSolver();
70
71 void AddVariables(const VariablesProto& variables);
72 void AddLinearConstraints(const LinearConstraintsProto& linear_constraints);
73
74 void DeleteVariables(absl::Span<const int64_t> ids_to_delete);
75 void DeleteLinearConstraints(absl::Span<const int64_t> ids_to_delete);
76
77 void SetOrUpdateObjectiveCoefficients(
78 const SparseDoubleVectorProto& linear_objective_coefficients);
79 void SetOrUpdateConstraintMatrix(
80 const SparseDoubleMatrixProto& linear_constraint_matrix);
81
82 void UpdateVariableBounds(const VariableUpdatesProto& variable_updates);
83 void UpdateLinearConstraintBounds(
84 const LinearConstraintUpdatesProto& linear_constraint_updates);
85
86 // Returns the ids of variables and linear constraints with inverted bounds.
87 InvertedBounds ListInvertedBounds() const;
88
89 void FillSolution(glop::ProblemStatus status,
90 const ModelSolveParametersProto& model_parameters,
91 SolveResultProto& solve_result);
92 absl::StatusOr<SolveResultProto> MakeSolveResult(
94 const ModelSolveParametersProto& model_parameters,
95 const SolveInterrupter* interrupter, absl::Duration solve_time);
96
97 absl::Status FillSolveStats(const glop::ProblemStatus status,
98 absl::Duration solve_time,
99 SolveStatsProto& solve_stats);
100
101 void SetGlopBasis(const BasisProto& basis);
102
103 glop::LinearProgram linear_program_;
104 glop::LPSolver lp_solver_;
105
106 absl::flat_hash_map<int64_t, glop::ColIndex> variables_;
107 absl::flat_hash_map<int64_t, glop::RowIndex> linear_constraints_;
108};
109
110} // namespace math_opt
111} // namespace operations_research
112
113#endif // OR_TOOLS_MATH_OPT_SOLVERS_GLOP_SOLVER_H_
bool CanUpdate(const ModelUpdateProto &model_update) override
Definition: glop_solver.cc:398
absl::Status Update(const ModelUpdateProto &model_update) override
Definition: glop_solver.cc:870
static absl::StatusOr< std::unique_ptr< SolverInterface > > New(const ModelProto &model, const InitArgs &init_args)
Definition: glop_solver.cc:844
absl::StatusOr< SolveResultProto > Solve(const SolveParametersProto &parameters, const ModelSolveParametersProto &model_parameters, MessageCallback message_cb, const CallbackRegistrationProto &callback_registration, Callback cb, SolveInterrupter *interrupter) override
Definition: glop_solver.cc:779
static absl::StatusOr< glop::GlopParameters > MergeSolveParameters(const SolveParametersProto &solver_parameters, bool setting_initial_basis, bool has_message_callback)
Definition: glop_solver.cc:269
std::function< void(const std::vector< std::string > &)> MessageCallback
std::function< absl::StatusOr< CallbackResultProto >(const CallbackDataProto &)> Callback
SatParameters parameters
absl::Status status
Definition: g_gurobi.cc:35
GRBmodel * model
Collection of objects used to extend the Constraint Solver library.