Skip to content

Add new solver setting CUOPT_MIP_PROBING and separate it from presolve#1257

Merged
rapids-bot[bot] merged 2 commits into
NVIDIA:release/26.06from
akifcorduk:probing_option
May 21, 2026
Merged

Add new solver setting CUOPT_MIP_PROBING and separate it from presolve#1257
rapids-bot[bot] merged 2 commits into
NVIDIA:release/26.06from
akifcorduk:probing_option

Conversation

@akifcorduk
Copy link
Copy Markdown
Contributor

@akifcorduk akifcorduk commented May 20, 2026

Add CUOPT_MIP_PROBING setting (default true) to let users disable the probing-cache step of cuOpt's internal MIP presolve without disabling the rest of presolve. Existing CUOPT_PRESOLVE=0 still turns the whole pipeline off, so CUOPT_MIP_PROBING only matters when presolve is otherwise enabled.

@akifcorduk akifcorduk added this to the 26.06 milestone May 20, 2026
@akifcorduk akifcorduk requested review from a team as code owners May 20, 2026 15:23
@akifcorduk akifcorduk requested a review from rgsl888prabhu May 20, 2026 15:23
@akifcorduk akifcorduk added non-breaking Introduces a non-breaking change improvement Improves an existing functionality labels May 20, 2026
@akifcorduk akifcorduk requested review from mlubin and nguidotti May 20, 2026 15:23
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 20, 2026

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a new probing boolean to MIP solver settings (default true) to control the internal probing-cache step during MIP presolve; the change includes constant and struct additions, protobuf mapping, parameter registration, runtime checks to skip probing, and documentation/Python schema updates.

Changes

Probing Parameter Addition

Layer / File(s) Summary
Parameter declaration and type definition
cpp/include/cuopt/linear_programming/constants.h, cpp/include/cuopt/linear_programming/mip/solver_settings.hpp
Adds CUOPT_MIP_PROBING constant and probing boolean field (default true) to MIP solver settings with inline documentation about presolve interaction.
Protobuf message and C++ mapping
cpp/src/grpc/cuopt_remote.proto, cpp/src/grpc/grpc_settings_mapper.cpp
Adds bool probing = 29 to MIPSolverSettings and wires bidirectional mapping in map_mip_settings_to_proto and map_proto_to_mip_settings.
Parameter registration and runtime enforcement
cpp/src/math_optimization/solver_settings.cu, cpp/src/mip_heuristics/diversity/diversity_manager.cu
Registers CUOPT_MIP_PROBING in solver settings (bound to mip_settings.probing, default true) and honors context.settings.probing in run_presolve to skip the probing-cache step when false.
Documentation and Python integration
docs/cuopt/source/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.rst, docs/cuopt/source/lp-qp-milp-settings.rst, python/cuopt_server/cuopt_server/utils/linear_programming/data_definition.py
Adds C API parameter constant doc entry, inserts a "Probing" subsection in settings docs, and exposes optional mip_probing in Python SolverConfig.

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 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
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title accurately describes the main change: adding a new CUOPT_MIP_PROBING solver setting that separates probing control from the presolve setting.
Description check ✅ Passed The pull request description accurately describes the changeset: adding a new CUOPT_MIP_PROBING setting (default true) to let users disable the probing-cache step during MIP presolve while keeping other presolve steps enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cpp/src/grpc/cuopt_remote.proto`:
- Around line 204-205: The plain proto3 bool field `probing` cannot express
presence so older clients default it to false; change the proto declaration for
`probing` to be presence-aware (use proto3 "optional bool probing = 29;" or a
google.protobuf.BoolValue wrapper) and then modify grpc_settings_mapper.cpp to
only assign into `settings.probing` when the field is present by checking
`pb_settings.has_probing()` before doing the assignment (i.e., call
`pb_settings.probing()` only inside the presence check) so older clients
preserve the intended default-true behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: aa68fac5-8885-42e6-86cb-df6679d32bb0

📥 Commits

Reviewing files that changed from the base of the PR and between 785f148 and 0f72a14.

📒 Files selected for processing (9)
  • cpp/include/cuopt/linear_programming/constants.h
  • cpp/include/cuopt/linear_programming/mip/solver_settings.hpp
  • cpp/src/grpc/cuopt_remote.proto
  • cpp/src/grpc/grpc_settings_mapper.cpp
  • cpp/src/math_optimization/solver_settings.cu
  • cpp/src/mip_heuristics/diversity/diversity_manager.cu
  • docs/cuopt/source/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.rst
  • docs/cuopt/source/lp-qp-milp-settings.rst
  • python/cuopt_server/cuopt_server/utils/linear_programming/data_definition.py

Comment thread cpp/src/grpc/cuopt_remote.proto
@rgsl888prabhu rgsl888prabhu changed the base branch from main to release/26.06 May 20, 2026 17:25
Comment thread cpp/include/cuopt/linear_programming/constants.h Outdated
Copy link
Copy Markdown
Contributor

@chris-maes chris-maes left a comment

Choose a reason for hiding this comment

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

CUOPT_PROBING -> CUOPT_MIP_PROBING

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
cpp/src/math_optimization/solver_settings.cu (1)

177-177: ⚡ Quick win

Add an inline description for the new probing parameter.

CUOPT_MIP_PROBING is an algorithm parameter, but this registration omits the description field that your parameter dump/help path uses.

Suggested patch
-    {CUOPT_MIP_PROBING, &mip_settings.probing, true},
+    {CUOPT_MIP_PROBING,
+     &mip_settings.probing,
+     true,
+     "enable probing-cache step in cuOpt internal MIP presolve (ignored when presolve is off)"},
As per coding guidelines, "Flag missing documentation for numerical tolerances and algorithm parameters".
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cpp/src/math_optimization/solver_settings.cu` at line 177, The registration
entry for the new algorithm parameter CUOPT_MIP_PROBING (which references
mip_settings.probing) is missing the human-readable description used by the
parameter dump/help path; update the registration tuple/struct where
CUOPT_MIP_PROBING is added so it includes an appropriate inline description
string (briefly describing what probing does and valid values/default behavior)
alongside the existing name, pointer, and enabled flag so the help/dump output
documents the parameter correctly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@cpp/src/math_optimization/solver_settings.cu`:
- Line 177: The registration entry for the new algorithm parameter
CUOPT_MIP_PROBING (which references mip_settings.probing) is missing the
human-readable description used by the parameter dump/help path; update the
registration tuple/struct where CUOPT_MIP_PROBING is added so it includes an
appropriate inline description string (briefly describing what probing does and
valid values/default behavior) alongside the existing name, pointer, and enabled
flag so the help/dump output documents the parameter correctly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 2844f9f5-8c3e-4cb0-9899-214b920ce69e

📥 Commits

Reviewing files that changed from the base of the PR and between 0f72a14 and 286c235.

📒 Files selected for processing (6)
  • cpp/include/cuopt/linear_programming/constants.h
  • cpp/src/math_optimization/solver_settings.cu
  • cpp/src/mip_heuristics/diversity/diversity_manager.cu
  • docs/cuopt/source/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.rst
  • docs/cuopt/source/lp-qp-milp-settings.rst
  • python/cuopt_server/cuopt_server/utils/linear_programming/data_definition.py

Copy link
Copy Markdown
Contributor

@chris-maes chris-maes left a comment

Choose a reason for hiding this comment

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

LGTM. Thanks for adding this setting @akifcorduk

@chris-maes chris-maes changed the title Add new solver setting CUOPT_PROBING and separate it from presolve Add new solver setting CUOPT_MIP_PROBING and separate it from presolve May 21, 2026
@anandhkb anandhkb added the P0 label May 21, 2026
Copy link
Copy Markdown
Collaborator

@rgsl888prabhu rgsl888prabhu left a comment

Choose a reason for hiding this comment

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

Approving all other changes, not completely sure about GRPC part, but mostly looks good.

@rg20
Copy link
Copy Markdown
Contributor

rg20 commented May 21, 2026

/merge

@rapids-bot rapids-bot Bot merged commit 1991042 into NVIDIA:release/26.06 May 21, 2026
98 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request May 21, 2026
rgsl888prabhu added a commit to tmckayus/cuopt that referenced this pull request May 21, 2026
Conflicts resolved:
- build.sh: keep 'codegen' build target (PR), drop libmps_parser/cuopt_mps_parser
  build blocks (removed on release/26.06).
- cpp/src/grpc/cuopt_remote.proto: keep PR's slimmed-down service-only file
  that imports cuopt_remote_data.proto.
- cpp/src/grpc/grpc_settings_mapper.cpp: keep PR's generated #include version.

To preserve the new 'bool probing' MIP setting introduced on release/26.06
(NVIDIA#1257), it was added to the codegen registry. Because the PR had already
claimed proto field 29 for mip_batch_pdlp_reliability_branching, that field
was renumbered to 32 and probing now occupies field 29 (matching the wire
layout already shipped on release/26.06). Generated .inc files and
cuopt_remote_data.proto were re-generated from field_registry.yaml.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants