19#include "absl/status/status.h"
20#include "absl/status/statusor.h"
21#include "absl/strings/str_cat.h"
22#include "absl/strings/string_view.h"
23#include "absl/time/time.h"
36absl::Status ValidateEmphasisProtoParameter(
37 const EmphasisProto value,
const absl::string_view field_name) {
40 <<
"Unknown enum value for SolverParameters." << field_name <<
" = "
43 return absl::OkStatus();
51 const absl::Duration time_limit,
53 _ <<
"invalid SolveParameters.time_limit");
54 if (time_limit < absl::ZeroDuration()) {
56 <<
"SolveParameters.time_limit = " << time_limit <<
" < 0";
61 if (parameters.
threads() <= 0) {
62 return absl::InvalidArgumentError(absl::StrCat(
63 "SolveParameters.threads = ", parameters.
threads(),
" <= 0"));
69 return absl::InvalidArgumentError(
70 absl::StrCat(
"SolveParameters.relative_gap_tolerance = ",
77 return absl::InvalidArgumentError(
78 absl::StrCat(
"SolveParameters.absolute_gap_tolerance = ",
84 <<
"SolveParameters.node_limit = " << parameters.
node_limit()
85 <<
" should be nonnegative.";
90 <<
"SolveParameters.solution_limit = " << parameters.
solution_limit()
91 <<
" should be positive.";
96 <<
"SolveParameters.cutoff_limit should be finite (and not NaN) but "
101 return absl::InvalidArgumentError(
102 "SolveParameters.objective_limit was NaN");
105 return absl::InvalidArgumentError(
106 "SolveParameters.best_bound_limit was NaN");
111 <<
"SolveParameters.solution_pool_size must be positive if set, but "
117 <<
"Unknown enum value for SolverParameters.lp_algorithm = "
120#define VALIDATE_EMPHASIS(property) \
122 ValidateEmphasisProtoParameter(parameters.property(), #property))
127#undef VALIDATE_EMPHASIS
128 return absl::OkStatus();
::int32_t threads() const
bool has_solution_limit() const
bool has_absolute_gap_tolerance() const
bool has_node_limit() const
double objective_limit() const
::int32_t solution_pool_size() const
double best_bound_limit() const
::operations_research::math_opt::LPAlgorithmProto lp_algorithm() const
double absolute_gap_tolerance() const
double relative_gap_tolerance() const
::int32_t solution_limit() const
bool has_relative_gap_tolerance() const
::int64_t node_limit() const
const ::google::protobuf::Duration & time_limit() const
bool has_solution_pool_size() const
double cutoff_limit() const
bool EmphasisProto_IsValid(int value)
bool LPAlgorithmProto_IsValid(int value)
absl::Status ValidateSolveParameters(const SolveParametersProto ¶meters)
inline ::absl::StatusOr< absl::Duration > DecodeGoogleApiProto(const google::protobuf::Duration &proto)
StatusBuilder InvalidArgumentErrorBuilder()
#define VALIDATE_EMPHASIS(property)
#define OR_ASSIGN_OR_RETURN3(lhs, rexpr, error_expression)