tweak search in fz and opb competition mode

This commit is contained in:
Laurent Perron
2025-04-19 08:11:01 +02:00
parent bade22ee5d
commit c270926a18
3 changed files with 11 additions and 1 deletions

View File

@@ -47,6 +47,8 @@
ABSL_FLAG(int64_t, fz_int_max, int64_t{1} << 40,
"Default max value for unbounded integer variables.");
ABSL_FLAG(bool, force_interleave_search, false,
"If true, enable interleaved workers when num_workers is 1.");
namespace operations_research {
namespace sat {
@@ -1683,7 +1685,8 @@ void SolveFzWithCpModelProto(const fz::Model& fz_model,
m.parameters.set_keep_all_feasible_solutions_in_presolve(true);
} else if (num_workers == 1 && p.use_free_search) { // Free search.
m.parameters.set_search_branching(SatParameters::AUTOMATIC_SEARCH);
if (!p.search_all_solutions && p.ortools_mode) {
if (!p.search_all_solutions &&
(absl::GetFlag(FLAGS_force_interleave_search) || p.ortools_mode)) {
m.parameters.set_interleave_search(true);
m.parameters.set_use_rins_lns(false);
m.parameters.add_subsolvers("default_lp");

View File

@@ -28,6 +28,7 @@
#include "absl/flags/flag.h"
#include "absl/log/check.h"
#include "absl/log/initialize.h"
#include "absl/log/log.h"
#include "absl/strings/match.h"

View File

@@ -222,6 +222,12 @@ bool LoadProblem(const std::string& filename, absl::string_view hint_file,
if (absl::GetFlag(FLAGS_force_interleave_search)) {
SetInterleavedWorkers(parameters);
}
if (parameters->num_workers() >= 2 && parameters->num_workers() <= 15) {
// Works better without symmetries in search
// TODO(user): Investigate.
parameters->add_ignore_subsolvers("max_lp_sym");
parameters->add_extra_subsolvers("max_lp");
}
} else if (absl::EndsWith(filename, ".cnf") ||
absl::EndsWith(filename, ".cnf.xz") ||
absl::EndsWith(filename, ".cnf.gz") ||