Skip to content

Add lp_pdlp.gms regression test for PDLP column reduction and warm starts - #26

Draft
0x17 wants to merge 1 commit into
cuopt-main-syncfrom
lp-pdlp-test
Draft

0x17 wants to merge 1 commit into
cuopt-main-syncfrom
lp-pdlp-test

Conversation

@0x17

@0x17 0x17 commented Oct 14, 2026

Copy link
Copy Markdown
Member
  • Add examples/models/regression_tests/lp_pdlp.gms, split out of Sync cuOpt options with NVIDIA/cuopt main (8eb20bd) #25, on a random 3000×4000 LP
    • o1–o3: PDLP column reduction forced on (pdlp_hyper_reduced_matrix 1), automatic via large_nnz_threshold 0 in concurrent mode, and off; all must reach the same optimum
    • o4–o7: PDLP warm starts with PSLP presolve, Papilo presolve and pdlp_hyper_project_initial_primal 0/1; the warm solve (bratio 0) must need fewer iterations than the cold one (bratio 1)
  • Currently fails on GPU (RTX A1000, CUDA 13, cuOpt nightly 26.10.0a306 / 8eb20bd): every warm solve needs 1500 PDLP iterations vs. 1100 cold
    • the link sets both initial solutions, and cuOpt logs "Mapped the initial solution into the presolved space" (PSLP) or "Skipping LP presolve" (Papilo)
    • but at warm iteration 0 only the primal is used: primal objective and residual match the cold optimum, dual objective is 0 and dual residual equals the cold start's
    • the same happens with presolve 0; a duals-only warm start is bit-identical to a cold start, and negated duals give exactly the same run as correct ones
    • so the initial dual passed via cuOptSetInitialDualSolution has no effect; the assertion itself is valid, since the cold optimum already meets PDLP's 1e-4 tolerances
  • Draft until cuOpt uses the initial dual; o1–o3 and the optimality checks of o4–o7 pass

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.

1 participant