NVIDIA / NVIDIA/cuopt

[BUG] Simplex appears to return status `Optimal` despite violating requested tolerances

Open
#1,046 2 comments 0 reactions 1 assignee View on GitHub

@chris-maes is already working on this.

Since Apr 8, 2026.

bug
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-10
  • Dual 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

  1. Unzip the attached file. It is double-compressed to meet GitHub requirements.
  2. Run cuopt_cli big_lp_obf.mps with the following tolerances set to 1e-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

big_lp_obf.log

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.