OR-Tools  9.3
cp_sat_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_CP_SAT_SOLVER_H_
15#define OR_TOOLS_MATH_OPT_SOLVERS_CP_SAT_SOLVER_H_
16
17#include <stdint.h>
18
19#include <cstdint>
20#include <memory>
21#include <vector>
22
23#include "absl/status/status.h"
24#include "absl/status/statusor.h"
25#include "absl/types/span.h"
26#include "ortools/linear_solver/linear_solver.pb.h"
27#include "ortools/math_opt/callback.pb.h"
31#include "ortools/math_opt/model.pb.h"
32#include "ortools/math_opt/model_parameters.pb.h"
33#include "ortools/math_opt/model_update.pb.h"
34#include "ortools/math_opt/parameters.pb.h"
35#include "ortools/math_opt/result.pb.h"
36#include "ortools/math_opt/solution.pb.h"
37
38namespace operations_research {
39namespace math_opt {
40
42 public:
43 static absl::StatusOr<std::unique_ptr<SolverInterface>> New(
44 const ModelProto& model, const InitArgs& init_args);
45
46 absl::StatusOr<SolveResultProto> Solve(
47 const SolveParametersProto& parameters,
48 const ModelSolveParametersProto& model_parameters,
49 MessageCallback message_cb,
50 const CallbackRegistrationProto& callback_registration, Callback cb,
51 SolveInterrupter* interrupter) override;
52 absl::Status Update(const ModelUpdateProto& model_update) override;
53 bool CanUpdate(const ModelUpdateProto& model_update) override;
54
55 private:
56 CpSatSolver(MPModelProto cp_sat_model, std::vector<int64_t> variable_ids,
57 std::vector<int64_t> linear_constraint_ids);
58
59 // Extract the solution from CP-SAT's response.
60 SparseDoubleVectorProto ExtractSolution(
61 absl::Span<const double> cp_sat_variable_values,
62 const ModelSolveParametersProto& model_parameters) const;
63
64 // Returns the ids of variables and linear constraints with inverted bounds.
65 InvertedBounds ListInvertedBounds() const;
66
67 const MPModelProto cp_sat_model_;
68
69 // For the i-th variable in `cp_sat_model_`, `variable_ids_[i]` contains the
70 // corresponding id in the input `Model`.
71 const std::vector<int64_t> variable_ids_;
72
73 // For the i-th linear constraint in `cp_sat_model_`,
74 // `linear_constraint_ids_[i]` contains the corresponding id in the input
75 // `Model`.
76 const std::vector<int64_t> linear_constraint_ids_;
77};
78
79} // namespace math_opt
80} // namespace operations_research
81
82#endif // OR_TOOLS_MATH_OPT_SOLVERS_CP_SAT_SOLVER_H_
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 &parameters, const ModelSolveParametersProto &model_parameters, MessageCallback message_cb, const CallbackRegistrationProto &callback_registration, Callback cb, SolveInterrupter *interrupter) override
std::function< void(const std::vector< std::string > &)> MessageCallback
std::function< absl::StatusOr< CallbackResultProto >(const CallbackDataProto &)> Callback
SatParameters parameters
absl::Span< const int64_t > variable_ids
GRBmodel * model
Collection of objects used to extend the Constraint Solver library.