[Cbc] Assertion in CbcModel.cpp:525

Kim Hansen kimhanse at gmail.com
Mon Jul 23 18:25:35 EDT 2007


Hi John

On 7/23/07, John J Forrest <jjforre at us.ibm.com> wrote:
>
> Kim,
>
> a) Looking at your previous stack printout I realized that the new error handling was not activated on that particular path.  Try again and see if it is better (ClpModel.cpp has been changed as well as some Cbc stuff).

I have upgraded my library but I still get an infinite loop, this time
in another problem of the same type. I have captured a few stack
traces:

#0  ClpPackedMatrix::subsetTransposeTimes (this=0xf98c218,
model=0xbfcb7f00, rowArray=0x101a63a0, y=0xf993378,
columnArray=0xfc33008) at ClpPackedMatrix.cpp:1534
#1  0x434fa843 in ClpPrimalColumnSteepest::transposeTimes2
(this=0xf8c2bf8, pi1=0xf78f038, dj1=0xf993378, pi2=0x101a63a0,
dj2=0xfc33008, spare=0xf98b878, scaleFactor=2.5110835365338303e-08)
    at ClpPrimalColumnSteepest.cpp:1673
#2  0x43502e53 in ClpPrimalColumnSteepest::djsAndSteepest
(this=0xf8c2bf8, updates=0xf78f038, spareRow1=0xf787c18,
spareRow2=0xf98b878, spareColumn1=0xf993378, spareColumn2=0xfc33008)
    at ClpPrimalColumnSteepest.cpp:1122
#3  0x43503e5c in ClpPrimalColumnSteepest::pivotColumn
(this=0xf8c2bf8, updates=0xf78f038, spareRow1=0xf787c18,
spareRow2=0xf98b878, spareColumn1=0xf993378, spareColumn2=0xfc33008)
    at ClpPrimalColumnSteepest.cpp:295
#4  0x435455f7 in ClpSimplexPrimal::primalColumn (this=0xbfcb7f00,
updates=0xf78f038, spareRow1=0xf787c18, spareRow2=0xf98b878,
spareColumn1=0xf993378, spareColumn2=0xfc33008)
    at ClpSimplexPrimal.cpp:1878
#5  0x4354bf12 in ClpSimplexPrimal::whileIterating (this=0xbfcb7f00,
valuesOption=0) at ClpSimplexPrimal.cpp:580
#6  0x4354c41d in ClpSimplexPrimal::primal (this=0xbfcb7f00,
ifValuesPass=0, startFinishOptions=0) at ClpSimplexPrimal.cpp:461
*** It is the frame above this line that never finishes ***
#7  0x43511f1d in ClpSimplex::primal (this=0xbfcb7f00, ifValuesPass=1,
startFinishOptions=0) at ClpSimplex.cpp:4673
#8  0x437cab86 in OsiClpSolverInterface::initialSolve (this=0xfc32608)
at OsiClpSolverInterface.cpp:287
#9  0x4373a6cb in CglPreProcess::postProcess (this=0xbfcb87e8,
modelIn=@0x1050d064) at CglPreProcess.cpp:1453
#10 0x435d3b0a in CbcHeuristic::smallBranchAndBound (this=0xf62d580,
solver=0xf788d04, numberNodes=200, newSolution=0xf8c6d58,
newSolutionValue=@0xbfcb8f48, cutoff=48250.22442602404,
    name=@0xbfcb88e0) at CbcHeuristic.cpp:207
#11 0x435de6e3 in CbcHeuristicLocal::solutionFix (this=0xf62d580,
objectiveValue=@0xbfcb8f48, newSolution=0xf8c6d58, keep=0x0) at
CbcHeuristicLocal.cpp:157
#12 0x435dfb8a in CbcHeuristicLocal::solution (this=0xf62d580,
solutionValue=@0xbfcb8f48, betterSolution=0xf8c6d58) at
CbcHeuristicLocal.cpp:566
#13 0x435fabd2 in CbcModel::branchAndBound (this=0xf62e328,
doStatistics=0) at CbcModel.cpp:2031


#0  0x42fc243a in CoinFactorization::updateColumnTransposeLDensish
(this=0xf944270, regionSparse=0xf98b878) at
CoinFactorization3.cpp:1256
#1  0x42fc2a65 in CoinFactorization::updateColumnTransposeL
(this=0xf944270, regionSparse=0xf98b878) at
CoinFactorization3.cpp:1627
#2  0x42fc3b27 in CoinFactorization::updateColumnTranspose
(this=0xf944270, regionSparse=0xf98b878, regionSparse2=0xf78f038) at
CoinFactorization3.cpp:897
#3  0x43495e47 in ClpFactorization::updateColumnTranspose (this=0x78,
regionSparse=0xf98b878, regionSparse2=0xf944270) at
ClpFactorization.cpp:856
#4  0x43502c22 in ClpPrimalColumnSteepest::djsAndSteepest
(this=0xf8c2bf8, updates=0xf78f038, spareRow1=0xf787c18,
spareRow2=0xf98b878, spareColumn1=0xf993378, spareColumn2=0xfc33008)
    at ClpPrimalColumnSteepest.cpp:965
#5  0x43503e5c in ClpPrimalColumnSteepest::pivotColumn
(this=0xf8c2bf8, updates=0xf78f038, spareRow1=0xf787c18,
spareRow2=0xf98b878, spareColumn1=0xf993378, spareColumn2=0xfc33008)
    at ClpPrimalColumnSteepest.cpp:295
#6  0x435455f7 in ClpSimplexPrimal::primalColumn (this=0xbfcb7f00,
updates=0xf78f038, spareRow1=0xf787c18, spareRow2=0xf98b878,
spareColumn1=0xf993378, spareColumn2=0xfc33008)
    at ClpSimplexPrimal.cpp:1878
[...]


The loop it appears to be caught in is:

271         while (problemStatus_<0) {
(gdb) n
275             rowArray_[iRow]->clear();
(gdb) n
279             columnArray_[iColumn]->clear();
(gdb) n
284           matrix_->refresh(this);
(gdb) n
287           if
(perturbation_<101&&numberIterations_>2*(numberRows_+numberColumns_)&&(specialOptions_&4)==0
(gdb) n
294           if (lastGoodIteration_==numberIterations_&&factorType)
(gdb) n
296           if (saveModel) {
(gdb) n
311           statusOfProblemInPrimal(lastCleaned,factorType,progress_,true,ifValuesPass,saveModel);
(gdb) n
312           if (initialStatus==10) {
(gdb) n
333           if (numberDualInfeasibilities_==-776) {
(gdb) n
342           int numberSprintIterations=0;
(gdb) n
343           int numberSprintColumns =
primalColumnPivot_->numberSprintColumns(numberSprintIterations);
(gdb) n
344           if (problemStatus_==777) {
(gdb) n
352           } else if
(problemStatus_<0&&!saveModel&&numberSprintColumns&&firstFree_<0) {
(gdb) n
427           pivotRow_=-2;
(gdb) n
430           if (problemStatus_>=0)
(gdb) n
434           if (hitMaximumIterations()||(ifValuesPass==2&&firstFree_<0)) {
(gdb) n
0x4346b5bc in ClpModel::hitMaximumIterations () from /usr/lib/libClp.so.0
(gdb) n
Single stepping until exit from function
_ZNK8ClpModel20hitMaximumIterationsEv at plt,
which has no line number information.
ClpModel::hitMaximumIterations (this=0xbfcb7f00) at ClpModel.cpp:2326
2326    ClpModel::hitMaximumIterations() const
(gdb) fin
Run till exit from #0  ClpModel::hitMaximumIterations
(this=0xbfcb7f00) at ClpModel.cpp:2326
0x4354c3bd in ClpSimplexPrimal::primal (this=0xbfcb7f00,
ifValuesPass=0, startFinishOptions=0) at ClpSimplexPrimal.cpp:434
434           if (hitMaximumIterations()||(ifValuesPass==2&&firstFree_<0)) {
Value returned is $12 = false
(gdb) n
439           if (firstFree_<0) {
(gdb) n
440             if (ifValuesPass) {
(gdb) n
453             int status =
eventHandler_->event(ClpEventHandler::endOfFactorization);
(gdb) n
454             if (status>=0) {
(gdb) n
461           whileIterating(ifValuesPass ? 1 : 0);
(gdb) n
457               break;
(gdb) n
461           whileIterating(ifValuesPass ? 1 : 0);
(gdb) n
271         while (problemStatus_<0) {


problemStatus_ keeps being -2, I don't know what else to look at, but
I hope this helps.

Thanks,
-- 
Kim Hansen
Vadgårdsvej 3, 2.tv
2860 Søborg
Fastnet: 3956 2437  --  Mobil: 3091 2437



More information about the Cbc mailing list