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"
26 #include "ortools/math_opt/parameters.pb.h"
36 absl::Status ValidateEmphasisProtoParameter(
37 const EmphasisProto
value,
const absl::string_view field_name) {
38 if (!EmphasisProto_IsValid(
value)) {
40 <<
"Unknown enum value for SolverParameters." << field_name <<
" = "
43 return absl::OkStatus();
53 _ <<
"invalid SolveParameters.time_limit");
56 <<
"SolveParameters.time_limit = " <<
time_limit <<
" < 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.";
94 if (!std::isfinite(
parameters.cutoff_limit())) {
96 <<
"SolveParameters.cutoff_limit should be finite (and not NaN) but "
100 if (std::isnan(
parameters.objective_limit())) {
101 return absl::InvalidArgumentError(
102 "SolveParameters.objective_limit was NaN");
104 if (std::isnan(
parameters.best_bound_limit())) {
105 return absl::InvalidArgumentError(
106 "SolveParameters.best_bound_limit was NaN");
111 <<
"SolveParameters.solution_pool_size must be positive if set, but "
115 if (!LPAlgorithmProto_IsValid(
parameters.lp_algorithm())) {
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();
ModelSharedTimeLimit * time_limit
absl::Status ValidateSolveParameters(const SolveParametersProto ¶meters)
Collection of objects used to extend the Constraint Solver library.
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)