Skip to content

Mark MILP as beta; add QCQP and SOCP to README#1384

Merged
rgsl888prabhu merged 7 commits into
release/26.06from
docs/readme-milp-beta-socp-qcqp
Jun 3, 2026
Merged

Mark MILP as beta; add QCQP and SOCP to README#1384
rgsl888prabhu merged 7 commits into
release/26.06from
docs/readme-milp-beta-socp-qcqp

Conversation

@rgsl888prabhu
Copy link
Copy Markdown
Collaborator

Updates the README Supported APIs and intro to reflect 26.06 capabilities:

  • Mark MILP as (beta) (C, Python, Server).
  • Add QCQP and SOCP as (beta) to the C API and Python sections (matches convex-features.rst).
  • Reword the intro so the GA strengths are LP/QP/VRP, with MILP/QCQP/SOCP as beta (dropped the MILP scale claim for consistency).
  • Server section unchanged apart from the MILP beta label.

🤖 Generated with Claude Code

Update the README Supported APIs and intro to reflect 26.06 capabilities:
mark Mixed Integer Linear Programming (MILP) as beta, and add
Quadratically Constrained Quadratic Programming (QCQP) and Second-Order
Cone Programming (SOCP) as beta to the C API and Python sections. The
intro no longer lists MILP among the GA strengths. Server section is
left unchanged aside from the MILP beta label.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
@copy-pr-bot
Copy link
Copy Markdown

copy-pr-bot Bot commented Jun 3, 2026

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@rgsl888prabhu rgsl888prabhu marked this pull request as ready for review June 3, 2026 16:42
@rgsl888prabhu rgsl888prabhu requested a review from a team as a code owner June 3, 2026 16:42
@rgsl888prabhu rgsl888prabhu requested a review from tmckayus June 3, 2026 16:42
@rgsl888prabhu rgsl888prabhu self-assigned this Jun 3, 2026
@rgsl888prabhu rgsl888prabhu added doc Improvements or additions to documentation non-breaking Introduces a non-breaking change labels Jun 3, 2026
List each numerical optimization feature on its own bullet in the Python
section instead of grouping them on one line, so the (beta) label is
unambiguous per feature (matching the C API section).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jun 3, 2026

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The README and documentation were updated to mark MILP, QCQP, and SOCP as beta-supported and to revise Supported APIs (C, Python, Server) to add QCQP (beta) and SOCP (beta) and mark MILP as (beta) where applicable.

Changes

Product documentation for supported optimization problems

Layer / File(s) Summary
Product description and Supported APIs update
README.md
Introductory description rewritten to emphasize LP/QP/VRP and add beta labels for MILP, QCQP, and SOCP; Supported APIs lists updated across C API, Python, and Server to add QCQP (beta), SOCP (beta), and mark MILP as (beta).
Reference docs: MILP/QCQP/SOCP beta notes
docs/cuopt/source/convex-features.rst, docs/cuopt/source/cuopt-python/mip/index.rst, docs/cuopt/source/introduction.rst
QCQP/SOCP availability note reworded to state beta support via CVXPY; Python MIP docs and MILP section header updated to mark mixed integer linear programming support as beta.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

Suggested reviewers

  • Iroy30
  • tmckayus
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically summarizes the main changes: marking MILP as beta and adding QCQP/SOCP to the README.
Description check ✅ Passed The description is directly related to the changeset, detailing the specific updates made to reflect 26.06 capabilities across multiple documentation files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-milp-beta-socp-qcqp

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: 2

🤖 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 `@README.md`:
- Around line 33-34: The README’s C API support list currently lists QCQP and
SOCP but the canonical API docs only document LP/MILP/QP; update the C API
section to match the canonical source by either removing the QCQP and SOCP
bullets from the C API support list (symbols: "QCQP", "SOCP", "C API support
list") or add a clear qualifier stating these are experimental/new and point
readers to the authoritative .rst-based docs (mention ".rst" as canonical
source) with a short note. Ensure the README text and the C API bullet list (the
two lines mentioning QCQP/SOCP) are synchronized with the upstream .rst
documentation.
- Line 39: Update the README line containing "Linear Programming (LP) and
Quadratic Programming (QP); Mixed Integer Linear Programming (MILP) (beta),
Quadratically Constrained Quadratic Programming (QCQP) (beta), and Second-Order
Cone Programming (SOCP) (beta)" to indicate that QCQP and SOCP Python support is
CVXPY-only; specifically, modify that fragment so QCQP (beta) and SOCP (beta)
are followed by a parenthetical qualifier like "(CVXPY-only)" or similar,
ensuring the sentence still lists LP, QP, MILP (beta) as before and only flags
QCQP and SOCP as limited to CVXPY.
🪄 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: c039c46f-2ef9-415a-83cd-4de5cfeb0282

📥 Commits

Reviewing files that changed from the base of the PR and between 789bad0 and bc39ea7.

📒 Files selected for processing (1)
  • README.md

Comment thread README.md
Comment thread README.md Outdated
- Python support
- Routing (TSP, VRP, and PDP)
- Linear Programming (LP), Mixed Integer Linear Programming (MILP) and Quadratic Programming (QP)
- Linear Programming (LP) and Quadratic Programming (QP); Mixed Integer Linear Programming (MILP) (beta), Quadratically Constrained Quadratic Programming (QCQP) (beta), and Second-Order Cone Programming (SOCP) (beta)
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot Jun 3, 2026

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Python QCQP/SOCP statement needs scope qualifier (CVXPY-only).

This line reads as broad Python API support, but the provided convex-features docs state QCQP/SOCP are currently CVXPY-only. Please qualify that limitation inline to avoid misleading users.

Suggested wording
-    - Linear Programming (LP) and Quadratic Programming (QP); Mixed Integer Linear Programming (MILP) (beta), Quadratically Constrained Quadratic Programming (QCQP) (beta), and Second-Order Cone Programming (SOCP) (beta)
+    - Linear Programming (LP) and Quadratic Programming (QP); Mixed Integer Linear Programming (MILP) (beta), and Quadratically Constrained Quadratic Programming (QCQP) (beta) / Second-Order Cone Programming (SOCP) (beta) via CVXPY
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Linear Programming (LP) and Quadratic Programming (QP); Mixed Integer Linear Programming (MILP) (beta), Quadratically Constrained Quadratic Programming (QCQP) (beta), and Second-Order Cone Programming (SOCP) (beta)
- Linear Programming (LP) and Quadratic Programming (QP); Mixed Integer Linear Programming (MILP) (beta), and Quadratically Constrained Quadratic Programming (QCQP) (beta) / Second-Order Cone Programming (SOCP) (beta) via CVXPY
🤖 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 `@README.md` at line 39, Update the README line containing "Linear Programming
(LP) and Quadratic Programming (QP); Mixed Integer Linear Programming (MILP)
(beta), Quadratically Constrained Quadratic Programming (QCQP) (beta), and
Second-Order Cone Programming (SOCP) (beta)" to indicate that QCQP and SOCP
Python support is CVXPY-only; specifically, modify that fragment so QCQP (beta)
and SOCP (beta) are followed by a parenthetical qualifier like "(CVXPY-only)" or
similar, ensuring the sentence still lists LP, QP, MILP (beta) as before and
only flags QCQP and SOCP as limited to CVXPY.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The "CVXPY-only" note in convex-features.rst is scoped to third-party modeling languages (the AMPL/CVXPY/GAMS/JuMP/PuLP table), not the native Python SDK. The native SDK exposes quadratic constraints directly via data_model.set_quadratic_constraints / get_quadratic_constraints (python/cuopt/cuopt/linear_programming/data_model/data_model.py), so QCQP/SOCP are not CVXPY-only here. Adding a "(CVXPY-only)" qualifier would be inaccurate, so leaving this line as-is.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@rgsl888prabhu, thanks for the clarification — you're right. My review comment was incorrect. The convex-features.rst "CVXPY-only" note is scoped to the third-party modeling language integrations table, not the native Python SDK. Since the SDK directly exposes QCQP/SOCP through set_quadratic_constraints / get_quadratic_constraints, adding a "(CVXPY-only)" qualifier to the README's Python support line would be misleading. The current wording is correct as-is.


✏️ Learnings added
Learnt from: rgsl888prabhu
Repo: NVIDIA/cuopt PR: 1384
File: README.md:0-0
Timestamp: 2026-06-03T18:09:10.018Z
Learning: In NVIDIA/cuopt, QCQP and SOCP support in the Python API is NOT limited to CVXPY. The "CVXPY-only" note in `docs/cuopt/source/convex-features.rst` is scoped solely to the third-party modeling languages table (AMPL/CVXPY/GAMS/JuMP/PuLP). The native Python SDK exposes quadratic constraints directly via `data_model.set_quadratic_constraints` and `get_quadratic_constraints` in `python/cuopt/cuopt/linear_programming/data_model/data_model.py`. Do not add a "(CVXPY-only)" qualifier when documenting Python-level QCQP/SOCP support.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: akifcorduk
Repo: NVIDIA/cuopt PR: 779
File: cpp/include/cuopt/linear_programming/mip/solver_stats.hpp:36-40
Timestamp: 2026-01-28T15:32:54.183Z
Learning: C++ headers under cpp/include/cuopt are internal/intermediate infrastructure, not public-facing. The officially supported public APIs for cuOpt are C (via cuopt_c.h) and Python. Documentation and breaking change requirements apply to those public APIs, not to internal C++ classes.

Learnt from: CR
Repo: NVIDIA/cuopt PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-05-29T00:38:03.302Z
Learning: Modify, build, test, debug, and contribute to cuOpt internals using `skills/cuopt-developer/`, including C++/CUDA, Python, server, and CI work; for VRP dimension work, also read `skills/cuopt-developer/references/vrp_skills.md`

Learnt from: CR
Repo: NVIDIA/cuopt PR: 0
File: .github/.coderabbit_review_guide.md:0-0
Timestamp: 2026-05-29T18:17:08.027Z
Learning: Applies to cpp/include/cuopt/linear_programming/cuopt_c.h : Flag any change to `cpp/include/cuopt/linear_programming/cuopt_c.h` as ABI-sensitive

Learnt from: CR
Repo: NVIDIA/cuopt PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-05-29T00:38:03.302Z
Learning: User-facing skills must be organized under `skills/cuopt-user-rules/` for end users calling cuOpt (routing, LP, MILP, QP, install, server), not under internals directories like `skills/cuopt-developer/`

Learnt from: chris-maes
Repo: NVIDIA/cuopt PR: 500
File: cpp/tests/linear_programming/c_api_tests/c_api_test.c:1033-1048
Timestamp: 2025-12-06T00:22:48.638Z
Learning: In cuOPT's quadratic programming API, when a user provides a quadratic objective matrix Q via set_quadratic_objective_matrix or the C API functions cuOptCreateQuadraticProblem/cuOptCreateQuadraticRangedProblem, the API internally computes Q_symmetric = Q + Q^T and the barrier solver uses 0.5 * x^T * Q_symmetric * x. From the user's perspective, the convention is x^T Q x. For a diagonal Q with values [q1, q2, ...], the resulting quadratic terms are q1*x1^2 + q2*x2^2 + ...

Learnt from: chris-maes
Repo: NVIDIA/cuopt PR: 1247
File: docs/cuopt/source/cuopt-c/lp-qp-milp/lp-qp-milp-c-api.rst:54-58
Timestamp: 2026-05-26T22:55:07.739Z
Learning: For cuOpt (NVIDIA/cuopt), the external docs site is generated directly from the `.rst` files checked into the repository (e.g., `docs/cuopt/source/**/*.rst`). Deprecation notices, migration guidance, and API documentation should be maintained in these in-repo `.rst` files — they are the canonical source for the external docs site.

Learnt from: CR
Repo: NVIDIA/cuopt PR: 0
File: .github/.coderabbit_review_guide.md:0-0
Timestamp: 2026-05-29T18:17:08.027Z
Learning: Applies to cpp/src/**/*.{cpp,cu,hpp,cuh} : Verify optimization algorithm correctness in simplex, branch-and-bound, routing heuristics, diving, and crossover

Learnt from: chris-maes
Repo: NVIDIA/cuopt PR: 1294
File: RELEASE-NOTES.md:21-23
Timestamp: 2026-06-03T00:01:21.272Z
Learning: In the NVIDIA/cuopt repository's `RELEASE-NOTES.md`, release notes from version 26.06 onward intentionally use present tense (imperative mood, e.g., "Replace SpMV calls...", "Reduce memory footprint...") rather than past tense. Do not flag present-tense verb usage in 26.06+ release note entries as a style inconsistency.

Learnt from: chris-maes
Repo: NVIDIA/cuopt PR: 1268
File: cpp/src/dual_simplex/crossover.cpp:1256-1262
Timestamp: 2026-05-21T16:19:54.072Z
Learning: In NVIDIA/cuopt crossover (cpp/src/dual_simplex/crossover.cpp), `add_slacks_to_basis` was refactored in PR `#1268` to O(m) complexity by precomputing a `slack_map` over the last `m` (slack) columns and then doing a single pass over `dependent_rows`. The old O(n * |dependent_rows|) implementation required per-iteration time-limit checks, but the new O(m) implementation does not — do not flag missing time-limit guards inside `add_slacks_to_basis`.

rgsl888prabhu and others added 2 commits June 3, 2026 11:58
Keep the docs consistent with the README: present MILP as beta in the
introduction (intro line, MILP section header, and the MIP Python landing
page), and note that QCQP/SOCP support is in beta in the convex features
page.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
Replace the grouped "beta support for ..." phrasing with an explicit
(beta) marker after each feature (MILP, QCQP, SOCP), matching the
Supported APIs list so the beta scope is unambiguous.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
Comment thread docs/cuopt/source/introduction.rst Outdated
rgsl888prabhu and others added 2 commits June 3, 2026 13:11
Address review feedback: the introduction intro sentence listed only
MILP under beta support; add QCQP and SOCP alongside it for parity with
the README and the convex features docs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
Match the README style: tag MILP, QCQP, and SOCP each with (beta) in the
introduction sentence instead of the grouped "beta support for" phrasing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
Comment thread README.md Outdated
- Algebraic modeling Python API allows users to easily build constraints and objectives
- Linear Programming (LP)
- Quadratic Programming (QP)
- Mixed Integer Linear Programming (MILP) (beta)
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.

I think it's useful to group the continuous problems together LP, QP, QCQP, SOCP and put MILP last since it is in a different category.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Done in 67ed4cb — reordered the Supported APIs lists (C, Python, Server) and both intro sentences so the continuous problems (LP, QP, QCQP, SOCP) are grouped together and MILP is listed last.

Comment thread README.md Outdated
- C API support
- Linear Programming (LP)
- Mixed Integer Linear Programming (MILP)
- Mixed Integer Linear Programming (MILP) (beta)
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.

Same here. I would group all the continuous problems together and then put MILP last

Copy link
Copy Markdown
Contributor

@cwilkinson76 cwilkinson76 left a comment

Choose a reason for hiding this comment

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

LGTM

Address review feedback: order the Supported APIs lists and intros so the
continuous convex problems (LP, QP, QCQP, SOCP) are grouped together and
MILP is listed last, since it is a discrete/different category.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
Copy link
Copy Markdown
Member

@Iroy30 Iroy30 left a comment

Choose a reason for hiding this comment

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

LGTM

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 @rgsl888prabhu

@rgsl888prabhu
Copy link
Copy Markdown
Collaborator Author

/merge

@rgsl888prabhu rgsl888prabhu merged commit 1d08ff4 into release/26.06 Jun 3, 2026
63 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

doc Improvements or additions to documentation non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants