Ignore:
Timestamp:
Jan 19, 2018 10:12:47 AM (3 years ago)
Author:
forrest
Message:

changes for SC

File:
1 edited

Legend:

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

    r2355 r2357  
    43034303        goToDantzig(100, savePivotMethod);
    43044304#endif
     4305        //#define REPORT_DYNAMIC 2
     4306#if REPORT_DYNAMIC
     4307        if (numberNodes_&&!parentModel_&&(tree_->empty()||(numberNodes_%10000)==0)) {
     4308          // Get average up and down costs
     4309          double averageUp = 0.0;
     4310          double averageDown = 0.0;
     4311          int numberUp = 0;
     4312          int numberDown = 0;
     4313          int minTimesDown = COIN_INT_MAX;
     4314          int maxTimesDown = 0;
     4315          int neverBranchedDown = 0;
     4316          int infeasibleTimesDown = 0;
     4317          int minTimesUp = COIN_INT_MAX;
     4318          int maxTimesUp = 0;
     4319          int infeasibleTimesUp = 0;
     4320          int neverBranchedUp = 0;
     4321          int neverBranched = 0;
     4322          int i;
     4323          int numberInts=0;
     4324          bool endOfSearch = tree_->empty();
     4325          int  numberUp2 = 0;
     4326          int numberDown2 = 0;
     4327          for ( i = 0; i < numberObjects_; i++) {
     4328            OsiObject * object = object_[i];
     4329            CbcSimpleIntegerDynamicPseudoCost * dynamicObject =
     4330              dynamic_cast <CbcSimpleIntegerDynamicPseudoCost *>(object) ;
     4331            if (dynamicObject) {
     4332              numberInts++;
     4333              if (dynamicObject->numberTimesUp()||
     4334                  dynamicObject->numberTimesDown()) {
     4335                int  nUp = 0;
     4336                int nDown = 0;
     4337                double up = 0.0;
     4338                double down = 0.0;
     4339                if (dynamicObject->numberTimesUp()) {
     4340                  numberUp++;
     4341                  nUp = dynamicObject->numberTimesUp();
     4342                  minTimesUp = CoinMin(minTimesUp,nUp);
     4343                  maxTimesUp = CoinMax(maxTimesUp,nUp);
     4344                  up = dynamicObject->upDynamicPseudoCost();
     4345                  averageUp += up;
     4346                  numberUp2 += nUp;
     4347                  infeasibleTimesUp += dynamicObject->numberTimesUpInfeasible();
     4348                } else {
     4349                  neverBranchedUp++;
     4350                }
     4351                if (dynamicObject->numberTimesDown()) {
     4352                  numberDown++;
     4353                  nDown = dynamicObject->numberTimesDown();
     4354                  minTimesDown = CoinMin(minTimesDown,nDown);
     4355                  maxTimesDown = CoinMax(maxTimesDown,nDown);
     4356                  down = dynamicObject->downDynamicPseudoCost();
     4357                  averageDown += down;
     4358                  numberDown2 += dynamicObject->numberTimesDown();
     4359                  infeasibleTimesDown += dynamicObject->numberTimesDownInfeasible();
     4360                } else {
     4361                  neverBranchedDown++;
     4362                }
     4363#if REPORT_DYNAMIC > 1
     4364#if REPORT_DYNAMIC == 2
     4365                if (endOfSearch&&numberIntegers_<400) {
     4366#elif REPORT_DYNAMIC == 3
     4367                if (endOfSearch) {
     4368#else
     4369                  {
     4370#endif
     4371                  dynamicObject->print(0,0.0);
     4372                }
     4373#endif
     4374              } else {
     4375                neverBranched++;
     4376#if REPORT_DYNAMIC > 2
     4377#if REPORT_DYNAMIC == 3
     4378                if (endOfSearch&&numberIntegers_<400) {
     4379#elif REPORT_DYNAMIC == 4
     4380                if (endOfSearch) {
     4381#else
     4382                  {
     4383#endif
     4384                  printf("col %d - never branched on\n",dynamicObject->columnNumber());
     4385                }
     4386#endif
     4387              }
     4388            }
     4389          }
     4390          if (numberUp)
     4391            averageUp /= static_cast<double> (numberUp);
     4392          else
     4393            averageUp = 0.0;
     4394          if (numberDown)
     4395            averageDown /= static_cast<double> (numberDown);
     4396          else
     4397            averageDown = 0.0;
     4398          printf("Report for %d variables (%d never branched on) after %d nodes - total solves down %d up %d\n",
     4399                 numberInts,neverBranched,numberNodes_,numberDown2,numberUp2);
     4400          if ((neverBranchedDown||neverBranchedUp)&&endOfSearch)
     4401            printf("odd %d never branched down and %d never branched up\n",
     4402                   neverBranchedDown,neverBranchedUp);
     4403          printf("down average %g times (%d infeasible) average increase %g min/max times (%d,%d)\n",
     4404                 static_cast<double>(numberDown2)/numberDown,infeasibleTimesDown,averageDown,
     4405                 minTimesDown,maxTimesDown);
     4406          printf("up average %g times (%d infeasible) average increase %g min/max times (%d,%d)\n",
     4407                 static_cast<double>(numberUp2)/numberUp,infeasibleTimesUp,averageUp,
     4408                 minTimesUp,maxTimesUp);
     4409        }
     4410#endif
    43054411        if (tree_->empty()) {
    43064412#ifdef CBC_THREAD
     
    79868092            // Care! We must be careful not to update the same variable in parallel threads.
    79878093            addUpdateInformation(update);
     8094            // update here
     8095            {
     8096              CbcObject * object = dynamic_cast<CbcObject *> (update.object_);
     8097              if (object)
     8098                object->updateInformation(update);
     8099            }
    79888100            //#define CBCMODEL_TIGHTEN_BOUNDS
    79898101#ifdef CBCMODEL_TIGHTEN_BOUNDS
     
    1517915291                    assert (found);
    1518015292#endif
    15181                     //if (object)
    15182                     //assert (object==object_[update->objectNumber_]);
    1518315293                    if (object)
    1518415294                        object->updateInformation(*update);
     
    1709917209                    assert (found);
    1710017210#endif
    17101                     //if (object)
    17102                     //assert (object==object_[update->objectNumber_]);
    1710317211                    if (object)
    1710417212                        object->updateInformation(*update);
Note: See TracChangeset for help on using the changeset viewer.