OR-Tools  9.6
sparse_containers.h
Go to the documentation of this file.
1 // Copyright 2010-2022 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 // IWYU pragma: private, include "ortools/math_opt/cpp/math_opt.h"
15 // IWYU pragma: friend "ortools/math_opt/cpp/.*"
16 
17 #ifndef OR_TOOLS_MATH_OPT_CPP_SPARSE_CONTAINERS_H_
18 #define OR_TOOLS_MATH_OPT_CPP_SPARSE_CONTAINERS_H_
19 
20 #include "absl/container/flat_hash_map.h"
21 #include "absl/strings/string_view.h"
22 #include "absl/types/span.h"
23 #include "ortools/base/logging.h"
30 #include "ortools/math_opt/solution.pb.h"
31 #include "ortools/math_opt/sparse_containers.pb.h"
36 
38 
39 // Returns the VariableMap<double> equivalent to `vars_proto`.
40 //
41 // Requires that (or returns a status error):
42 // * vars_proto.ids and vars_proto.values have equal size.
43 // * vars_proto.ids is sorted.
44 // * vars_proto.ids has elements in [0, max(int64_t)).
45 // * vars_proto.ids has elements that are variables in `model`.
46 //
47 // Note that the values of vars_proto.values are not checked (it may have NaNs).
48 absl::StatusOr<VariableMap<double>> VariableValuesFromProto(
49  const ModelStorage* const model, const SparseDoubleVectorProto& vars_proto);
50 
51 // Returns the proto equivalent of variable_values.
52 SparseDoubleVectorProto VariableValuesToProto(
53  const VariableMap<double>& variable_values);
54 
55 // Returns the LinearConstraintMap<double> equivalent to `lin_cons_proto`.
56 //
57 // Requires that (or returns a status error):
58 // * lin_cons_proto.ids and lin_cons_proto.values have equal size.
59 // * lin_cons_proto.ids is sorted.
60 // * lin_cons_proto.ids has elements in [0, max(int64_t)).
61 // * lin_cons_proto.ids has elements that are linear constraints in `model`.
62 //
63 // Note that the values of lin_cons_proto.values are not checked (it may have
64 // NaNs).
65 absl::StatusOr<LinearConstraintMap<double>> LinearConstraintValuesFromProto(
66  const ModelStorage* const model,
67  const SparseDoubleVectorProto& lin_cons_proto);
68 
69 // Returns the proto equivalent of linear_constraint_values.
70 SparseDoubleVectorProto LinearConstraintValuesToProto(
71  const LinearConstraintMap<double>& linear_constraint_values);
72 
73 // Returns the VariableMap<BasisStatus> equivalent to `basis_proto`.
74 //
75 // Requires that (or returns a status error):
76 // * basis_proto.ids and basis_proto.values have equal size.
77 // * basis_proto.ids is sorted.
78 // * basis_proto.ids has elements in [0, max(int64_t)).
79 // * basis_proto.ids has elements that are variables in `model`.
80 // * basis_proto.values does not contain UNSPECIFIED and has valid enum values.
81 absl::StatusOr<VariableMap<BasisStatus>> VariableBasisFromProto(
82  const ModelStorage* const model,
83  const SparseBasisStatusVector& basis_proto);
84 
85 // Returns the proto equivalent of basis_values.
86 SparseBasisStatusVector VariableBasisToProto(
87  const VariableMap<BasisStatus>& basis_values);
88 
89 // Returns the LinearConstraintMap<BasisStatus> equivalent to `basis_proto`.
90 //
91 // Requires that (or returns a status error):
92 // * basis_proto.ids and basis_proto.values have equal size.
93 // * basis_proto.ids is sorted.
94 // * basis_proto.ids has elements in [0, max(int64_t)).
95 // * basis_proto.ids has elements that are linear constraints in `model`.
96 // * basis_proto.values does not contain UNSPECIFIED and has valid enum values.
97 absl::StatusOr<LinearConstraintMap<BasisStatus>> LinearConstraintBasisFromProto(
98  const ModelStorage* const model,
99  const SparseBasisStatusVector& basis_proto);
100 
101 // Returns the proto equivalent of basis_values.
102 SparseBasisStatusVector LinearConstraintBasisToProto(
103  const LinearConstraintMap<BasisStatus>& basis_values);
104 
105 } // namespace operations_research::math_opt
106 
107 #endif // OR_TOOLS_MATH_OPT_CPP_SPARSE_CONTAINERS_H_
GRBmodel * model
SparseBasisStatusVector VariableBasisToProto(const VariableMap< BasisStatus > &basis_values)
SparseBasisStatusVector LinearConstraintBasisToProto(const LinearConstraintMap< BasisStatus > &basis_values)
absl::StatusOr< LinearConstraintMap< double > > LinearConstraintValuesFromProto(const ModelStorage *const model, const SparseDoubleVectorProto &lin_cons_proto)
SparseDoubleVectorProto LinearConstraintValuesToProto(const LinearConstraintMap< double > &linear_constraint_values)
absl::StatusOr< VariableMap< BasisStatus > > VariableBasisFromProto(const ModelStorage *const model, const SparseBasisStatusVector &basis_proto)
absl::StatusOr< VariableMap< double > > VariableValuesFromProto(const ModelStorage *const model, const SparseDoubleVectorProto &vars_proto)
SparseDoubleVectorProto VariableValuesToProto(const VariableMap< double > &variable_values)
absl::StatusOr< LinearConstraintMap< BasisStatus > > LinearConstraintBasisFromProto(const ModelStorage *const model, const SparseBasisStatusVector &basis_proto)