[NUMERICAL_ISSUES] Documented 3-variable convex QP returns NumericalError in cuDSS symbolic analysis
@rg20 is already working on this.
Since Sep 14, 2026.
- Dominant language
- Cuda
- Stars
- 1k
- Forks
- 233
- Avg merge
- 4d 4h
- Merged PRs (30d)
- 95
Description
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-cu12wheel 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.0nvidia-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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.