Ignore:
Timestamp:
Jan 25, 2011 5:54:21 AM (9 years ago)
Author:
forrest
Message:

minor changes to heuristics and fix a memory leak

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cbc/src/CbcHeuristicRENS.cpp

    r1585 r1587  
    334334              djTolerance = 1.0e30;
    335335          } else if (type==10) {
    336             double * saveUpper = CoinCopyOfArray(newSolver->getRowUpper(),numberRows);
     336            double * saveUpper = new double [numberRows];
     337            memset(saveUpper,0,numberRows*sizeof(double));
    337338            char * mark = new char [numberColumns];
    338339            char * nonzero = new char [numberColumns];
    339             double factor=CoinMax(1.000001,fractionSmall_);
     340            for (int iColumn = 0; iColumn < numberColumns; iColumn++) {
     341              if (colUpper[iColumn]>colLower[iColumn]) {
     342                CoinBigIndex j;
     343                for (j = columnStart[iColumn];
     344                     j < columnStart[iColumn] + columnLength[iColumn]; j++) {
     345                  int iRow = row[j];
     346                  saveUpper[iRow] += element[j];
     347                }
     348              }
     349            }
     350            double sum=0.0;
     351            double sumRhs=0.0;
     352            const double * rowUpper = newSolver->getRowUpper();
     353            for (int i=0;i<numberRows;i++) {
     354              if (bestDj[i]>=1.0e30) {
     355                sum += saveUpper[i];
     356                sumRhs += rowUpper[i];
     357              }
     358            }
     359            double averagePerSet = sum/static_cast<double>(numberRows);
     360            // allow this extra
     361            double factor = averagePerSet*fractionSmall_*numberRows;
     362            factor = 1.0+factor/sumRhs;
    340363            fractionSmall_ = 0.5;
     364            memcpy(saveUpper,rowUpper,numberRows*sizeof(double));
    341365            // loosen up
    342366            for (int i=0;i<numberRows;i++) {
Note: See TracChangeset for help on using the changeset viewer.