[BUG] Papilo assertion failure on `INCUMBENT_CALLBACK_TEST`
Open
@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
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.