37 for (
const auto parameter : absl::StrSplit(
parameters, absl::ByAnyChar(
",\n"),
38 absl::SkipWhitespace())) {
39 std::vector<std::string> key_value = absl::StrSplit(
40 parameter, absl::ByAnyChar(
"= "), absl::SkipWhitespace());
41 if (key_value.size() != 2) {
42 return absl::InvalidArgumentError(
43 absl::StrFormat(
"Cannot parse parameter '%s'. Expected format is "
44 "'parameter/name = value'",
48 std::string
name = key_value[0];
49 absl::RemoveExtraAsciiWhitespace(&
name);
50 std::string
value = key_value[1];
51 absl::RemoveExtraAsciiWhitespace(&
value);
52 const double infinity = SCIPinfinity(scip);
54 SCIP_PARAM* param = SCIPgetParam(scip,
name.c_str());
55 if (param ==
nullptr) {
56 return absl::InvalidArgumentError(
57 absl::StrFormat(
"Invalid parameter name '%s'",
name));
59 switch (param->paramtype) {
60 case SCIP_PARAMTYPE_BOOL: {
62 if (absl::SimpleAtob(
value, &parsed_value)) {
64 SCIPsetBoolParam(scip,
name.c_str(), parsed_value));
65 VLOG(2) << absl::StrFormat(
"Set parameter %s to %s",
name,
value);
70 case SCIP_PARAMTYPE_INT: {
72 if (absl::SimpleAtoi(
value, &parsed_value)) {
74 SCIPsetIntParam(scip,
name.c_str(), parsed_value));
75 VLOG(2) << absl::StrFormat(
"Set parameter %s to %s",
name,
value);
80 case SCIP_PARAMTYPE_LONGINT: {
82 if (absl::SimpleAtoi(
value, &parsed_value)) {
84 scip,
name.c_str(),
static_cast<SCIP_Longint
>(parsed_value)));
85 VLOG(2) << absl::StrFormat(
"Set parameter %s to %s",
name,
value);
90 case SCIP_PARAMTYPE_REAL: {
92 if (absl::SimpleAtod(
value, &parsed_value)) {
93 if (parsed_value > infinity) parsed_value = infinity;
95 SCIPsetRealParam(scip,
name.c_str(), parsed_value));
96 VLOG(2) << absl::StrFormat(
"Set parameter %s to %s",
name,
value);
101 case SCIP_PARAMTYPE_CHAR: {
102 if (
value.size() == 1) {
104 VLOG(2) << absl::StrFormat(
"Set parameter %s to %s",
name,
value);
109 case SCIP_PARAMTYPE_STRING: {
110 if (
value.front() ==
'"' &&
value.back() ==
'"') {
115 SCIPsetStringParam(scip,
name.c_str(),
value.c_str()));
116 VLOG(2) << absl::StrFormat(
"Set parameter %s to %s",
name,
value);
120 return absl::InvalidArgumentError(
121 absl::StrFormat(
"Invalid parameter value '%s'", parameter));
123 return absl::OkStatus();