Changeset 1587 for trunk/Cbc/src


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

minor changes to heuristics and fix a memory leak

Location:
trunk/Cbc/src
Files:
3 edited

Legend:

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

    r1585 r1587  
    11751175                    solver->setHintParam(OsiDoDualInResolve, true, OsiHintDo);
    11761176#endif
     1177                    model.passInEventHandler(model_->getEventHandler());
    11771178                    model.branchAndBound();
    11781179#ifdef ALWAYS_DUAL
  • trunk/Cbc/src/CbcHeuristicGreedy.cpp

    r1586 r1587  
    996996      columnStart = matrix->getVectorStarts();
    997997      columnLength = matrix->getVectorLengths();
    998       rhs = new double [numberRows];
     998      //rhs = new double [numberRows];
    999999      const double * rowLower = solver->getRowLower();
    10001000      const double * rowUpper = solver->getRowUpper();
  • 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.