Changeset 1086


Ignore:
Timestamp:
Sep 29, 2008 5:14:17 AM (12 years ago)
Author:
forrest
Message:

fix for parallel

File:
1 edited

Legend:

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

    r1081 r1086  
    60436043#ifdef NODE_LAST
    60446044      bool canMissStuff=false;
    6045       bool redoCuts=true;
    6046       if (CoinAbs(lastNumberCuts2_-numberToAdd)<5) {
    6047         int numberToCheck=CoinMin(lastNumberCuts2_,numberToAdd);
    6048         int i1=0;
    6049         int i2=0;
    6050         int nDiff=0;
    6051         int nSame=0;
    6052         if (lastNumberCuts2_==numberToAdd) {
    6053           for (int i=0;i<numberToCheck;i++) {
    6054             if (lastCut_[i1++]!=addCuts[i2++]) {
    6055               nDiff++;
    6056             } else {
    6057               nSame++;
     6045      if (numberThreads_<=0) {
     6046        bool redoCuts=true;
     6047        if (CoinAbs(lastNumberCuts2_-numberToAdd)<5) {
     6048          int numberToCheck=CoinMin(lastNumberCuts2_,numberToAdd);
     6049          int i1=0;
     6050          int i2=0;
     6051          int nDiff=0;
     6052          int nSame=0;
     6053          if (lastNumberCuts2_==numberToAdd) {
     6054            for (int i=0;i<numberToCheck;i++) {
     6055              if (lastCut_[i1++]!=addCuts[i2++]) {
     6056                nDiff++;
     6057              } else {
     6058                nSame++;
     6059              }
    60586060            }
     6061          } else if (lastNumberCuts2_>numberToAdd) {
     6062            int nDiff2 = lastNumberCuts2_-numberToAdd;
     6063            for (int i=0;i<numberToCheck;i++) {
     6064              if (lastCut_[i1]!=addCuts[i2]) {
     6065                nDiff++;
     6066                while (nDiff2) {
     6067                  i1++;
     6068                  nDiff2--;
     6069                  if (lastCut_[i1]==addCuts[i2]) {
     6070                    nSame++;
     6071                    break;
     6072                  } else {
     6073                    nDiff++;
     6074                  }
     6075                }
     6076              } else {
     6077                nSame++;
     6078              }
     6079            }
     6080            nDiff += nDiff2;
     6081          } else {
     6082            int nDiff2 = numberToAdd-lastNumberCuts2_;
     6083            for (int i=0;i<numberToCheck;i++) {
     6084              if (lastCut_[i1]!=addCuts[i2]) {
     6085                nDiff++;
     6086                while (nDiff2) {
     6087                  i2++;
     6088                  nDiff2--;
     6089                  if (lastCut_[i1]==addCuts[i2]) {
     6090                    nSame++;
     6091                    break;
     6092                  } else {
     6093                    nDiff++;
     6094                  }
     6095                }
     6096              } else {
     6097                nSame++;
     6098              }
     6099            }
     6100            nDiff += nDiff2;
    60596101          }
    6060         } else if (lastNumberCuts2_>numberToAdd) {
    6061           int nDiff2 = lastNumberCuts2_-numberToAdd;
    6062           for (int i=0;i<numberToCheck;i++) {
    6063             if (lastCut_[i1]!=addCuts[i2]) {
    6064               nDiff++;
    6065               while (nDiff2) {
    6066                 i1++;
    6067                 nDiff2--;
    6068                 if (lastCut_[i1]==addCuts[i2]) {
    6069                   nSame++;
    6070                   break;
    6071                 } else {
    6072                   nDiff++;
    6073                 }
    6074               }
    6075             } else {
    6076               nSame++;
    6077             }
     6102#ifdef COIN_DEVELOP_z
     6103          printf("add now %d add last %d - same %d, diff %d %s\n",
     6104                 numberToAdd,lastNumberCuts2_,nSame,nDiff,
     6105                 !nDiff ? "YES" : "NO1");
     6106#endif
     6107          canMissStuff=!nDiff&&sameProblem;
     6108          // But only if number of rows looks OK
     6109          if (numberRowsAtContinuous_+numberToAdd!=solver_->getNumRows())
     6110            canMissStuff=false;
     6111        } else {
     6112          //printf("add now %d add last %d NO2\n",numberToAdd,lastNumberCuts2_);
     6113        }
     6114        assert (lastws->fullBasis()&&
     6115                numberRowsAtContinuous_+numberToAdd==numberRowsNow);
     6116        if (redoCuts) {
     6117          if (numberToAdd>maximumCuts_) {
     6118            delete [] lastCut_;
     6119            maximumCuts_ = 2*numberToAdd+10;
     6120            lastCut_=new const OsiRowCut * [maximumCuts_];
    60786121          }
    6079           nDiff += nDiff2;
    6080         } else {
    6081           int nDiff2 = numberToAdd-lastNumberCuts2_;
    6082           for (int i=0;i<numberToCheck;i++) {
    6083             if (lastCut_[i1]!=addCuts[i2]) {
    6084               nDiff++;
    6085               while (nDiff2) {
    6086                 i2++;
    6087                 nDiff2--;
    6088                 if (lastCut_[i1]==addCuts[i2]) {
    6089                   nSame++;
    6090                   break;
    6091                 } else {
    6092                   nDiff++;
    6093                 }
    6094               }
    6095             } else {
    6096               nSame++;
    6097             }
    6098           }
    6099           nDiff += nDiff2;
    6100         }
    6101 #ifdef COIN_DEVELOP_z
    6102         printf("add now %d add last %d - same %d, diff %d %s\n",
    6103              numberToAdd,lastNumberCuts2_,nSame,nDiff,
    6104              !nDiff ? "YES" : "NO1");
    6105 #endif
    6106         canMissStuff=!nDiff&&sameProblem;
    6107         // But only if number of rows looks OK
    6108         if (numberRowsAtContinuous_+numberToAdd!=solver_->getNumRows())
    6109           canMissStuff=false;
    6110       } else {
    6111         //printf("add now %d add last %d NO2\n",numberToAdd,lastNumberCuts2_);
    6112       }
    6113       assert (lastws->fullBasis()&&
    6114               numberRowsAtContinuous_+numberToAdd==numberRowsNow);
    6115       if (redoCuts) {
    6116         if (numberToAdd>maximumCuts_) {
    6117           delete [] lastCut_;
    6118           maximumCuts_ = 2*numberToAdd+10;
    6119           lastCut_=new const OsiRowCut * [maximumCuts_];
    6120         }
    6121         lastNumberCuts2_=numberToAdd;
    6122         for (int i=0;i<numberToAdd;i++)
    6123           lastCut_[i]=addCuts[i];
     6122          lastNumberCuts2_=numberToAdd;
     6123          for (int i=0;i<numberToAdd;i++)
     6124            lastCut_[i]=addCuts[i];
     6125        }
    61246126      }
    61256127#else
Note: See TracChangeset for help on using the changeset viewer.