95 TEST_IN_RANGE(routing_cut_subset_size_for_tight_binary_relation_bound, 0, 32);
108 const int kMaxReasonableParallelism = 10'000;
110 TEST_IN_RANGE(num_search_workers, 0, kMaxReasonableParallelism);
111 TEST_IN_RANGE(shared_tree_num_workers, -1, kMaxReasonableParallelism);
112 TEST_IN_RANGE(interleave_batch_size, 0, kMaxReasonableParallelism);
114 kMaxReasonableParallelism);
116 log2(kMaxReasonableParallelism));
122 TEST_IN_RANGE(solution_pool_size, 1, std::numeric_limits<int32_t>::max());
126 TEST_NOT_NAN(feasibility_jump_var_randomization_probability);
127 TEST_NOT_NAN(feasibility_jump_var_perburbation_range_ratio);
129 TEST_IN_RANGE(feasibility_jump_var_randomization_probability, 0.0, 1.0);
130 TEST_IN_RANGE(feasibility_jump_var_perburbation_range_ratio, 0.0, 1.0);
134 TEST_IN_RANGE(num_violation_ls, 0, kMaxReasonableParallelism);
135 TEST_IN_RANGE(violation_ls_perturbation_period, 1, 1'000'000'000);
136 TEST_IN_RANGE(violation_ls_compound_move_probability, 0.0, 1.0);
158 if (params.enumerate_all_solutions() &&
159 (params.num_search_workers() > 1 || params.num_workers() > 1)) {
160 return "Enumerating all solutions does not work in parallel";
163 if (params.enumerate_all_solutions() &&
164 (!params.subsolvers().empty() || !params.extra_subsolvers().empty() ||
165 !params.ignore_subsolvers().empty())) {
166 return "Enumerating all solutions does not work with custom subsolvers";
169 if (params.num_search_workers() >= 1 && params.num_workers() >= 1) {
170 return "Do not specify both num_search_workers and num_workers";
173 if (params.use_shared_tree_search()) {
174 return "use_shared_tree_search must only be set on workers' parameters";
177 if (params.enumerate_all_solutions() && params.interleave_search()) {
178 return "Enumerating all solutions does not work with interleaved search";
181 for (
const SatParameters& new_subsolver : params.subsolver_params()) {
182 if (new_subsolver.name().empty()) {
183 return "New subsolver parameter defined without a name";
187 if (!params.subsolvers().empty() || !params.extra_subsolvers().empty()) {
189 for (
const std::string& subsolver : params.subsolvers()) {
190 if (subsolver ==
"core_or_no_lp")
continue;
191 if (!strategies.contains(subsolver)) {
192 return absl::StrCat(
"subsolver \'", subsolver,
"\' is not valid");
196 for (
const std::string& subsolver : params.extra_subsolvers()) {
197 if (!strategies.contains(subsolver)) {
198 return absl::StrCat(
"subsolver \'", subsolver,
"\' is not valid");