21 #include "absl/container/flat_hash_set.h"
22 #include "absl/status/status.h"
23 #include "absl/status/statusor.h"
24 #include "absl/strings/string_view.h"
25 #include "absl/time/time.h"
26 #include "absl/types/span.h"
30 #include "ortools/math_opt/callback.pb.h"
35 #include "ortools/math_opt/sparse_containers.pb.h"
51 return "mip_solution";
66 return absl::MakeConstSpan(kCallbackEventValues);
70 const absl::Duration runtime)
71 : event(event), runtime(runtime) {}
74 const CallbackDataProto&
proto)
78 presolve_stats(
proto.presolve_stats()),
79 simplex_stats(
proto.simplex_stats()),
80 barrier_stats(
proto.barrier_stats()),
81 mip_stats(
proto.mip_stats()) {
83 if (
proto.has_primal_solution_vector()) {
88 CHECK_OK(maybe_time.status());
97 <<
"invalid mip_node_filter";
101 <<
"invalid mip_solution_filter";
102 return absl::OkStatus();
106 CallbackRegistrationProto result;
108 result.add_request_registration(
EnumToProto(event));
110 std::sort(result.mutable_request_registration()->begin(),
111 result.mutable_request_registration()->end());
125 <<
"invalid new_constraints";
129 solution.storage(), expected_storage))
130 <<
"invalid suggested_solutions";
132 return absl::OkStatus();
136 CallbackResultProto result;
142 CallbackResultProto::GeneratedLinearConstraint* constraint_proto =
144 constraint_proto->set_is_lazy(constraint.is_lazy);
145 constraint_proto->set_lower_bound(
146 constraint.linear_constraint.lower_bound_minus_offset());
147 constraint_proto->set_upper_bound(
148 constraint.linear_constraint.upper_bound_minus_offset());
149 *constraint_proto->mutable_linear_expression() =
#define RETURN_IF_ERROR(expr)
absl::Status CheckModelStorage(const ModelStorage *const storage, const ModelStorage *const expected_storage)
absl::StatusOr< VariableMap< double > > VariableValuesFromProto(const ModelStorage *const model, const SparseDoubleVectorProto &vars_proto)
SparseDoubleVectorProto VariableValuesToProto(const VariableMap< double > &variable_values)
std::optional< typename EnumProto< P >::Cpp > EnumFromProto(const P proto_value)
Enum< E >::Proto EnumToProto(const std::optional< E > value)
Collection of objects used to extend the Constraint Solver library.
inline ::absl::StatusOr< absl::Duration > DecodeGoogleApiProto(const google::protobuf::Duration &proto)
CallbackData(CallbackEvent event, absl::Duration runtime)
std::optional< VariableMap< double > > solution
CallbackRegistrationProto Proto() const
MapFilter< Variable > mip_solution_filter
bool add_lazy_constraints
absl::Status CheckModelStorage(const ModelStorage *expected_storage) const
MapFilter< Variable > mip_node_filter
absl::flat_hash_set< CallbackEvent > events
std::vector< VariableMap< double > > suggested_solutions
CallbackResultProto Proto() const
absl::Status CheckModelStorage(const ModelStorage *expected_storage) const
std::vector< GeneratedLinearConstraint > new_constraints
static std::optional< absl::string_view > ToOptString(E value)
static absl::Span< const E > AllValues()