97 TEST_IN_RANGE(routing_cut_subset_size_for_tight_binary_relation_bound, 0, 32);
112 const int kMaxReasonableParallelism = 10'000;
114 TEST_IN_RANGE(num_search_workers, 0, kMaxReasonableParallelism);
115 TEST_IN_RANGE(shared_tree_num_workers, -1, kMaxReasonableParallelism);
116 TEST_IN_RANGE(interleave_batch_size, 0, kMaxReasonableParallelism);
118 kMaxReasonableParallelism);
120 log2(kMaxReasonableParallelism));
126 TEST_IN_RANGE(solution_pool_size, 1, std::numeric_limits<int32_t>::max());
130 TEST_NOT_NAN(feasibility_jump_var_randomization_probability);
131 TEST_NOT_NAN(feasibility_jump_var_perburbation_range_ratio);
133 TEST_IN_RANGE(feasibility_jump_var_randomization_probability, 0.0, 1.0);
134 TEST_IN_RANGE(feasibility_jump_var_perburbation_range_ratio, 0.0, 1.0);
138 TEST_IN_RANGE(num_violation_ls, 0, kMaxReasonableParallelism);
139 TEST_IN_RANGE(violation_ls_perturbation_period, 1, 1'000'000'000);
140 TEST_IN_RANGE(violation_ls_compound_move_probability, 0.0, 1.0);
168 return "Enumerating all solutions does not work with custom subsolvers";
172 return "Do not specify both num_search_workers and num_workers";
176 return "use_shared_tree_search must only be set on workers' parameters";
180 return "Enumerating all solutions does not work with interleaved search";
184 if (new_subsolver.name().empty()) {
185 return "New subsolver parameter defined without a name";
191 for (
const std::string& subsolver : params.
subsolvers()) {
192 if (subsolver ==
"core_or_no_lp")
continue;
193 if (!strategies.contains(subsolver)) {
194 return absl::StrCat(
"subsolver \'", subsolver,
"\' is not valid");
199 if (!strategies.contains(subsolver)) {
200 return absl::StrCat(
"subsolver \'", subsolver,
"\' is not valid");