19#include "absl/container/flat_hash_map.h"
20#include "absl/log/check.h"
21#include "absl/log/log.h"
22#include "absl/status/status.h"
23#include "absl/strings/string_view.h"
24#include "absl/types/span.h"
45 return "undetermined";
56 return absl::MakeConstSpan(kSolutionStatusValues);
64 primal_solution.variable_values,
66 _ <<
"invalid variable_values");
67 primal_solution.objective_value = primal_solution_proto.
objective_value();
69 primal_solution.auxiliary_objective_values,
72 _ <<
"invalid auxiliary_objective_values");
76 return absl::InvalidArgumentError(
"feasibility_status must be specified");
79 return primal_solution;
112 _ <<
"invalid variable_values");
129 _ <<
"invalid dual_values");
133 _ <<
"invalid quadratic_dual_values");
137 _ <<
"invalid reduced_costs");
144 return absl::InvalidArgumentError(
"feasibility_status must be specified");
147 return dual_solution;
169 _ <<
"invalid dual_values");
173 _ <<
"invalid reduced_costs");
190 _ <<
"invalid constraint_status");
194 _ <<
"invalid variable_status");
206 <<
"invalid variable " << v <<
" in variable_status";
212 <<
"invalid constraint " <<
c <<
" in constraint_status";
214 return absl::OkStatus();
233 _ <<
"invalid primal_solution");
239 _ <<
"invalid dual_solution");
244 _ <<
"invalid basis");
257 if (
basis.has_value()) {
#define RETURN_IF_ERROR(expr)
void set_basic_dual_feasibility(::operations_research::math_opt::SolutionStatusProto value)
const ::operations_research::math_opt::SparseBasisStatusVector & variable_status() const
::operations_research::math_opt::SparseBasisStatusVector *PROTOBUF_NONNULL mutable_constraint_status()
const ::operations_research::math_opt::SparseBasisStatusVector & constraint_status() const
::operations_research::math_opt::SolutionStatusProto basic_dual_feasibility() const
::operations_research::math_opt::SparseBasisStatusVector *PROTOBUF_NONNULL mutable_variable_status()
const ::operations_research::math_opt::SparseDoubleVectorProto & dual_values() const
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_dual_values()
const ::operations_research::math_opt::SparseDoubleVectorProto & reduced_costs() const
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_reduced_costs()
const ::operations_research::math_opt::SparseDoubleVectorProto & dual_values() const
::operations_research::math_opt::SolutionStatusProto feasibility_status() const
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_reduced_costs()
bool has_objective_value() const
optional double objective_value = 3;
double objective_value() const
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_dual_values()
void set_feasibility_status(::operations_research::math_opt::SolutionStatusProto value)
const ::operations_research::math_opt::SparseDoubleVectorProto & reduced_costs() const
void set_objective_value(double value)
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_quadratic_dual_values()
const ::operations_research::math_opt::SparseDoubleVectorProto & quadratic_dual_values() const
ModelStorageCPtr storage() const
const ::operations_research::math_opt::SparseDoubleVectorProto & variable_values() const
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_variable_values()
double objective_value() const
const ::google::protobuf::Map<::int64_t, double > & auxiliary_objective_values() const
::operations_research::math_opt::SolutionStatusProto feasibility_status() const
::operations_research::math_opt::SparseDoubleVectorProto *PROTOBUF_NONNULL mutable_variable_values()
const ::operations_research::math_opt::SparseDoubleVectorProto & variable_values() const
void set_feasibility_status(::operations_research::math_opt::SolutionStatusProto value)
::google::protobuf::Map<::int64_t, double > *PROTOBUF_NONNULL mutable_auxiliary_objective_values()
void set_objective_value(double value)
bool has_primal_solution() const
optional .operations_research.math_opt.PrimalSolutionProto primal_solution = 1;
const ::operations_research::math_opt::BasisProto & basis() const
::operations_research::math_opt::DualSolutionProto *PROTOBUF_NONNULL mutable_dual_solution()
::operations_research::math_opt::PrimalSolutionProto *PROTOBUF_NONNULL mutable_primal_solution()
bool has_dual_solution() const
optional .operations_research.math_opt.DualSolutionProto dual_solution = 2;
bool has_basis() const
optional .operations_research.math_opt.BasisProto basis = 3;
::operations_research::math_opt::BasisProto *PROTOBUF_NONNULL mutable_basis()
const ::operations_research::math_opt::DualSolutionProto & dual_solution() const
const ::operations_research::math_opt::PrimalSolutionProto & primal_solution() const
absl::Status CheckModelStorage(const NullableModelStorageCPtr storage, const ModelStorageCPtr expected_storage)
An object oriented wrapper for quadratic constraints in ModelStorage.
google::protobuf::Map< int64_t, double > AuxiliaryObjectiveValuesToProto(const absl::flat_hash_map< Objective, double > &aux_obj_values)
absl::Nonnull< const ModelStorage * > ModelStorageCPtr
SparseDoubleVectorProto LinearConstraintValuesToProto(const LinearConstraintMap< double > &linear_constraint_values)
Returns the proto equivalent of linear_constraint_values.
absl::StatusOr< LinearConstraintMap< double > > LinearConstraintValuesFromProto(const ModelStorageCPtr model, const SparseDoubleVectorProto &lin_cons_proto)
absl::StatusOr< absl::flat_hash_map< Objective, double > > AuxiliaryObjectiveValuesFromProto(const ModelStorageCPtr model, const google::protobuf::Map< int64_t, double > &aux_obj_proto)
std::optional< typename EnumProto< P >::Cpp > EnumFromProto(P proto_value)
SolutionStatus
Feasibility of a primal or dual solution as claimed by the solver.
@ kUndetermined
Solver does not claim a feasibility status.
@ kFeasible
Solver claims the solution is feasible.
@ kInfeasible
Solver claims the solution is infeasible.
SparseBasisStatusVector VariableBasisToProto(const VariableMap< BasisStatus > &basis_values)
Returns the proto equivalent of basis_values.
absl::StatusOr< LinearConstraintMap< BasisStatus > > LinearConstraintBasisFromProto(const ModelStorageCPtr model, const SparseBasisStatusVector &basis_proto)
absl::StatusOr< absl::flat_hash_map< QuadraticConstraint, double > > QuadraticConstraintValuesFromProto(const ModelStorageCPtr model, const SparseDoubleVectorProto &quad_cons_proto)
SparseBasisStatusVector LinearConstraintBasisToProto(const LinearConstraintMap< BasisStatus > &basis_values)
Returns the proto equivalent of basis_values.
SparseDoubleVectorProto VariableValuesToProto(const VariableMap< double > &variable_values)
Returns the proto equivalent of variable_values.
absl::StatusOr< VariableMap< BasisStatus > > VariableBasisFromProto(const ModelStorageCPtr model, const SparseBasisStatusVector &basis_proto)
SparseDoubleVectorProto QuadraticConstraintValuesToProto(const absl::flat_hash_map< QuadraticConstraint, double > &quadratic_constraint_values)
Returns the proto equivalent of quadratic_constraint_values.
Enum< E >::Proto EnumToProto(std::optional< E > value)
absl::StatusOr< VariableMap< double > > VariableValuesFromProto(const ModelStorageCPtr model, const SparseDoubleVectorProto &vars_proto)
In SWIG mode, we don't want anything besides these top-level includes.
Select next search node to expand Select next item_i to add this new search node to the search Generate a new search node where item_i is not in the knapsack Check validity of this new partial solution(using propagators) - If valid
absl::Status CheckModelStorage(ModelStorageCPtr expected_storage) const
LinearConstraintMap< BasisStatus > constraint_status
VariableMap< BasisStatus > variable_status
std::optional< SolutionStatus > basic_dual_feasibility
static absl::StatusOr< Basis > FromProto(ModelStorageCPtr model, const BasisProto &basis_proto)
DualRayProto Proto() const
Returns the proto equivalent of this.
static absl::StatusOr< DualRay > FromProto(ModelStorageCPtr model, const DualRayProto &dual_ray_proto)
LinearConstraintMap< double > dual_values
VariableMap< double > reduced_costs
LinearConstraintMap< double > dual_values
static absl::StatusOr< DualSolution > FromProto(ModelStorageCPtr model, const DualSolutionProto &dual_solution_proto)
absl::flat_hash_map< QuadraticConstraint, double > quadratic_dual_values
std::optional< double > objective_value
DualSolutionProto Proto() const
Returns the proto equivalent of this.
SolutionStatus feasibility_status
VariableMap< double > reduced_costs
static absl::Span< const E > AllValues()
Returns all possible values of the enum.
static std::optional< absl::string_view > ToOptString(E value)
PrimalRayProto Proto() const
Returns the proto equivalent of this.
VariableMap< double > variable_values
static absl::StatusOr< PrimalRay > FromProto(ModelStorageCPtr model, const PrimalRayProto &primal_ray_proto)
absl::flat_hash_map< Objective, double > auxiliary_objective_values
PrimalSolutionProto Proto() const
Returns the proto equivalent of this.
static absl::StatusOr< PrimalSolution > FromProto(ModelStorageCPtr model, const PrimalSolutionProto &primal_solution_proto)
SolutionStatus feasibility_status
double get_objective_value(Objective objective) const
VariableMap< double > variable_values
std::optional< Basis > basis
std::optional< PrimalSolution > primal_solution
std::optional< DualSolution > dual_solution
SolutionProto Proto() const
Returns the proto equivalent of this.
static absl::StatusOr< Solution > FromProto(ModelStorageCPtr model, const SolutionProto &solution_proto)
#define OR_ASSIGN_OR_RETURN3(lhs, rexpr, error_expression)