Ignore:
Timestamp:
Nov 21, 2012 4:38:56 AM (7 years ago)
Author:
forrest
Message:

add Proximity heuristic (Fischetti and Monaci) - shouldn't break anything

File:
1 edited

Legend:

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

    r1573 r1802  
    378378    double * newSolution = new double [numberColumns];
    379379    double newSolutionValue = COIN_DBL_MAX;
     380    int maxSolutions = model_->getMaximumSolutions();
     381    int numberSolutions=0;
    380382    bool solutionFound = false;
    381383    int * usedColumn = NULL;
     
    447449    bool exitAll = false;
    448450    //double saveBestObjective = model_->getMinimizationObjValue();
    449     int numberSolutions = 0;
    450451    OsiSolverInterface * solver = NULL;
    451452    double artificialFactor = 0.00001;
     
    848849                        if ((accumulate_&1) != 0) {
    849850                            model_->incrementUsed(betterSolution); // for local search
    850                             numberSolutions++;
    851851                        }
    852852                        solutionValue = newSolutionValue;
    853853                        solutionFound = true;
     854                        numberSolutions++;
     855                        if (numberSolutions>=maxSolutions)
     856                          exitAll = true;
    854857                        if (general && saveValue != newSolutionValue) {
    855858                            sprintf(pumpPrint, "Cleaned solution of %g", solutionValue);
     
    10681071                                dynamic_cast<CoinWarmStartBasis *>(solver->getWarmStart()) ;
    10691072                            solutionFound = true;
     1073                            numberSolutions++;
     1074                            if (numberSolutions>=maxSolutions)
     1075                              exitAll = true;
    10701076                            if (exitNow(newSolutionValue))
    10711077                                exitAll = true;
     
    10891095                            if ((accumulate_&1) != 0) {
    10901096                                model_->incrementUsed(betterSolution); // for local search
    1091                                 numberSolutions++;
    10921097                            }
    10931098                            solutionValue = newSolutionValue;
    10941099                            solutionFound = true;
     1100                            numberSolutions++;
     1101                            if (numberSolutions>=maxSolutions)
     1102                              exitAll = true;
    10951103                            if (exitNow(newSolutionValue))
    10961104                                exitAll = true;
     
    16401648            memcpy(betterSolution, roundingSolution, numberColumns*sizeof(double));
    16411649            solutionFound = true;
     1650            numberSolutions++;
     1651            if (numberSolutions>=maxSolutions)
     1652              exitAll = true;
    16421653            if (exitNow(roundingObjective))
    16431654                exitAll = true;
     
    19581969                    if ((accumulate_&1) != 0) {
    19591970                        model_->incrementUsed(betterSolution); // for local search
    1960                         numberSolutions++;
    19611971                    }
    19621972                    solutionValue = newSolutionValue;
    19631973                    solutionFound = true;
     1974                    numberSolutions++;
     1975                    if (numberSolutions>=maxSolutions)
     1976                      exitAll = true;
    19641977                    if (exitNow(newSolutionValue))
    19651978                        exitAll = true;
     
    20672080            solutionValue = newSolutionValue;
    20682081            solutionFound = true;
     2082            numberSolutions++;
     2083            if (numberSolutions>=maxSolutions)
     2084              exitAll = true;
    20692085            if (exitNow(newSolutionValue))
    20702086                exitAll = true;
     
    20842100        sprintf(pumpPrint, "After %.2f seconds - Feasibility pump exiting - took %.2f seconds",
    20852101                model_->getCurrentSeconds(), CoinCpuTime() - time1);
    2086     else
    2087         sprintf(pumpPrint, "After %.2f seconds - Feasibility pump exiting with objective of %g - took %.2f seconds",
    2088                 model_->getCurrentSeconds(), solutionValue, CoinCpuTime() - time1);
     2102    else if (numberSolutions < maxSolutions)
     2103      sprintf(pumpPrint, "After %.2f seconds - Feasibility pump exiting with objective of %g - took %.2f seconds",
     2104              model_->getCurrentSeconds(), solutionValue, CoinCpuTime() - time1);
     2105    else
     2106        sprintf(pumpPrint, "After %.2f seconds - Feasibility pump exiting with objective of %g (stopping after %d solutions) - took %.2f seconds",
     2107                model_->getCurrentSeconds(), solutionValue,
     2108                numberSolutions,CoinCpuTime() - time1);
    20892109    model_->messageHandler()->message(CBC_FPUMP1, model_->messages())
    2090     << pumpPrint
    2091     << CoinMessageEol;
     2110      << pumpPrint
     2111      << CoinMessageEol;
    20922112    if (bestBasis.getNumStructural())
    20932113        model_->setBestSolutionBasis(bestBasis);
Note: See TracChangeset for help on using the changeset viewer.