Skip to content

Add a hyperparameter that controls bounding of free variables - #1713

Merged
rapids-bot[bot] merged 1 commit into
NVIDIA:mainfrom
yuwenchen95:disable-presolve-free-var
Aug 14, 2026
Merged

rapids-bot[bot] merged 1 commit into
NVIDIA:mainfrom
yuwenchen95:disable-presolve-free-var

Conversation

@yuwenchen95

Copy link
Copy Markdown
Contributor

Description

Adds a new solver setting, barrier_presolve_bound_free_variables
(CUOPT_BARRIER_PRESOLVE_BOUND_FREE_VARIABLES), that controls whether barrier
presolve bounds free variables (-1 automatic/current default behavior,
0 disabled, 1 enabled).

Issue

Closes #1711

Signed-off-by: yuwenchen95 <yuwchen@nvidia.com>
@yuwenchen95 yuwenchen95 added this to the 26.10 milestone Aug 13, 2026
@yuwenchen95 yuwenchen95 self-assigned this Aug 13, 2026
@yuwenchen95 yuwenchen95 added the non-breaking Introduces a non-breaking change label Aug 13, 2026
@yuwenchen95
yuwenchen95 requested a review from a team as a code owner August 13, 2026 12:23
@yuwenchen95 yuwenchen95 added the improvement Improves an existing functionality label Aug 13, 2026
@yuwenchen95
yuwenchen95 requested a review from mlubin August 13, 2026 12:23
@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: fb589ebd-f9cc-4fd6-a3d7-1d98e3b60f70

📥 Commits

Reviewing files that changed from the base of the PR and between 6a5dcbf and c20a4bc.

📒 Files selected for processing (7)
  • cpp/include/cuopt/mathematical_optimization/constants.h
  • cpp/include/cuopt/mathematical_optimization/pdlp/solver_settings.hpp
  • cpp/src/dual_simplex/presolve.cpp
  • cpp/src/dual_simplex/simplex_solver_settings.hpp
  • cpp/src/math_optimization/solver_settings.cu
  • cpp/src/pdlp/solve.cu
  • cpp/tests/linear_programming/unit_tests/solver_settings_test.cu

📝 Walkthrough

Walkthrough

Adds a configurable barrier_presolve_bound_free_variables setting with automatic, disabled, and enabled modes. Propagates the setting to barrier presolve, gates free-variable bound inference, and tests its values.

Changes

Barrier presolve control

Layer / File(s) Summary
Setting contract and registration
cpp/include/cuopt/mathematical_optimization/constants.h, cpp/include/cuopt/mathematical_optimization/pdlp/solver_settings.hpp, cpp/src/dual_simplex/simplex_solver_settings.hpp, cpp/src/math_optimization/solver_settings.cu
Defines and registers barrier_presolve_bound_free_variables. The setting defaults to -1, with 0 disabling and 1 enabling the behavior.
Barrier propagation and presolve behavior
cpp/src/pdlp/solve.cu, cpp/src/dual_simplex/presolve.cpp
Forwards the setting to barrier solver options. Free-variable bound inference now requires a nonzero setting and free variables.
Setting value validation
cpp/tests/linear_programming/unit_tests/solver_settings_test.cu
Tests the default, disabled, and enabled assignments.

Estimated code review effort: 2 (Simple) | ~10 minutes

Mergeability Score: 🔵 Low · up to c20a4

The new solver setting is localized, but adding it to the public settings structure may affect C++ compatibility and requires the documented modes and default behavior to be confirmed. The PR is mergeable with explicit owner awareness or follow-up on that bounded API concern.

Suggested reviewers: ramakrishnap-nv, chris-maes, rg20

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: adding a setting to control free-variable bounding.
Description check ✅ Passed The description accurately explains the new setting, its modes, and the linked issue.
Linked Issues check ✅ Passed The changes implement the requested -1, 0, and 1 modes for controlling barrier presolve free-variable bounding [#1711].
Out of Scope Changes check ✅ Passed The changes remain within scope and include only the new setting, its propagation, behavior, formatting, and tests.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

CI Test Summary

✅ All 31 test job(s) passed.

@chris-maes chris-maes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks!

@chris-maes

Copy link
Copy Markdown
Contributor

/merge

@rapids-bot
rapids-bot Bot merged commit 25ea5a4 into NVIDIA:main Aug 14, 2026
99 checks passed
@yuwenchen95
yuwenchen95 deleted the disable-presolve-free-var branch September 10, 2026 07:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

barrier improvement Improves an existing functionality non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] There is no setting to disable bounding free variables in barrier presolve

2 participants