NVIDIA / NVIDIA/cuopt

[BUG] Papilo assertion failure on `INCUMBENT_CALLBACK_TEST`

Open
#1,771 0 comments 0 reactions 1 assignee View on GitHub

@nguidotti is already working on this.

Since Aug 24, 2026.

bug
Dominant language
Cuda
Stars
1k
Forks
233
Avg merge
4d 4h
Merged PRs (30d)
95

Description

Papilo crashes on INCUMBENT_CALLBACK_TEST for mip/neos5-free-bound.mps (sub-MIP). See https://github.com/NVIDIA/cuopt/actions/runs/32717753591/job/97412648661?pr=1700

Running: mip/neos5-free-bound.mps
cuOpt version: 26.10.0, git hash: 83c72a7e, host arch: x86_64, device archs: 75-real,80-real,86-real,90a-real,100f-real,120a-real,120
CPU: AMD EPYC 9554 64-Core Processor, threads (physical/logical): 12/12, RAM (available/total): 55.04 / 58.45 GiB
CUDA 13.3, device: NVIDIA L4 (ID 0), VRAM: 22.04 GiB
CUDA device UUID: 81e56c94-f782-312b-db8b-9b23d59a7007
Solving a problem with 63 constraints, 63 variables (53 integers), and 2016 nonzeros
Problem scaling:
Objective coefficents range:          [1e+00, 1e+00]
Constraint matrix coefficients range: [1e+00, 1e+00]
Constraint rhs / bounds range:        [0e+00, 8e+00]
Variable bounds range:                [0e+00, 1e+00]

MIP row scaling completed
Presolve is disabled because set_solution callbacks are provided.
Presolve is disabled, skipping
Objective offset 0.000000 scaling_factor 1.000000
Model fingerprint: 0x6bc604bd
Free variable found! Make sure the correct bounds are given.

Running cuOpt presolve
After cuOpt presolve: 63 constraints, 65 variables, objective offset 0.000000.
cuOpt presolve time: 0.06

Running symmetry detection...
Graph construction time 0.000081
Automorphism group size 2*10^0, 1 dejavu generators (1 move variables)
Dejavu time 0.000240
Projected 1 generators onto 65 binary variables (0 skipped non-binary), 1 stored
Binary orbits: 16 non-trivial, max size 2, 32/65 (49.2%) binary variables in orbits
Orbit histogram (size: count):
 2:16


Total symmetry detection time 0.000453

Probing implied bounds: 0 zero entries, 0 one entries
Computing variable bounds...
440 variable upper bounds in 0.00s
2088 variable lower bounds in 0.00s


Solving LP root relaxation in concurrent mode
Skipping column scaling
Dual Simplex Phase 1
 Iter     Objective           Num Inf.  Sum Inf.     Perturb  Time
    1 +0.0000000000000000e+00      17 1.70000000e+01 0.00e+00 0.10
Dual phase I complete. Iterations 2. Time 0.10
Dual feasible solution found.
Dual Simplex Phase 2
Found 16 singleton rows for steepest edge norms in 0.00s
 Iter     Objective           Num Inf.  Sum Inf.     Perturb  Time
    2 +4.0000000000000000e+00      62 1.20000000e+03 0.00e+00 0.11
    3 +4.0000000000000000e+00      46 2.40300000e+03 0.00e+00 0.11
Removed perturbation of 4.55e-06.


Root relaxation solution found in 86 iterations and 0.02s by Dual Simplex
Root relaxation objective +1.30000000e+01

 |  Explored  | Unexplored |     Objective     |     Bound     | IntInf | Depth | Iter/Node |    Gap    |  Time  |
             0            0        +inf          +1.304167e+01        37       0   9.3e+01        -          0.13
H                              +3.525000e+01     +1.304167e+01                                  63.0%        0.14
H                              +3.400000e+01     +1.304167e+01                                  61.6%        0.15
             0            0    +3.400000e+01     +1.308333e+01        36       0   9.6e+01      61.5%        0.16
H                              +2.600000e+01     +1.308333e+01                                  49.7%        0.16
H                              +1.900000e+01     +1.308333e+01                                  31.1%        0.16
             0            0    +1.900000e+01     +1.311111e+01        38       0   1.1e+02      31.0%        0.17
H                              +1.800000e+01     +1.311111e+01                                  27.2%        0.19
             0            0    +1.800000e+01     +1.315000e+01        38       0   1.1e+02      26.9%        0.19
             0            0    +1.800000e+01     +1.316667e+01        37       0   1.2e+02      26.9%        0.21
             0            0    +1.800000e+01     +1.320833e+01        36       0   1.2e+02      26.6%        0.22
             0            0    +1.800000e+01     +1.322917e+01        36       0   1.3e+02      26.5%        0.23
             0            0    +1.800000e+01     +1.325000e+01        37       0   1.4e+02      26.4%        0.25
             0            0    +1.800000e+01     +1.329167e+01        37       0   1.5e+02      26.2%        0.27
             0            0    +1.800000e+01     +1.329167e+01        37       0   1.6e+02      26.2%        0.28
Gomory         cuts : 0
MIR            cuts : 7
Knapsack       cuts : 0
Strong CG      cuts : 0
Clique         cuts : 0
Implied Bounds cuts : 0
Zero-Half      cuts : 3
Flow Cover     cuts : 0
Root cut passes time: 0.17 seconds
Cut pool size  : 239
Size with cuts : 71 constraints, 136 variables, 2548 nonzeros
H                              +1.700000e+01     +1.329167e+01                                  21.8%        0.51
H                              +1.600000e+01     +1.329167e+01                                  16.9%        0.53
Strong branching: 37 fractional variables reduced to 27 by symmetry
Strong branching using 11 threads and 27 fractional variables
Strong branching completed in 0.10s
Exploring the B&B tree using 11 threads

 |  Explored  | Unexplored |     Objective     |     Bound     | IntInf | Depth | Iter/Node |    Gap    |  Time  |
          2000         1956    +1.600000e+01     +1.329167e+01         2    1796   1.9e+00      16.9%        1.67
          6317         6273    +1.600000e+01     +1.329167e+01         2    6113   1.3e+00      16.9%        2.68
         10642        10598    +1.600000e+01     +1.329167e+01         2   10438   1.2e+00      16.9%        3.68
H                              +1.599970e+01     +1.329167e+01                                  16.9%        4.47
D        14154        14105    +1.550000e+01     +1.346875e+01         0      43   1.2e+00      13.1%        4.48
         15397        15128    +1.550000e+01     +1.375000e+01         9      23   1.8e+00      11.3%        4.68
D        19927        19186    +1.550000e+01     +1.375000e+01         0      40   2.4e+00      11.3%        5.13
D        19941        19190    +1.500000e+01     +1.375000e+01         0      41   2.5e+00       8.3%        5.13
INCUMBENT_CALLBACK_TEST: /tmp/conda-bld-output/bld/rattler-build_libcuopt/work/cpp/build/_deps/papilo-src/src/papilo/core/postsolve/Postsolve.hpp:1144: void papilo::Postsolve<REAL>::apply_parallel_col_to_original_solution(papilo::Solution<REAL>&, papilo::Vec<int>&, papilo::Vec<REAL>&, int, int, papilo::BoundStorage<REAL>&) const [with REAL = double; papilo::Vec<int> = std::vector<int, std::allocator<int> >; papilo::Vec<REAL> = std::vector<double>]: Assertion `col2boundFlags & IS_INTEGRAL' failed.
./ci/run_ctests.sh: line 86:  3288 Aborted                 (core dumped) "${gt}" --gtest_output="xml:${xml_file}" "$@"
CRASH: INCUMBENT_CALLBACK_TEST died from SIGABRT (exit code 134)

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.