Add lp.gomory_cut_orthogonality (default false), lp.gomory_recent_cuts
(default 5) and lp.gomory_parallelism_threshold (default 0.9). When efficacy
selection (select or augment) is active and orthogonality is enabled, a
non-priority candidate cut is skipped when its parallelism
|a.b|/(||a|| ||b||) with an already-selected cut this round, or with one of the
last gomory_recent_cuts cuts added in previous rounds (kept in
int_solver::m_recent_cuts), exceeds gomory_parallelism_threshold. Adds
lar_term::find_coeff and gomory::cut_parallelism.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add lp.gomory_efficacy_select (default false) and lp.gomory_candidate_rows
(default 3). When enabled, Gomory cut rows are no longer chosen by how close
the basic variable is to an integer. Instead, gomory_candidate_rows
integer-infeasible GMI-clean rows are sampled uniformly at random, a cut is
built for each, and the most efficacious cuts whose efficacy
(k - t(x*))/||t||_2 is at least gomory_cut_efficacy_threshold are added (up to
num_cuts of them, best first).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add lp.gomory_cut_efficacy_filter (default false) and
lp.gomory_cut_efficacy_threshold (default 0.01). When enabled, a
generated Gomory cut t >= k is discarded if its efficacy
(k - t(x*))/||t||_2, the normalized distance from the LP solution to the
cut hyperplane, is below the threshold. Comparison is done on squared
quantities to stay rational and deterministic.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>