Skip to content

[NUMERICAL_ISSUES] Documented 3-variable convex QP returns NumericalError in cuDSS symbolic analysis #1861

Description

@cafzal

Describe the numerical issue

The documented three-variable continuous convex portfolio QP returns NumericalError on a pip/uv-installed cuOpt 26.2.0 environment. The runtime prints a cuDSS CSR creation failure during symbolic analysis and all variable values remain zero.

This is the same model shape shown in the maintained QP example: a PSD quadratic objective, three bounded continuous variables, one budget equality, and one minimum-return inequality.

Steps / minimal reproduction

from cuopt.linear_programming.problem import CONTINUOUS, MINIMIZE, Problem
from cuopt.linear_programming.solver_settings import SolverSettings

problem = Problem("documented_portfolio_qp")
x = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_a")
y = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_b")
z = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_c")

problem.setObjective(
    0.04*x*x + 0.02*y*y + 0.01*z*z
    + 0.02*x*y + 0.01*x*z + 0.016*y*z,
    sense=MINIMIZE,
)
problem.addConstraint(x + y + z == 1, name="budget")
problem.addConstraint(0.12*x + 0.08*y + 0.05*z >= 0.08, name="min_return")

settings = SolverSettings()
settings.set_parameter("time_limit", 60)
problem.solve(settings)
print(problem.Status.name, x.getValue(), y.getValue(), z.getValue())

Observed output:

FAILED: CUDSS call ended unsuccessfully with status = 3, details: "cudssMatrixCreateCsr"
Error in symbolic analysis
Barrier Solve status A numerical error was encountered.
NumericalError 0.0 0.0 0.0

Expected vs actual behavior

Expected: the feasible convex QP returns Optimal or another documented usable primal status with nonzero weights satisfying the constraints.

Actual: NumericalError; cuDSS CSR creation fails during symbolic analysis; values remain all zero. Status gating is essential because the zero vector is not a feasible solution.

Environment details

  • Environment location: bare-metal remote Linux GPU host
  • Install: cuopt-cu12 wheel installed with uv
  • OS: Ubuntu 22.04, Linux 5.15
  • Python: 3.12.14
  • GPU: NVIDIA A100-PCIE-40GB
  • Driver: 580.173.02
  • CUDA bindings: 12.9.7
  • cuopt-cu12: 26.2.0
  • nvidia-cudss-cu12: 0.8.0.10
  • NumPy: 2.2.6

Additional context

The same runtime solves LP and MILP examples successfully. This blocks a continuous-QP subproblem in an otherwise supported active-set decomposition. A useful resolution would include a supported cuOpt/cuDSS package matrix and this documented QP as an installation smoke test.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

awaiting responseThis expects a response from maintainer or contributor depending on who requested in last comment.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions