Repository navigation
Sync cuOpt options with NVIDIA/cuopt main (8eb20bd) - #25
Merged
Merged
Conversation
- Rename concurrent_nnz_cutoff to large_nnz_threshold (cuOpt #2067). The old name was removed upstream without an alias, so option files that set it fail with an unknown option. The threshold now also enables automatic PDLP column reduction where supported; -1 disables both. - Add pdlp_hyper_reduced_matrix (cuOpt #2067): -1 automatic, 0 off, 1 column reduction. - Add pdlp_hyper_project_initial_primal (cuOpt #2089): whether PDLP projects the initial primal solution (the GAMS levels) onto the variable bounds; -1 uses the pdlp_solver_mode preset. - Add regression model lp_pdlp.gms: solves a random LP with column reduction forced on, automatic and off, and checks that PDLP warm starts from levels and marginals with PSLP presolve on (cuOpt #2024 maps the initial solution into the presolved space), with Papilo (cuOpt skips LP presolve) and with both pdlp_hyper_project_initial_primal settings. all_options.gms picks up the new options from optcuopt.def. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ALHyZUW9bDK51TntcQG4cg
Caps Papilo's probing minbadgesize in MIP presolve (-1 derives it from the problem, 0 leaves it uncapped). cuOpt registers it, but it was the last registered option missing from optcuopt.def; with it, the def covers every option of NVIDIA/cuopt main (8eb20bd) except log_file and log_to_console, which the link sets itself, and sequence_solve. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ALHyZUW9bDK51TntcQG4cg
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings the solver link's options up to date with NVIDIA/cuopt
mainat8eb20bd(2026-10-14). The changes were made againsta100ee1; the only later commit, NVIDIA/cuopt#2138, touches cuOpt's own PuLP CI script and has nothing to port here (no header or option changes sincea100ee1).gmscuopt.cpasses every option fromoptcuopt.defto cuOpt by name, so all option changes live inassets/optcuopt.def; no link code changes. With this PR,optcuopt.defcovers every option cuOptmainregisters, exceptlog_fileandlog_to_console(set by the link itself) andsequence_solve(out of scope).Option changes
concurrent_nnz_cutoff→large_nnz_thresholdUnknown option "concurrent_nnz_cutoff". Type, default (50000000), range (-1..maxint) and group are unchanged. The threshold now also enables automatic PDLP column reduction where supported; -1 disables both.pdlp_hyper_reduced_matrixlarge_nnz_threshold), 0 off, 1 column reduction. Unsupported paths such as multi-GPU PDLP are turned off by cuOpt with a log message.pdlp_hyper_project_initial_primalpdlp_solver_modepreset, 0 off, 1 on.mip_hyper_heuristic_papilo_probing_max_badgesizemip_hyper_heuristic_presolve_max_roundsin the MIP group.solver_settings.cuThe two PDLP options sit next to
pdlp_hyper_enable_curtis_reid_scalingin the Linear Programming group. No other references toconcurrent_nnz_cutoffexist in the repo (tests, examples, README).Tests
all_options.gmsbuilds its option file fromoptcuopt.def, so it now sets all four new or renamed options to their defaults.options.gmsis unchanged: it covers options that once made the link abort, on a small MIP, which would not exercise these LP paths.lp_pdlp.gmsregression test (PDLP column reduction and warm starts through presolve) moved to Add lp_pdlp.gms regression test for PDLP column reduction and warm starts #26: its warm-start check fails because cuOpt ignores the initial dual solution.Verification
optcc) reads the newoptcuopt.defwithout errors; all new options parse as integers,concurrent_nnz_cutoffis rejected as unknown, and out-of-range values are rejected.options.gmsandall_options.gmscompile with GAMS 54.5 (action=c).libcuopt-mathopt-cuXX==26.10.*andlibcuopt-client==26.10.*, which currently resolves to nightly 26.10.0a304 (cuOpt1ab479e, after #2024, #2089 and #2067). Its headers andlibcuopt_mathopt.socontain the new option names and no longer containconcurrent_nnz_cutoff;gmscuopt.ccompiles and links against it without warnings.8eb20bd), GAMS 54.5, link built exactly like the x86_64 workflow:gams trnsport lp=cuopt: optimal, 153.675examples/models/regression_tests/run_tests.sh: all 10 models pass, includingoptionsandall_optionswith the new and renamed optionstests/test-gamslib-cuopt.py: 72/73 match the CPLEX baseline;poutilhit its 300 s time limit (gap 2.43%), the usual run-to-run variance on this modelOut of scope
cuOptSetLogCallback,cuOptGetSolutionFloatAttribute,sequence_solve,mip_presolve.🤖 Generated with Claude Code
https://claude.ai/code/session_01ALHyZUW9bDK51TntcQG4cg