97 TEST_IN_RANGE(routing_cut_subset_size_for_tight_binary_relation_bound, 0, 32);
111 const int kMaxReasonableParallelism = 10'000;
113 TEST_IN_RANGE(num_search_workers, 0, kMaxReasonableParallelism);
114 TEST_IN_RANGE(shared_tree_num_workers, -1, kMaxReasonableParallelism);
115 TEST_IN_RANGE(interleave_batch_size, 0, kMaxReasonableParallelism);
117 kMaxReasonableParallelism);
119 log2(kMaxReasonableParallelism));
125 TEST_IN_RANGE(solution_pool_size, 1, std::numeric_limits<int32_t>::max());
129 TEST_NOT_NAN(feasibility_jump_var_randomization_probability);
130 TEST_NOT_NAN(feasibility_jump_var_perburbation_range_ratio);
132 TEST_IN_RANGE(feasibility_jump_var_randomization_probability, 0.0, 1.0);
133 TEST_IN_RANGE(feasibility_jump_var_perburbation_range_ratio, 0.0, 1.0);
137 TEST_IN_RANGE(num_violation_ls, 0, kMaxReasonableParallelism);
138 TEST_IN_RANGE(violation_ls_perturbation_period, 1, 1'000'000'000);
139 TEST_IN_RANGE(violation_ls_compound_move_probability, 0.0, 1.0);
164 return "Enumerating all solutions does not work in parallel";
170 return "Enumerating all solutions does not work with custom subsolvers";
174 return "Do not specify both num_search_workers and num_workers";
178 return "use_shared_tree_search must only be set on workers' parameters";
182 return "Enumerating all solutions does not work with interleaved search";
186 if (new_subsolver.name().empty()) {
187 return "New subsolver parameter defined without a name";
193 for (
const std::string& subsolver : params.
subsolvers()) {
194 if (subsolver ==
"core_or_no_lp")
continue;
195 if (!strategies.contains(subsolver)) {
196 return absl::StrCat(
"subsolver \'", subsolver,
"\' is not valid");
201 if (!strategies.contains(subsolver)) {
202 return absl::StrCat(
"subsolver \'", subsolver,
"\' is not valid");