Ignore:
Timestamp:
Mar 7, 2014 12:00:35 PM (6 years ago)
Author:
forrest
Message:

mods for mipstart

File:
1 edited

Legend:

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

    r2003 r2013  
    7171#include "CglStored.hpp"
    7272#include "CglClique.hpp"
     73#include "CglKnapsackCover.hpp"
    7374
    7475#include "CoinTime.hpp"
     
    38433844        if (toZero[number01]) {
    38443845            CglTreeProbingInfo info(*probingInfo_);
    3845 #ifdef JJF_ZERO
    3846             /*
    3847               Marginal idea. Further exploration probably good. Build some extra
    3848               cliques from probing info. Not quite worth the effort?
    3849             */
    3850             OsiSolverInterface * fake = info.analyze(*solver_, 1);
    3851             if (fake) {
    3852                 fake->writeMps("fake");
     3846            if ((moreSpecialOptions_&1048576)!=0&&!parentModel_) {
     3847              /*
     3848                Marginal idea. Further exploration probably good. Build some extra
     3849                cliques from probing info. Not quite worth the effort?
     3850              */
     3851              CglProbing generator1;
     3852              generator1.setUsingObjective(false);
     3853              generator1.setMaxPass(1);
     3854              generator1.setMaxPassRoot(1);
     3855              generator1.setMaxLook(100);
     3856              generator1.setRowCuts(3);
     3857              generator1.setMaxElements(300);
     3858              generator1.setMaxProbeRoot(solver_->getNumCols());
     3859              CoinThreadRandom randomGenerator;
     3860              //CglTreeProbingInfo info(solver_);
     3861              info.level = 0;
     3862              info.formulation_rows = solver_->getNumRows();
     3863              info.inTree = false;
     3864              info.randomNumberGenerator=&randomGenerator;
     3865              info.pass=4;
     3866              generator1.setMode(8);
     3867              OsiCuts cs;
     3868              generator1.generateCutsAndModify(*solver_,cs,&info);
     3869              // very clunky
     3870              OsiSolverInterface * temp = generator1.cliqueModel(solver_,2);
     3871              CglPreProcess dummy;
     3872              OsiSolverInterface * newSolver=dummy.cliqueIt(*temp,0.0001);
     3873              delete temp;
     3874              OsiSolverInterface * fake = NULL;
     3875              if (newSolver) {
     3876#if 0
     3877                int numberCliques = generator1.numberCliques();
     3878                cliqueEntry * entry = generator1.cliqueEntry();
     3879                cliqueType * type = new cliqueType [numberCliques];
     3880                int * start = new int [numberCliques+1];
     3881                start[numberCliques]=2*numberCliques;
     3882                int n=0;
     3883                for (int i=0;i<numberCliques;i++) {
     3884                  start[i]=2*i;
     3885                  setOneFixesInCliqueEntry(entry[2*i],true);
     3886                  setOneFixesInCliqueEntry(entry[2*i+1],true);
     3887                  type[i]=0;
     3888                }
     3889                fake = info.analyze(*solver_, 1,numberCliques,start,
     3890                                    entry,type);
     3891                delete [] type;
     3892                delete [] entry;
     3893#else
     3894                fake = info.analyze(*newSolver, 1,-1);
     3895#endif
     3896                delete newSolver;
     3897              } else {
     3898                fake = info.analyze(*solver_, 1);
     3899              }
     3900              if (fake) {
     3901                //fake->writeMps("fake");
    38533902                CglFakeClique cliqueGen(fake);
    38543903                cliqueGen.setStarCliqueReport(false);
     
    38573906                addCutGenerator(&cliqueGen, 1, "Fake cliques", true, false, false, -200);
    38583907                generator_[numberCutGenerators_-1]->setTiming(true);
    3859             }
    3860 #endif
     3908                for (int i = 0; i < numberCutGenerators_; i++) {
     3909                  CglKnapsackCover * cutGen =
     3910                  dynamic_cast<CglKnapsackCover *>(generator_[i]->generator());
     3911                  if (cutGen) {
     3912                    cutGen->createCliques(*fake,2,200,false);
     3913                  }
     3914                }
     3915              }
     3916            }
    38613917            if (probingInfo_->packDown()) {
    38623918#ifdef CLP_INVESTIGATE
     
    50625118    originalContinuousObjective_ = solver_->getObjValue() * solver_->getObjSense();
    50635119    bestPossibleObjective_ = originalContinuousObjective_;
     5120    if (solver_->isProvenDualInfeasible())
     5121      originalContinuousObjective_ = -COIN_DBL_MAX;
    50645122    delete [] continuousSolution_;
    50655123    continuousSolution_ = CoinCopyOfArray(solver_->getColSolution(),
     
    66096667CbcModel::isProvenInfeasible() const
    66106668{
    6611     if (!status_ && bestObjective_ >= 1.0e30)
     6669    if (!status_ && (bestObjective_ >= 1.0e30  && !secondaryStatus_))
    66126670        return true;
    66136671    else
     
    79047962#define CHECK_DEBUGGER
    79057963#ifdef CHECK_DEBUGGER
    7906                 if ((specialOptions_&1) != 0 ) {
     7964                if ((specialOptions_&1) != 0 && ! parentModel_) {
    79077965                  CoinAssert (!solver_->getRowCutDebuggerAlways()->invalidCut(*thisCut));
    79087966                }
     
    1368713745{
    1368813746    if (status_ != -1) {
    13689         return originalContinuousObjective_ < 1.0e50;
     13747        return fabs(originalContinuousObjective_) < 1.0e50;
    1369013748    } else {
    1369113749        return solver_->isProvenOptimal();
     
    1749217550    bool hitMaxTime = (totalTime >= maxSeconds);
    1749317551    if (parentModel_ && !hitMaxTime) {
    17494         // In a sub tree so need to add both times
    17495         totalTime += parentModel_->getCurrentSeconds();
     17552        // In a sub tree
     17553        assert (parentModel_);
    1749617554        maxSeconds = parentModel_->getMaximumSeconds();
    1749717555        hitMaxTime = (totalTime >= maxSeconds);
Note: See TracChangeset for help on using the changeset viewer.