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
.operations_research.math_opt.BasisProto initial_basis = 4;
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
repeated .operations_research.math_opt.SolutionHintProto solution_hints = 5;
bool has_primary_objective_parameters() const
.operations_research.math_opt.ObjectiveParametersProto primary_objective_parameters = 7;
::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
Returns true if this id has been created and not yet deleted.
bool has_linear_constraint(int64_t id) const
Returns true if this id has been created and not yet deleted.
ModelStorageCPtr storage() const
LinearConstraint linear_constraint(int64_t id) const
Will CHECK if has_linear_constraint(id) is false.
double objective_degradation_absolute_tolerance() const
bool has_objective_degradation_relative_tolerance() const
optional double objective_degradation_relative_tolerance = 8;
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 time_limit = 9;
::google::protobuf::Duration *PROTOBUF_NONNULL mutable_time_limit()
bool has_objective_degradation_absolute_tolerance() const
optional double objective_degradation_absolute_tolerance = 7;
static Objective Primary(ModelStorageCPtr storage)
Returns an object that refers to the primary objective of the model.
static Objective Auxiliary(ModelStorageCPtr storage, AuxiliaryObjectiveId id)
Returns an object that refers to an auxiliary objective of the model.
::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)
An object oriented wrapper for quadratic constraints in ModelStorage.
absl::flat_hash_map< Variable, V > VariableMap
absl::Nonnull< const ModelStorage * > ModelStorageCPtr
MapFilter< KeyType > MakeSkipAllFilter()
absl::flat_hash_map< LinearConstraint, V > LinearConstraintMap
SparseDoubleVectorProto LinearConstraintValuesToProto(const LinearConstraintMap< double > &linear_constraint_values)
Returns the proto equivalent of 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)
Returns the proto equivalent of 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)
In SWIG mode, we don't want anything besides these top-level includes.
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)
Parameters for an individual objective in a multi-objective model.
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
Returns the proto equivalent of this object.
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
The filter that is applied to dual_values of DualSolution and DualRay.
MapFilter< Variable > variable_values_filter
ObjectiveMap< ObjectiveParameters > objective_parameters
Parameters for individual objectives in a multi-objective model.
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
The filter that is applied to reduced_costs of DualSolution and DualRay.
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)