coin-or / coin-or/python-mip

upper bound not reported correctly in CBC Progress Callback

Open
#378 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Linear Programming
Stars
600
Forks
108
PR merge metrics
No merged PRs in 30d

Description

**Describe the bug**
The CBC progress callback method doesn't report the correct values of ub (upper bound). While the lb (lower bound) is reported correctly (it increases over time from zero), the ub drops immediately from infinity to zero

**To Reproduce**
```
import mip
import tempfile

lp_str = '''
Minimize
obj: xMAX

Subject To
xMAX(b): xMAX - x(b) >= 0
xMAX(d): xMAX - x(d) >= 0
xMAX(f): xMAX - x(f) >= 0
xMAX(g): xMAX - x(g) >= 0
xMAX(l): xMAX - x(l) >= 0
xMAX(n): xMAX - x(n) >= 0
dc_a(g,b): x(g) - x(b) + 1000 t(g,b) >= 1
dc_b(g,b): x(b) - x(g) - 1000 t(g,b) >= -999
dc_a(g,d): x(g) - x(d) + 1000 t(g,d) >= 1
dc_b(g,d): x(d) - x(g) - 1000 t(g,d) >= -999
dc_a(g,f): x(g) - x(f) + 1000 t(g,f) >= 1
dc_b(g,f): x(f) - x(g) - 1000 t(g,f) >= -999
dc_a(g,n): x(g) - x(n) + 1000 t(g,n) >= 1
dc_b(g,n): x(n) - x(g) - 1000 t(g,n) >= -999
dc_a(g,l): x(g) - x(l) + 1000 t(g,l) >= 1
dc_b(g,l): x(l) - x(g) - 1000 t(g,l) >= -999
dc_a(b,f): x(b) - x(f) + 1000 t(b,f) >= 1
dc_b(b,f): x(f) - x(b) - 1000 t(b,f) >= -999
dc_a(b,n): x(b) - x(n) + 1000 t(b,n) >= 1
dc_b(b,n): x(n) - x(b) - 1000 t(b,n) >= -999
dc_a(b,l): x(b) - x(l) + 1000 t(b,l) >= 1
dc_b(b,l): x(l) - x(b) - 1000 t(b,l) >= -999
dc_a(f,l): x(f) - x(l) + 1000 t(f,l) >= 1
dc_b(f,l): x(l) - x(f) - 1000 t(f,l) >= -999

Bounds
x(b) <= 5
x(d) <= 5
x(f) <= 5
x(g) <= 5
x(l) <= 5
x(n) <= 5

Binaries
t(g,b) t(g,d) t(g,f) t(g,n)
t(g,l) t(b,f) t(b,n)
t(b,l) t(f,l)

Generals
x(b) x(d) x(f) x(g) x(l) x(n)

End
'''

with tempfile.NamedTemporaryFile(suffix='.lp', delete=False) as tmp:
# Store string to tmp file
tmp.write(lp_str.encode('utf-8'))
tmp.close()
# Instantiate a problem model and have it read the tmp file
test_mdl = mip.Model()
test_mdl.read(path=tmp.name)

test_mdl.store_search_progress_log = True

test_mdl.optimize(max_seconds=300)

for second, (lb, ub) in test_mdl.search_progress_log.log:
print(ub)
```

**Expected behavior**
The ub should gradually decrease from infinity to a finite value.

**Desktop:**
- Operating System, version: Win 11
- Python version: 3.11
- Python-MIP version: 1.15

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.