18 #include <initializer_list>
22 #include "google/protobuf/message.h"
27 #include "ortools/math_opt/model_parameters.pb.h"
28 #include "ortools/math_opt/solution.pb.h"
29 #include "ortools/math_opt/sparse_containers.pb.h"
35 using ::google::protobuf::RepeatedField;
39 parameters.dual_values_filter = MakeSkipAllFilter<LinearConstraint>();
40 parameters.reduced_costs_filter = MakeSkipAllFilter<Variable>();
45 std::initializer_list<Variable> variables) {
46 return OnlySomePrimalVariables<std::initializer_list<Variable>>(variables);
53 hint.variable_values.storage(),
55 <<
"invalid solution_hints";
59 <<
"invalid initial_basis";
64 <<
"invalid variable_values_filter";
68 <<
"invalid dual_values_filter";
72 <<
"invalid reduced_costs_filter";
73 return absl::OkStatus();
77 ModelSolveParametersProto ret;
85 RepeatedField<int64_t>*
const constraint_status_ids =
86 ret.mutable_initial_basis()->mutable_constraint_status()->mutable_ids();
87 RepeatedField<int>*
const constraint_status_values =
88 ret.mutable_initial_basis()
89 ->mutable_constraint_status()
91 constraint_status_ids->Reserve(
initial_basis->constraint_status.size());
92 constraint_status_values->Reserve(
initial_basis->constraint_status.size());
95 constraint_status_ids->Add(key.id());
96 constraint_status_values->Add(
99 RepeatedField<int64_t>*
const variable_status_ids =
100 ret.mutable_initial_basis()->mutable_variable_status()->mutable_ids();
101 RepeatedField<int>*
const variable_status_values =
102 ret.mutable_initial_basis()
103 ->mutable_variable_status()
105 variable_status_ids->Reserve(
initial_basis->variable_status.size());
106 variable_status_values->Reserve(
initial_basis->variable_status.size());
108 variable_status_ids->Add(key.id());
109 variable_status_values->Add(
114 SolutionHintProto& hint = *ret.add_solution_hints();
116 hint.mutable_variable_values()->mutable_ids();
117 RepeatedField<double>*
const variable_values =
118 hint.mutable_variable_values()->mutable_values();
119 variable_ids->Reserve(solution_hint.variable_values.size());
120 variable_values->Reserve(solution_hint.variable_values.size());
121 for (
const Variable& key : solution_hint.variable_values.SortedKeys()) {
123 variable_values->Add(solution_hint.variable_values.at(key));
128 ret.mutable_branching_priorities()->mutable_ids();
129 RepeatedField<int32_t>*
const variable_values =
130 ret.mutable_branching_priorities()->mutable_values();
#define RETURN_IF_ERROR(expr)
absl::Span< const int64_t > variable_ids
absl::Status CheckModelStorage(const ModelStorage *const storage, const ModelStorage *const expected_storage)
Enum< E >::Proto EnumToProto(const std::optional< E > value)
Collection of objects used to extend the Constraint Solver library.
ModelSolveParametersProto Proto() const
std::vector< SolutionHint > solution_hints
VariableMap< int32_t > branching_priorities
static ModelSolveParameters OnlySomePrimalVariables(const Collection &variables)
static ModelSolveParameters OnlyPrimalVariables()
std::optional< Basis > initial_basis
MapFilter< Variable > reduced_costs_filter
MapFilter< Variable > variable_values_filter
MapFilter< LinearConstraint > dual_values_filter
absl::Status CheckModelStorage(const ModelStorage *expected_storage) const