Skip to content

crossover:v0; first simple version for feedback#56

Draft
charles-vzf wants to merge 2 commits into
JuliaDecisionFocusedLearning:mainfrom
charles-vzf:crossover-13
Draft

crossover:v0; first simple version for feedback#56
charles-vzf wants to merge 2 commits into
JuliaDecisionFocusedLearning:mainfrom
charles-vzf:crossover-13

Conversation

@charles-vzf

@charles-vzf charles-vzf commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Add V1 post-solve crossover (threshold snap + implied bounds) Refs #13

Post-OPTIMAL crossover for PDLP: snap primal coordinates near finite box bounds, tighten implied bounds from equality rows, rollback if KKT residuals regress. Controlled by CrossoverParameters on Algorithm (enabled by default).

V1 is not a basic-vertex crossover (unlike cuOpt): it helps near-bound / implied-bound cases (e.g. toy_lp) but is usually a no-op when variables stay strictly interior. Lightweight first step toward MIP-ready solutions.

Also realized a small bench compared to cuopt:
speed_comparison
I am planning a more advanced version cuopt-like after feedbacks

@codecov

codecov Bot commented Jun 7, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.76923% with 12 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/components/termination.jl 0.00% 6 Missing ⚠️
src/components/crossover.jl 94.73% 5 Missing ⚠️
src/algorithms/common.jl 96.55% 1 Missing ⚠️
Files with missing lines Coverage Δ
src/CoolPDLP.jl 100.00% <ø> (ø)
src/algorithms/common.jl 96.10% <96.55%> (+2.22%) ⬆️
src/components/crossover.jl 94.73% <94.73%> (ø)
src/components/termination.jl 52.00% <0.00%> (-13.00%) ⬇️

... and 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@gdalle gdalle marked this pull request as draft June 8, 2026 08:40
@gdalle gdalle self-requested a review June 8, 2026 08:40
After OPTIMAL termination, optionally snap primal coordinates near finite
box bounds, tighten implied bounds from equality rows, and roll back if KKT
errors regress. Controlled by CrossoverParameters on Algorithm (on by default).

Effective bounds run on CPU once per solve and copy back to device. Not a
basic-vertex crossover (unlike cuOpt): useful when PDLP stops near bounds,
usually a no-op for strictly interior solutions.

Refs JuliaDecisionFocusedLearning#13
Enum values are not separate doc bindings; use inline code instead of @ref.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants