Ignore:
Timestamp:
Nov 28, 2009 6:09:56 AM (10 years ago)
Author:
forrest
Message:

final changes before cleaning

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/sandbox/Cbc/src/CbcHeuristicLocal.cpp

    r1286 r1315  
    158158    }
    159159    int returnCode = 0;
     160#ifdef CLP_INVESTIGATE2
     161    printf("Fixing %d out of %d (%d continuous)\n",
     162           nFix, numberIntegers, newSolver->getNumCols() - numberIntegers);
     163#endif
     164    if (nFix*10 <= numberIntegers) {
     165        // see if we can fix more
     166        int * which = new int [2*(numberIntegers-nFix)];
     167        int * sort = which + (numberIntegers - nFix);
     168        int n = 0;
     169        for (i = 0; i < numberIntegers; i++) {
     170            int iColumn = integerVariable[i];
     171            if (used_[iColumn]) {
     172                which[n] = iColumn;
     173                sort[n++] = used_[iColumn];
     174            }
     175        }
     176        CoinSort_2(sort, sort + n, which);
     177        // only half fixed in total
     178        n = CoinMin(n, numberIntegers / 2 - nFix);
     179        int allow = CoinMax(numberSolutions_ - 2, sort[0]);
     180        int nFix2 = 0;
     181        for (i = 0; i < n; i++) {
     182            int iColumn = integerVariable[i];
     183            if (used_[iColumn] <= allow) {
     184                newSolver->setColUpper(iColumn, colLower[iColumn]);
     185                nFix2++;
     186            } else {
     187                break;
     188            }
     189        }
     190        delete [] which;
     191        nFix += nFix2;
     192        printf("Number fixed increased from %d to %d\n",
     193               nFix - nFix2, nFix);
     194    }
    160195    if (nFix*10 > numberIntegers) {
    161196        returnCode = smallBranchAndBound(newSolver, numberNodes_, newSolution, objectiveValue,
Note: See TracChangeset for help on using the changeset viewer.