[Cbc] CbcModel::takeOffCuts() for globalCuts_
John Forrest
john.forrest at fastercoin.com
Fri Nov 21 06:00:28 EST 2014
Kibaek,
If you can give me something to reproduce the problem - using either the
latest Cbc stable or trunk, then I can debug it.
I have added
assert
(numberRowsAtContinuous_+totalNumberCuts==solver_->getNumRows());
near top of CbcModel::takeOffCuts
If you add that, does it trigger an assert?
John Forrest
On 20/11/14 17:24, Kibaek Kim wrote:
> Hello,
>
> I am testing my global cut generator for outer approximation of
> piece-wise linear convex function. My implementation uses
> /OsiBabSolver::solverType_ = 3/ and manually sets up /mipBound_ /and
> /bestObjectiveValue_/, while generating global cuts.
>
> Here is my issue. After running many iterations, Cbc complains the
> following:
> / Assertion failed:
> (clpMatrix->getNumRows()==modelPtr_->getNumRows()), function
> freeCachedResults, file
> ../../../../Clp/src/OsiClp/OsiClpSolverInterface.cpp, line 4491./
> and backtrace reports
> / * frame #0: 0x00007fff9a5c8866
> libsystem_kernel.dylib`__pthread_kill + 10/
> / frame #1: 0x00007fff9948035c libsystem_pthread.dylib`pthread_kill
> + 92/
> / frame #2: 0x00007fff947fbb1a libsystem_c.dylib`abort + 125/
> / frame #3: 0x00007fff947c59bf libsystem_c.dylib`__assert_rtn + 321/
> / frame #4: 0x00000001003e3187
> MyTest`OsiClpSolverInterface::freeCachedResults(this=0x000000010afb1320)
> const + 623 at OsiClpSolverInterface.cpp:4491/
> / frame #5: 0x00000001003dcd27
> MyTest`OsiClpSolverInterface::deleteRows(this=0x000000010afb1320,
> num=1, rowIndices=0x000000010afc8380) + 729 at
> OsiClpSolverInterface.cpp:3491/
> / frame #6: 0x00000001000b50af
> MyTest`CbcModel::takeOffCuts(this=0x000000010172d000,
> newCuts=0x00007fff5fbfd120, allowResolve=true,
> saveCuts=0x0000000000000000, numberNewCuts=0,
> addedCuts=0x0000000000000000) + 2029 at CbcModel.cpp:9792/
> / frame #7: 0x00000001000b080f
> MyTest`CbcModel::solveWithCuts(this=0x000000010172d000,
> cuts=0x00007fff5fbfd120, numberTries=0, node=0x000000010b31a6c0) +
> 16359 at CbcModel.cpp:8563/
> / frame #8: 0x00000001000c9765
> MyTest`CbcModel::doOneNode(this=0x000000010172d000,
> baseModel=0x000000010172d000, node=0x00007fff5fbfd880,
> newNode=0x00007fff5fbfd938) + 2745 at CbcModel.cpp:14944/
> / frame #9: 0x000000010009b8d8
> MyTest`CbcModel::branchAndBound(this=0x000000010172d000,
> doStatistics=0) + 49158 at CbcModel.cpp:4500/
>
> The issue is because /OsiClpSolverInterface::deleteRows()/ tries
> deleting rows that are out of range. This results in that the row
> counter of /clpMatrix/ is reduced whereas the model row counter is
> not. The reason that /solverCutIndices/ in /CbcModel::takeOffCuts()/
> contained out-of-range indices is that /CbcMode::globalCuts_/ were
> counted in /solverCutIndices/ (in /CbcModel::takeOffCuts/), but the
> global cuts were not applied to solver_ yet.
>
> Then, my question is
> 1. Should I have added the global cuts manually to /solver_/ before
> getting into /takeOffCuts()/?
> 2. or should this be handled in /OsiClpSolverInterface/ side?
>
> Thanks all for your helps in advance,
>
> Best,
>
> Kibaek
>
>
> _______________________________________________
> Cbc mailing list
> Cbc at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/cbc
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cbc/attachments/20141121/4a8d1258/attachment.html>
More information about the Cbc
mailing list