Correct quadratic-constraint claims in formulation skill#1407
Draft
cafzal wants to merge 1 commit into
Draft
Conversation
The concepts-only formulation skill claimed QP supports only linear
constraints and that quadratic constraints are unsupported. cuOpt does
support convex quadratic constraints (PSD, inequality only), which it
converts to second-order cones and solves with the barrier method;
non-convex or equality quadratic constraints remain unsupported. Fixes
the LP/MILP/QP table Constraints row and the formulation-questions note.
Also adds a boundary to the post-solve sensitivity note: dual values are
not returned when the model includes quadratic constraints, so users do
not expect a dual off a second-order cone constraint.
Verified against python/cuopt/cuopt/tests/socp/test_socp.py (quadratic
constraints solved with SolverMethod.Barrier) and
docs/cuopt/source/cuopt-c/convex/convex-examples.rst ("dual variables
are not currently returned for problems with quadratic constraints").
Phrasing aligned with the sibling cuopt-multi-objective-exploration
skill for consistency.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: cafzal <[email protected]>
cafzal
added a commit
to cafzal/cuopt
that referenced
this pull request
Jun 8, 2026
…vior cpp/src/pdlp/solve.cu (has_quadratic_constraints -> thrust::fill the entire dual_solution + reduced_cost with quiet_NaN) shows a single quadratic constraint suppresses duals for the *whole* solve, not just that constraint's row. Reword "no dual for a quadratic constraint" -> "any quadratic constraint makes cuOpt return no duals for the whole solve" in Step 3 and the QP eval, for consistency with PRs NVIDIA#1407 (formulation) and NVIDIA#1408 (api skills, "NaN-filled"). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Signed-off-by: cafzal <[email protected]>
This was referenced Jun 8, 2026
Draft
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.
Description
Corrects a stale claim in the concepts-only
cuopt-numerical-optimization-formulationskill, which stated QP allows only linear constraints and that quadratic constraints are unsupported. cuOpt in fact supports convex quadratic constraints (Q PSD, inequality only) — converting them to second-order cones and solving with the barrier method — while non-convex or equality quadratic constraints remain unsupported.Three concepts-level edits (no API symbols, no maturity labels): the Constraints row of the LP/MILP/QP table, the constraints formulation question, and the post-solve sensitivity note — the last gaining one line that duals are not returned when the model has quadratic constraints (the second-order cone path returns primal values only), so users don't expect a dual off a cone constraint.
Why. Verified against source —
python/cuopt/cuopt/tests/socp/test_socp.pyadds quadratic constraints solved with the barrier method, anddocs/cuopt/source/cuopt-c/convex/convex-examples.rststates "dual variables are not currently returned for problems with quadratic constraints." Phrasing matches the siblingcuopt-multi-objective-explorationskill, which already states this scope. Follows #1393 (dual/sensitivity per problem type) in the same skill.Validation & gating.
ci/utils/validate_skills.shpasses. NVSkills-Eval — which also regeneratesBENCHMARK.md, the skill card, and the signature — is the gate and is pending:skills/**CI needs a maintainer and cannot be triggered from a fork branch.Follow-up. The api-python / api-c skills scope duals to "LP only" while this skill says "LP/QP," and no test asserts duals for a QP with linear constraints; reconciling that (with a test) is tracked separately.
Checklist
Companion PRs — coordinated follow-ons to #1393, catching the numerical-optimization skills up to cuOpt's 26.06 QP / quadratic-constraint additions:
Shared verified boundary across all three: a QP with linear constraints returns duals (the barrier solver is primal-dual); any quadratic constraint suppresses duals for the whole solve (
cpp/src/pdlp/solve.cuNaN-fills the dual/reduced-cost arrays). MILP has no duals.