Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

crossover.jl inspired by PDHG

This repository contains experimental code of a randomized crossover approach for the linear programming (LP) in the general form

$$ \begin{aligned} \min\ & c^\top x \\ \text{s.t.}\ & lhs \leq Ax \leq rhs \\ & lb \leq x \leq ub. \end{aligned} $$

Setup

A one-time step is required to set up the necessary packages on the local machine:

julia --project -e 'import Pkg; Pkg.instantiate()'

We use cuPDLP-C (LpMethod=6) in COPT to obtain the initial optimal solution for crossover, and to solve auxiliary LPs in our crossover. Please apply for a free academic license via the hyperlink for reproducing the experiments.

Test

Test scripts are located in test/.

  • test_general.jl for a single LP instance.
  • test_general_netlib.jl for testing all the NETLIB LP instances.

Remember to change the path/netlib_path (and save_path) in the test scripts to load LPs in .mps format (and to save the results).

Parameters

namedefaultdescription
max_time600Time limit for crossover.
tol_bound1e-8Tolerance to bound for non-basis identification.
tol_cross1e-8Relative tolerance for optimality after crossover.
tol_recover1e-1Tolerance to recover feasibility during crossover.
tol_pdlp1e-8Optimality tolerance of auxiliary LPs.
tol_feas1e-8Feasibility tolerance of auxiliary LPs.
epsilon_zero1e-8Tolerance to zero.
verbosetrueWhether to log.
verbose_level1Level to log.
seed-1Random seed. -1 means not set.
primal_push_methodP_OLSPrimal push method.
dual_push_methodD_OLSDual push method.
ols_methodOLS_QROLS method.
nrm_typeL_2Norm type used to calculate the optimality.
pdlp_presolvetrueWhether to presolve in auxiliary LPs.
tol_ols1e-16Tolerance in iterative OLS solver.
lp_method6LP method for auxiliary LPs. 6 is PDLP; 2 is IPM.
max_iter_ols1e8Iteration limit in iterative OLS solver.
primal_push_generaltrueWhether to use primal auxiliary LPs in the general form.
dual_push_generaltrueWhether to use dual auxiliary LPs in the general form.
push_generaltrueWhether to use auxiliary LPs in the general form.
delta1.0Weight of perturbation.
rhs_shift0.0Right-hand-side shift.
gamma1.0Ratio of primal variable to dual slack for non-basis identification.
feas_recoverfalseFeasibility recovery heuristic.

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages