Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect result on Linux with CPLEX #131

Open
tkralphs opened this issue Jun 18, 2020 · 1 comment
Open

Incorrect result on Linux with CPLEX #131

tkralphs opened this issue Jun 18, 2020 · 1 comment

Comments

@tkralphs
Copy link
Member

Building 6aa6708 with default settings and CPLEX 12.7 on Linux with gcc 4.9.2 results in the following error. Correct solution is found with all other algorithms and solvers.

dip --BlockFileFormat List --Instance  Data/Sample/atm_5_10_1.mps --BlockFile  atm_5_10_1.block --DecompIPSolver CPLEX --DecompLPSolver CPLEX --BestKnownLB 59704.02009   --BestKnownUB 59704.02009

========================================================
========================================================
Welcome to the DIP Decomposition Framework
Copyright 2002-2019 Lehigh University and others
All Rights Reserved
Distributed under the Eclipse Public License 1.0
Version: 0.95
Build Date: Jun 18 2020
========================================================
========================================================
==  Welcome to the Abstract Library for Parallel Search (ALPS)
==  Copyright 2000-2019 Lehigh University and others
==  All Rights Reserved.
==  Distributed under the Eclipse Public License 1.0
==  Version: 1.5
==  Build Date: Jun 18 2020
Alps0250I Starting search ...
Point violates row 2 -> budget(d_DATE2) LB= -INF ax= 3381.1480352 UB= 70.0000000 RelViol= 0.9792970
Point violates row 3 -> budget(d_DATE3) LB= -INF ax= 3619.4589957 UB= 841.0000000 RelViol= 0.7676448
Point violates row 9 -> budget(d_DATE9) LB= -INF ax= 3619.4985705 UB= 243.0000000 RelViol= 0.9328636
Point violates row 2 -> budget(d_DATE2) LB= -INF ax= 4730.4072641 UB= 70.0000000 RelViol= 0.9852021
Point violates row 3 -> budget(d_DATE3) LB= -INF ax= 4888.6716232 UB= 841.0000000 RelViol= 0.8279696
Point violates row 9 -> budget(d_DATE9) LB= -INF ax= 3236.4044526 UB= 243.0000000 RelViol= 0.9249167
Point violates row 2 -> budget(d_DATE2) LB= -INF ax= 4730.2755533 UB= 70.0000000 RelViol= 0.9852017
Point violates row 3 -> budget(d_DATE3) LB= -INF ax= 4887.9624658 UB= 841.0000000 RelViol= 0.8279447
Point violates row 9 -> budget(d_DATE9) LB= -INF ax= 3236.4678593 UB= 243.0000000 RelViol= 0.9249181
Point violates row 2 -> budget(d_DATE2) LB= -INF ax= 4730.2775086 UB= 70.0000000 RelViol= 0.9852017
Point violates row 3 -> budget(d_DATE3) LB= -INF ax= 4887.4431238 UB= 841.0000000 RelViol= 0.8279264
Point violates row 9 -> budget(d_DATE9) LB= -INF ax= 3236.5733885 UB= 243.0000000 RelViol= 0.9249206
Point violates row 2 -> budget(d_DATE2) LB= -INF ax= 4730.2775086 UB= 70.0000000 RelViol= 0.9852017
Point violates row 3 -> budget(d_DATE3) LB= -INF ax= 4887.4431238 UB= 841.0000000 RelViol= 0.8279264
Point violates row 9 -> budget(d_DATE9) LB= -INF ax= 3236.5733885 UB= 243.0000000 RelViol= 0.9249206
Point violates row 2 -> budget(d_DATE2) LB= -INF ax= 4730.2775086 UB= 70.0000000 RelViol= 0.9852017
Point violates row 3 -> budget(d_DATE3) LB= -INF ax= 4887.4431238 UB= 841.0000000 RelViol= 0.8279264
Point violates row 9 -> budget(d_DATE9) LB= -INF ax= 3236.5733885 UB= 243.0000000 RelViol= 0.9249206
Alps0240I Proc: 0, Part: 1, Cand: 0, Best N: 53547.559, Best S: 89386.232

Alps0208I Search completed.
Alps0261I Best solution found had quality 89386.232 and was found at depth 0
Alps0264I Number of nodes processed:                3
Alps0267I Number of nodes branched:                 1
Alps0268I Number of nodes pruned before processing: 0
Alps0270I Number of nodes left:                     0
Alps0272I Tree depth: 1
Alps0274I Search CPU time: 1.46 seconds
Alps0278I Search wall-clock time: 1.47 seconds

================ DECOMP Statistics [BEGIN]: ===============
Total Decomp          =       1.47    100.00     3  0.70
Total Solve Relax     =       4.90    334.26    70  0.16
Total Solve Relax App =       0.00      0.00    70  0.00
Total Solution Update =       0.01      0.85    16  0.01
Total Generate Cuts   =       0.00      0.00     1  0.00
Total Generate Vars   =       1.45     98.81    13  0.16
Total Compress Cols   =       0.00      0.00     1  0.00
================ DECOMP Statistics [END  ]: ===============

============== DECOMP Solution Info [Begin]: ==============
Status        = Optimal
BestLB        = 89386.23179
BestUB        = 89386.23179
OptiGap       =    0.00000
Nodes         = 3
SetupCPU      = 0.04
SolveCPU      = 1.46
TotalCPU      = 1.50
SetupWallclock= 0.05
SolveWallclock= 1.47
TotalWallclock= 1.52
============== DECOMP Solution Info [END  ]: ==============
ERROR. BestKnownLB/UB= 59704.02009 but DIP claims GlobalUB= 89386.23179
COIN Exception [ Invalid claim of optimal. ] at /home/ted/Projects/Dip/Dip/src/DecompMain.cpp:L505 in MILPBlock::main
@tkralphs
Copy link
Member Author

tkralphs commented Jun 21, 2020

After spending many hours on this, I traced it down to what seems to be a corruption of CPLEX's own internal problem description. Immediately after calling CPXMipopt, querying the problem data (in particular, the constraint matrix) returns incorrect data. Neither valgrind nor address sanitizer complain about anything. Setting the parameter SolverMasterAsMip to 0 allows the problem to solve correctly.

I have no idea how to proceed further. It's very, very strange. I find it hard to believe it is a bug in CPLEX, but that is what it appears.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant