18#include <initializer_list>
22#include "absl/algorithm/container.h"
23#include "absl/log/check.h"
24#include "absl/status/status.h"
25#include "absl/status/statusor.h"
26#include "absl/time/time.h"
27#include "google/protobuf/repeated_field.h"
44using ::google::protobuf::RepeatedField;
56 std::initializer_list<Variable> variables) {
64 <<
"invalid hint in solution_hints";
68 <<
"invalid initial_basis";
71 <<
"invalid variable_values_filter";
73 <<
"invalid dual_values_filter";
76 <<
"invalid quadratic_dual_values_filter";
78 <<
"invalid reduced_costs_filter";
83 <<
"invalid variable " << var <<
" in branching_priorities";
89 <<
"invalid objective " << objective <<
" in objective_parameters";
94 lazy_linear_constraint.storage(),
96 <<
"invalid LinearConstraint " << lazy_linear_constraint
97 <<
" in lazy_linear_constraints";
99 return absl::OkStatus();
108 <<
"invalid variable " << v <<
" in variable_values";
114 <<
"invalid constraint " <<
c <<
" in dual_values";
116 return absl::OkStatus();
126absl::StatusOr<ModelSolveParameters::SolutionHint>
132 _ <<
"failed to parse SolutionHintProto.variable_values");
136 _ <<
"failed to parse SolutionHintProto.dual_values");
143absl::StatusOr<ObjectiveParametersProto>
161absl::StatusOr<ModelSolveParameters::ObjectiveParameters>
176 _ <<
"invalid time_limit");
200 RepeatedField<int64_t>& variable_ids =
202 RepeatedField<int32_t>& variable_values =
207 variable_ids.Add(key.id());
212 if (objective.id().has_value()) {
216 _ <<
"invalid parameters for objective " << *objective.id());
220 _ <<
"invalid parameters for primary objective");
224 RepeatedField<int64_t>& lazy_linear_constraint_ids =
226 lazy_linear_constraint_ids.Reserve(
230 lazy_linear_constraint_ids.Add(lazy_linear_constraint.id());
232 absl::c_sort(lazy_linear_constraint_ids);
243 _ <<
"invalid variable_values_filter");
247 _ <<
"invalid dual_values_filter");
251 _ <<
"invalid quadratic_dual_values_filter");
255 _ <<
"invalid reduced_costs_filter");
260 _ <<
"invalid initial_basis");
266 _ <<
"invalid solution_hints[" << i <<
"]");
272 _ <<
"invalid branching_priorities");
275 auto primary_objective_params,
277 _ <<
"invalid primary_objective_parameters");
280 std::move(primary_objective_params));
282 for (
const auto& [
id, aux_obj_params_proto] :
286 <<
"invalid auxiliary_objective_parameters with id: " <<
id
287 <<
", objective not in the model";
292 _ <<
"invalid auxiliary_objective_parameters with id: " <<
id);
295 std::move(aux_obj_params));
300 <<
"invalid lazy_linear_constraint with id: " << lin_con
301 <<
", constraint not in the model";
#define RETURN_IF_ERROR(expr)
const ::operations_research::math_opt::ObjectiveParametersProto & primary_objective_parameters() const
::google::protobuf::Map<::int64_t, ::operations_research::math_opt::ObjectiveParametersProto > *PROTOBUF_NONNULL mutable_auxiliary_objective_parameters()
const ::operations_research::math_opt::SparseInt32VectorProto & branching_priorities() const
const ::operations_research::math_opt::SparseVectorFilterProto & variable_values_filter() const
::operations_research::math_opt::SparseInt32VectorProto *PROTOBUF_NONNULL mutable_branching_priorities()
const ::operations_research::math_opt::SolutionHintProto & solution_hints(int index) const
::operations_research::math_opt::SparseVectorFilterProto *PROTOBUF_NONNULL mutable_variable_values_filter()
::int64_t lazy_linear_constraint_ids(int index) const
const ::operations_research::math_opt::BasisProto & initial_basis() const
const ::operations_research::math_opt::SparseVectorFilterProto & quadratic_dual_values_filter() const
::operations_research::math_opt::ObjectiveParametersProto *PROTOBUF_NONNULL mutable_primary_objective_parameters()
bool has_initial_basis() const
const ::operations_research::math_opt::SparseVectorFilterProto & reduced_costs_filter() const
::operations_research::math_opt::BasisProto *PROTOBUF_NONNULL mutable_initial_basis()
::operations_research::math_opt::SparseVectorFilterProto *PROTOBUF_NONNULL mutable_dual_values_filter()
const ::operations_research::math_opt::SparseVectorFilterProto & dual_values_filter() const
int solution_hints_size() const
bool has_primary_objective_parameters() const
::operations_research::math_opt::SparseVectorFilterProto *PROTOBUF_NONNULL mutable_reduced_costs_filter()
::operations_research::math_opt::SolutionHintProto *PROTOBUF_NONNULL add_solution_hints()
::google::protobuf::RepeatedField<::int64_t > *PROTOBUF_NONNULL mutable_lazy_linear_constraint_ids()
const ::google::protobuf::Map<::int64_t, ::operations_research::math_opt::ObjectiveParametersProto > & auxiliary_objective_parameters() const
::operations_research::math_opt::SparseVectorFilterProto *PROTOBUF_NONNULL mutable_quadratic_dual_values_filter()
bool has_auxiliary_objective(int64_t id) const
bool has_linear_constraint(int64_t id) const
ModelStorageCPtr storage() const
LinearConstraint linear_constraint(int64_t id) const
double objective_degradation_absolute_tolerance() const
bool has_objective_degradation_relative_tolerance() const
const ::google::protobuf::Duration & time_limit() const
double objective_degradation_relative_tolerance() const
void set_objective_degradation_absolute_tolerance(double value)
void set_objective_degradation_relative_tolerance(double value)
bool has_time_limit() const
::google::protobuf::Duration *PROTOBUF_NONNULL mutable_time_limit()
bool has_objective_degradation_absolute_tolerance() const
static Objective Primary(ModelStorageCPtr storage)
static Objective Auxiliary(ModelStorageCPtr storage, AuxiliaryObjectiveId id)
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_variable_values()
const ::operations_research::math_opt::SparseDoubleVectorProto & variable_values() const
const ::operations_research::math_opt::SparseDoubleVectorProto & dual_values() const
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_dual_values()
::google::protobuf::RepeatedField<::int64_t > *PROTOBUF_NONNULL mutable_ids()
::google::protobuf::RepeatedField<::int32_t > *PROTOBUF_NONNULL mutable_values()
absl::Status CheckModelStorage(const NullableModelStorageCPtr storage, const ModelStorageCPtr expected_storage)
const ModelStorage *absl_nonnull ModelStorageCPtr
absl::flat_hash_map< Variable, V > VariableMap
MapFilter< KeyType > MakeSkipAllFilter()
absl::flat_hash_map< LinearConstraint, V > LinearConstraintMap
SparseDoubleVectorProto LinearConstraintValuesToProto(const LinearConstraintMap< double > &linear_constraint_values)
ElementId< ElementType::kAuxiliaryObjective > AuxiliaryObjectiveId
absl::StatusOr< LinearConstraintMap< double > > LinearConstraintValuesFromProto(const ModelStorageCPtr model, const SparseDoubleVectorProto &lin_cons_proto)
absl::StatusOr< MapFilter< LinearConstraint > > LinearConstraintFilterFromProto(const Model &model, const SparseVectorFilterProto &proto)
SparseDoubleVectorProto VariableValuesToProto(const VariableMap< double > &variable_values)
absl::StatusOr< MapFilter< QuadraticConstraint > > QuadraticConstraintFilterFromProto(const Model &model, const SparseVectorFilterProto &proto)
absl::StatusOr< VariableMap< double > > VariableValuesFromProto(const ModelStorageCPtr model, const SparseDoubleVectorProto &vars_proto)
std::vector< typename Map::key_type > SortedKeys(const Map &map)
absl::StatusOr< MapFilter< Variable > > VariableFilterFromProto(const Model &model, const SparseVectorFilterProto &proto)
inline ::absl::StatusOr< absl::Duration > DecodeGoogleApiProto(const google::protobuf::Duration &proto)
inline ::absl::StatusOr< google::protobuf::Duration > EncodeGoogleApiProto(absl::Duration d)
StatusBuilder InvalidArgumentErrorBuilder()
static absl::StatusOr< Basis > FromProto(ModelStorageCPtr model, const BasisProto &basis_proto)
std::optional< double > objective_degradation_relative_tolerance
absl::Duration time_limit
static absl::StatusOr< ObjectiveParameters > FromProto(const ObjectiveParametersProto &proto)
std::optional< double > objective_degradation_absolute_tolerance
absl::StatusOr< ObjectiveParametersProto > Proto() const
static absl::StatusOr< SolutionHint > FromProto(const Model &model, const SolutionHintProto &hint_proto)
LinearConstraintMap< double > dual_values
absl::Status CheckModelStorage(ModelStorageCPtr expected_storage) const
SolutionHintProto Proto() const
VariableMap< double > variable_values
MapFilter< QuadraticConstraint > quadratic_dual_values_filter
MapFilter< LinearConstraint > dual_values_filter
MapFilter< Variable > variable_values_filter
ObjectiveMap< ObjectiveParameters > objective_parameters
std::optional< Basis > initial_basis
static ModelSolveParameters OnlySomePrimalVariables(const Collection &variables)
VariableMap< int32_t > branching_priorities
static ModelSolveParameters OnlyPrimalVariables()
absl::StatusOr< ModelSolveParametersProto > Proto() const
absl::Status CheckModelStorage(ModelStorageCPtr expected_storage) const
MapFilter< Variable > reduced_costs_filter
static absl::StatusOr< ModelSolveParameters > FromProto(const Model &model, const ModelSolveParametersProto &proto)
absl::flat_hash_set< LinearConstraint > lazy_linear_constraints
std::vector< SolutionHint > solution_hints
#define OR_ASSIGN_OR_RETURN3(lhs, rexpr, error_expression)