Ignore:
Timestamp:
Mar 16, 2009 6:30:25 AM (11 years ago)
Author:
forrest
Message:

chnages to try and make faster

File:
1 edited

Legend:

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

    r1121 r1132  
    32033203      break;
    32043204    //bool skipAll = (numberBeforeTrust>20&&numberNodes>20000&&numberNotTrusted==0);
    3205     bool skipAll = numberNotTrusted==0||numberToDo==1;
     3205    int skipAll = (numberNotTrusted==0||numberToDo==1) ? 1 : 0;
    32063206    bool doneHotStart=false;
    32073207    int searchStrategy = saveSearchStrategy>=0 ? (saveSearchStrategy%10) : -1;
     
    32153215#ifndef CBC_WEAK_STRONG
    32163216    if (((numberNodes%20)==0&&searchStrategy!=2)||(model->specialOptions()&8)!=0)
    3217       skipAll=false;
     3217      skipAll=0;
    32183218#endif
    32193219    if (!newWay) {
     
    32283228            if (numberStrongIterations>numberIterations+10000) {
    32293229              searchStrategy=2;
    3230               //skipAll=true;
     3230              //skipAll=1;
    32313231            } else if (numberStrongIterations*4+1000<numberIterations||depth_<5) {
    32323232              searchStrategy=3;
    3233               skipAll=false;
     3233              skipAll=0;
    32343234            }
    32353235          } else {
    32363236            searchStrategy=3;
    3237             skipAll=false;
     3237            skipAll=0;
    32383238          }
    32393239        } else {
    3240           //skipAll=true;
     3240          //skipAll=1;
    32413241        }
    32423242      }
     
    32683268    }
    32693269    if (searchStrategy<3&&(!numberNotTrusted||!searchStrategy))
    3270       skipAll=true;
     3270      skipAll=1;
    32713271    else
    3272       skipAll=false;
     3272      skipAll=0;
    32733273    }
    32743274    // worth trying if too many times
     
    34233423      } else {
    34243424#endif          /* RANGING */
     3425#define SKIPM1
     3426#ifdef SKIPM1
     3427        {
     3428          int numberIterations = model->getIterationCount();
     3429          //numberIterations += (model->numberExtraIterations()>>2);
     3430          const int * strongInfo = model->strongInfo();
     3431          //int numberDone = strongInfo[0]-strongInfo[3];
     3432          int numberFixed = strongInfo[1]-strongInfo[4];
     3433          int numberInfeasible = strongInfo[2]-strongInfo[5];
     3434          assert (!strongInfo[3]);
     3435          assert (!strongInfo[4]);
     3436          assert (!strongInfo[5]);
     3437          int numberStrongIterations = model->numberStrongIterations();
     3438          int numberRows = solver->getNumRows();
     3439          if (numberStrongIterations>numberIterations+CoinMin(100,10*numberRows)&&depth_>=4&&numberNodes>100) {
     3440            if (20*numberInfeasible+4*numberFixed<numberNodes) {
     3441              // Say never do
     3442              skipAll=-1;
     3443            }
     3444          }
     3445          //if (model->parentModel()&&depth_>=4)
     3446          //skipAll=-1;
     3447        }
     3448#endif
    34253449      if (!skipAll) {
    34263450        // Mark hot start
     
    34283452        solver->markHotStart();
    34293453        xMark++;
     3454#ifdef CLP_INVESTIGATE
     3455        if (kkPass==1&&!solver->isProvenOptimal()) {
     3456          printf("Solver says infeasible on markHotStart?\n");
     3457        }
     3458#endif
    34303459      }
    34313460      // make sure best will be first
     
    34603489      //printf("todo %d, strong %d\n",numberToDo,numberStrong);
    34613490      int numberTest=numberNotTrusted>0 ? numberStrong : (numberStrong+1)/2;
    3462       int numberTest2 = 2*numberStrong;
    34633491      //double distanceToCutoff2 = model->getCutoff()-objectiveValue_;
    34643492      if (!newWay) {
     
    34673495        doQuickly=false;
    34683496        numberTest = numberStrong;
    3469         //numberTest2 = 1000000;
    34703497      }
    34713498      //if (searchStrategy<0||searchStrategy==1)
    3472         //numberTest2 = 1000000;
    34733499#if 0
    34743500      if (numberBeforeTrust>20&&(numberNodes>20000||(numberNodes>200&&numberNotTrusted==0))) {
     
    34803506#else
    34813507      // Try nearly always off
    3482       if (searchStrategy<2) {
    3483         if ((numberNodes%20)!=0) {
    3484           if ((model->specialOptions()&8)==0) {
    3485             numberTest=0;
    3486             doQuickly=true;
    3487           }
    3488         } else {
    3489           doQuickly=false;
    3490           numberTest=2*numberStrong;
    3491           skipAll=false;
    3492         }
    3493       } else if (searchStrategy!=3) {
    3494         doQuickly=true;
    3495         numberTest=numberStrong;
    3496       }
    3497 #endif
    3498       if (depth_<8&&numberStrong) {
     3508#ifdef SKIPM1
     3509      if (skipAll>=0) {
     3510#endif
     3511        if (searchStrategy<2) {
     3512          if ((numberNodes%20)!=0) {
     3513            if ((model->specialOptions()&8)==0) {
     3514              numberTest=0;
     3515              doQuickly=true;
     3516            }
     3517          } else {
     3518            doQuickly=false;
     3519            numberTest=2*numberStrong;
     3520            skipAll=0;
     3521          }
     3522        } else if (searchStrategy!=3) {
     3523          doQuickly=true;
     3524          numberTest=numberStrong;
     3525        }
     3526#ifdef SKIPM1
     3527      } else {
     3528        // Just take first
     3529        doQuickly=true;
     3530        numberTest=1;
     3531      }
     3532#endif
     3533#endif
     3534#ifdef SKIPM1
     3535      int testDepth = (skipAll>=0) ? 8 : 4;
     3536#else
     3537      int testDepth = 8;
     3538#endif
     3539      if (depth_<testDepth&&numberStrong) {
    34993540        if (searchStrategy!=2) {
    35003541          doQuickly=false;
     
    35083549          }
    35093550          numberTest=numberStrong;
    3510           skipAll=false;
     3551          skipAll=0;
    35113552        }
    35123553        //model->setStateOfSearch(2); // use min min
     
    35263567        distanceToCutoff *= 100.0;
    35273568      }
    3528         distanceToCutoff = -COIN_DBL_MAX;
     3569      distanceToCutoff = -COIN_DBL_MAX;
    35293570      // Do at least 5 strong
    35303571      if (numberColumns<1000&&(depth_<15||numberNodes<1000000))
     
    35463587        }
    35473588      int numberTest=numberNotTrusted>0 ? numberStrong : (numberStrong+1)/2;
    3548       int numberTest2 = 2*numberStrong;
    35493589      if (searchStrategy>=3) {
    35503590        // Previously decided we need strong
     
    35553595          numberStrong=CoinMin(6*numberStrong,numberToDo);
    35563596        numberTest = numberStrong;
    3557         numberTest2 *= 2;
    35583597      } else if (searchStrategy==2||(searchStrategy==1&&depth_<6)) {
    35593598        numberStrong *=2;
     
    35653604      } else {
    35663605        numberTest=0;
    3567         skipAll=true;
     3606#ifdef SKIPM1
     3607        if (skipAll==0)
     3608#endif
     3609          skipAll=1;
    35683610      }
    35693611      distanceToCutoff=model->getCutoff()-objectiveValue_;
     
    35803622      }
    35813623      }
    3582       // temp - always switch off
    3583       if (0) {
    3584         int numberIterations = model->getIterationCount();
    3585         int numberStrongIterations = model->numberStrongIterations();
    3586         int numberRows = solver->getNumRows();
    3587         if (numberStrongIterations>numberIterations+CoinMin(100,10*numberRows)&&depth_>=5) {
    3588           skipAll=true;
    3589           newWay=false;
    3590           numberTest=0;
    3591           doQuickly=true;
    3592         }
    3593       }
     3624#ifdef SKIPM1
     3625      // see if switched off
     3626      if (skipAll<0) {
     3627        newWay=false;
     3628        numberTest=0;
     3629        doQuickly=true;
     3630      }
     3631#endif
    35943632#if 0
    35953633      // temp - always switch on
     
    35983636        int numberStrongIterations = model->numberStrongIterations();
    35993637        if (2*numberStrongIterations<numberIterations||depth_<=5) {
    3600           skipAll=false;
     3638          skipAll=0;
    36013639          newWay=false;
    36023640          numberTest=CoinMax(numberTest,numberStrong);
     
    36063644#endif
    36073645      px[0]=numberTest;
    3608       px[1]=numberTest2;
     3646      px[1]=0;
    36093647      px[2]= doQuickly ? 1 : -1;
    36103648      px[3]=numberStrong;
    36113649      if (!newWay) {
    36123650        if (numberColumns>8*solver->getNumRows()&&false) {
    3613           printf("skipAll %c doQuickly %c numberTest %d numberTest2 %d numberNot %d\n",
    3614                  skipAll ? 'Y' : 'N',doQuickly ? 'Y' : 'N',numberTest,numberTest2,numberNotTrusted);
     3651          printf("skipAll %c doQuickly %c numberTest %d numberNot %d\n",
     3652                 skipAll ? 'Y' : 'N',doQuickly ? 'Y' : 'N',numberTest,numberNotTrusted);
    36153653          numberTest = CoinMin(numberTest,model->numberStrong());
    3616           numberTest2 = CoinMin(numberTest2,model->numberStrong());
    3617           printf("new test,test2 %d %d\n",numberTest,numberTest2);
     3654          printf("new test %d\n",numberTest);
    36183655        }
    36193656      }
    3620       //printf("skipAll %c doQuickly %c numberTest %d numberTest2 %d numberNot %d\n",
    3621       //   skipAll ? 'Y' : 'N',doQuickly ? 'Y' : 'N',numberTest,numberTest2,numberNotTrusted);
    36223657      // See if we want mini tree
    36233658      bool wantMiniTree=false;
     
    36363671        saveLimit2=200;
    36373672        solver->setIntParam(OsiMaxNumIterationHotStart,saveLimit2);
     3673      }
     3674#endif
     3675#ifdef SKIPM1
     3676      if (skipAll<0)
     3677        numberToDo=1;
     3678#endif
     3679#ifdef DO_ALL_AT_ROOT
     3680      if (!numberNodes) {
     3681        printf("DOX %d test %d unsat %d - nobj %d\n",
     3682               numberToDo,numberTest,numberUnsatisfied_,
     3683               numberObjects);
     3684        numberTest=numberToDo;
    36383685      }
    36393686#endif
     
    36983745        if (sort[iDo]<distanceToCutoff)
    36993746          canSkip=0;
    3700         if (((numberTest2<=0&&numberTest<=0)||skipAll)&&sort[iDo]>distanceToCutoff) {
     3747        if ((numberTest<=0||skipAll)&&sort[iDo]>distanceToCutoff) {
    37013748          canSkip=1; // always skip
    37023749          if (iDo>20) {
     3750#ifdef DO_ALL_AT_ROOT
     3751            if (!numberNodes)
     3752              printf("DOY test %d - iDo %d\n",
     3753                     numberTest,iDo);
     3754#endif
    37033755            if (!choiceObject) {
    37043756              delete choice.possibleBranch;
     
    37093761        }
    37103762#else
    3711         if (((numberTest2<=0&&numberTest<=0)||skipAll)&&sort[iDo]>distanceToCutoff) {
     3763        if ((numberTest<=0||skipAll)&&sort[iDo]>distanceToCutoff) {
    37123764          //canSkip=1; // always skip
    37133765          if (iDo>20) {
     3766#ifdef DO_ALL_AT_ROOT
     3767            if (!numberNodes)
     3768              printf("DOY test %d - iDo %d\n",
     3769                     numberTest,iDo);
     3770#endif
    37143771            if (!choiceObject) {
    37153772              delete choice.possibleBranch;
     
    37223779        if (model->messageHandler()->logLevel()>3&&numberBeforeTrust&&dynamicObject)
    37233780          dynamicObject->print(1,choice.possibleBranch->value());
    3724         // was if (!canSkip)
    3725         if (newWay)
    3726         numberTest2--;
     3781#ifdef SKIPM1
     3782        if (skipAll<0)
     3783          canSkip=true;
     3784#endif
    37273785        if (!canSkip) {
    37283786          //#ifndef RANGING
     
    37363794          assert (!couldChooseFirst);
    37373795          numberTest--;
    3738           if (!newWay)
    3739           numberTest2--;
    37403796          // just do a few
    37413797#if NODE_NEW == 5  || NODE_NEW == 2
     
    38913947            solver->markHotStart();
    38923948          }
    3893           //printf("Down on %d, status is %d, obj %g its %d cost %g finished %d inf %d infobj %d\n",
    3894           //printf("Down on %d, status is %d, obj %g its %d cost %g finished %d inf %d infobj %d\n",
    3895           //     choice.objectNumber,iStatus,newObjectiveValue,choice.numItersDown,
    3896           //     choice.downMovement,choice.finishedDown,choice.numIntInfeasDown,
    3897           //     choice.numObjInfeasDown);
     3949#ifdef DO_ALL_AT_ROOT
     3950          if (!numberNodes)
     3951          printf("Down on %d, status is %d, obj %g its %d cost %g finished %d inf %d infobj %d\n",
     3952               choice.objectNumber,iStatus,newObjectiveValue,choice.numItersDown,
     3953               choice.downMovement,choice.finishedDown,choice.numIntInfeasDown,
     3954               choice.numObjInfeasDown);
     3955#endif
    38983956         
    38993957          // repeat the whole exercise, forcing the variable up
     
    40234081          }
    40244082         
    4025           //printf("Up on %d, status is %d, obj %g its %d cost %g finished %d inf %d infobj %d\n",
    4026           //     choice.objectNumber,iStatus,newObjectiveValue,choice.numItersUp,
    4027           //     choice.upMovement,choice.finishedUp,choice.numIntInfeasUp,
    4028           //     choice.numObjInfeasUp);
     4083#ifdef DO_ALL_AT_ROOT
     4084          if (!numberNodes)
     4085          printf("Up on %d, status is %d, obj %g its %d cost %g finished %d inf %d infobj %d\n",
     4086               choice.objectNumber,iStatus,newObjectiveValue,choice.numItersUp,
     4087               choice.upMovement,choice.finishedUp,choice.numIntInfeasUp,
     4088               choice.numObjInfeasUp);
     4089#endif
    40294090        }
    40304091   
     
    44384499  model->incrementStrongInfo(numberStrongDone,numberStrongIterations,
    44394500                             anyAction==-2 ? 0:numberToFix,anyAction==-2);
     4501#if 0
     4502  if (!numberNodes&&!model->parentModel()) {
     4503    printf("DOZ %d strong, %d iterations, %d unfinished\n",
     4504           numberStrongDone,numberStrongIterations,numberUnfinished);
     4505    if (numberUnfinished>10&&4*numberUnfinished>numberStrongDone)
     4506    /model->setNumberBeforeTrust(CoinMin(numberBeforeTrust,5));
     4507  }
     4508#endif
    44404509  if (!newWay) {
    44414510  if (((model->searchStrategy()+1)%1000)==0) {
Note: See TracChangeset for help on using the changeset viewer.