[BUG] Simplex appears to return status `Optimal` despite violating requested tolerances
@chris-maes is already working on this.
Since Apr 8, 2026.
- Dominant language
- Cuda
- Stars
- 1k
- Forks
- 233
- Avg merge
- 4d 4h
- Merged PRs (30d)
- 95
Description
Describe the bug
For one big LP model, cuOpt returns Status: Optimal even though the final reported residuals appear inconsistent with the user-specified tolerances.
In this run, I set all main primal / dual / gap tolerances, as well as infeasibility tolerances, to 1e-12. However, the final log reports:
Primal residual (abs/rel): 2.88e-01 / 6.29e-10Dual residual (abs/rel): 9.02e-08 / 4.59e-16
So it is unclear whether I am misunderstanding how these tolerances are enforced, or whether cuOpt is incorrectly reporting optimal termination on this LP instance.
Steps/Code to reproduce bug
- Unzip the attached file. It is double-compressed to meet GitHub requirements.
- Run
cuopt_cli big_lp_obf.mpswith the following tolerances set to1e-12:--absolute_primal_tolerance--absolute_dual_tolerance--absolute_gap_tolerance--relative_primal_tolerance--relative_dual_tolerance--relative_gap_tolerance--primal_infeasible_tolerance--dual_infeasible_tolerance
Expected behavior
I would expect one of the following:
- cuOpt returns a solution whose reported residuals satisfy the requested tolerances, or
- cuOpt reports that the requested tolerances could not be met, instead of returning
Status: Optimal.
Environment
- cuOpt version: 26.2.0
- git hash: f73da24d
- CUDA version: 12.9
- GPU: NVIDIA H200
- CPU: Intel(R) Xeon(R) Platinum 8480+
- RAM: 427.29 GiB
Problem summary
- LP instance
- 424118 constraints
- 1367797 variables
- 4512958 nonzeros
Coefficient ranges reported by cuOpt:
- Objective coefficients: [1e-03, 8e+05]
- Constraint matrix coefficients: [1e-18, 8e+05]
- RHS / bounds: [5e-12, 3e+07]
- Variable bounds: [4e-15, 4e+07]
Additional context
This is the same large LP instance as in the #1045
I understand that the model has serious numerical issues. However, since it is handled by other solvers, I believe this is a solver termination-criteria issue rather than just a model-quality issue.
Attachments
- Full solver log
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.