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

Add a hyperparameter that controls bounding of free variables#1713
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>
@yuwenchen95yuwenchen95 added this to the 26.10 milestone Aug 13, 2026
@yuwenchen95yuwenchen95 self-assigned this Aug 13, 2026
@yuwenchen95yuwenchen95 added the non-breaking Introduces a non-breaking change label Aug 13, 2026
@yuwenchen95
yuwenchen95 requested a review from a team as a code ownerAugust 13, 2026 12:23
@yuwenchen95yuwenchen95 added the improvement Improves an existing functionality label Aug 13, 2026
@coderabbitai

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 nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring 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 nameStatusExplanation
Title check✅ PassedThe title clearly describes the main change: adding a setting to control free-variable bounding.
Description check✅ PassedThe description accurately explains the new setting, its modes, and the linked issue.
Linked Issues check✅ PassedThe changes implement the requested -1, 0, and 1 modes for controlling barrier presolve free-variable bounding [#1711].
Out of Scope Changes check✅ PassedThe 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-maeschris-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-botBot merged commit 25ea5a4 into NVIDIA:mainAug 14, 2026
99 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

barrierimprovementImproves an existing functionalitynon-breakingIntroduces 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

@yuwenchen95@chris-maes