Skip to content

[BUG] Numerical stability issue #376

@rgsl888prabhu

Description

@rgsl888prabhu

from - https://forums.developer.nvidia.com/t/numerical-stability-issues/344048

I am running a small scheduling problem using cuopt. It has got large penalty values and some Big M kind of variables as well. It’s running into the below error. While the same instance is getting solved easily on coin-or CBC and other solvers. Any special care or normalization we need to take care for cuopt?

super().set_constraint_bounds(b)
Setting parameter infeasibility_detection to true
Setting parameter log_to_console to true
Solving a problem with 356 constraints 233 variables (104 integers) and 902 nonzeros
Objective offset 0.000000 scaling_factor 1.000000
After trivial presolve updated 356 constraints 233 variables. Objective offset 0.000000
Running presolve!
Solving LP root relaxation
Scaling matrix. Maximum column norm 1.423784e+00
Dual Simplex Phase 1
Dual feasible solution found.
Dual Simplex Phase 2
Iter Objective Num Inf. Sum Inf. Perturb Time
1 +0.0000000000000000e+00 56 1.25780041e+08 1.00e-07 0.00
Removed perturbation of 1.02e-05.

Root relaxation solution found in 163 iterations and 0.00s
Root relaxation objective +2.71420000e+04

Strong branching using 4 threads and 58 fractional variables
| Explored | Unexplored | Objective | Bound | Depth | Iter/Node | Gap | Time
0 1 +inf +2.714200e+04 1 0.0e+00 - 0.02
Numerical issue node 442. Resolving from scratch.
Numerical issue node 487. Resolving from scratch.
Numerical issue node 509. Resolving from scratch.
Numerical issue node 708. Resolving from scratch.
python: /tmp/conda-bld-output/bld/rattler-build_libmps-parser/work/cpp/src/dual_simplex/basis_solves.cpp:352: i_t cuopt::linear_programming::dual_simplex::factorize_basis(const csc_matrix_t<i_t, f_t>&, const simplex_solver_settings_t<i_t, f_t>&, const std::vector<i_t>&, csc_matrix_t<i_t, f_t>&, csc_matrix_t<i_t, f_t>&, std::vector<i_t>&, std::vector<i_t>&, std::vector<i_t>&, std::vector<i_t>&, std::vector<i_t>&) [with i_t = int; f_t = double]: Assertion `Snz <= Snz_max && (Sdim > 0 && Snz > 0)’ failed.
Aborted

CBC solver:
Probing was tried 250 times and created 1890 cuts of which 0 were active after adding rounds of cuts (0.056 seconds)
Gomory was tried 243 times and created 525 cuts of which 0 were active after adding rounds of cuts (0.029 seconds)
Knapsack was tried 37 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.002 seconds)
Clique was tried 37 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.001 seconds)
MixedIntegerRounding2 was tried 243 times and created 412 cuts of which 0 were active after adding rounds of cuts (0.034 seconds)
FlowCover was tried 37 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.006 seconds)
TwoMirCuts was tried 1 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
ZeroHalf was tried 1 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)

Result - Optimal solution found

Objective value: 31966.00000000
Enumerated nodes: 767
Total iterations: 18177
Time (CPU seconds): 1.96
Time (Wallclock seconds): 1.98

Option for printingOptions changed from normal to all
Total time (CPU seconds): 1.97 (Wallclock seconds): 1.98

Metadata

Metadata

Assignees

Labels

awaiting responseThis expects a response from maintainer or contributor depending on who requested in last comment.bugSomething isn't working

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions