Ignore:
File:
1 edited

Legend:

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

    r2023 r2097  
    364364{
    365365    x->setNodeNumber(maximumNodeNumber_);
     366    lastObjective_ = x->objectiveValue();
     367    lastDepth_ = x->depth();
     368    lastUnsatisfied_ = x->numberUnsatisfied();
    366369    maximumNodeNumber_++;
    367370#   if CBC_DEBUG_HEAP > 2
     
    568571        if (value >= cutoff || !node->active()) {
    569572            if (node) {
     573                if (cutoff<-1.0e30)
     574                  node->nodeInfo()->deactivate(7);
    570575                nodeArray[--kDelete] = node;
    571576                depth[kDelete] = node->depth();
     
    617622    for (j = nNodes - 1; j >= kDelete; j--) {
    618623        CbcNode * node = nodeArray[j];
    619         CoinWarmStartBasis *lastws = model->getEmptyBasis() ;
     624        CoinWarmStartBasis *lastws = (cutoff!=-COIN_DBL_MAX) ? model->getEmptyBasis() : NULL;
    620625
    621626        model->addCuts1(node, lastws);
     
    624629        //assert (node->nodeInfo());
    625630        int numberLeft = (node->nodeInfo()) ? node->nodeInfo()->numberBranchesLeft() : 0;
    626         int i;
    627         for (i = 0; i < model->currentNumberCuts(); i++) {
     631        if (cutoff != -COIN_DBL_MAX) {
     632          // normal
     633          for (int i = 0; i < model->currentNumberCuts(); i++) {
    628634            // take off node
    629635            CoinWarmStartBasis::Status status =
     
    631637            if (status != CoinWarmStartBasis::basic &&
    632638                    model->addedCuts()[i]) {
    633                 if (!model->addedCuts()[i]->decrement(numberLeft))
     639                  if (!model->addedCuts()[i]->decrement(numberLeft))
    634640                    delete model->addedCuts()[i];
    635641            }
    636         }
     642          }
     643        } else {
     644          // quick
     645          for (int i = 0; i < model->currentNumberCuts(); i++) {
     646            // take off node
     647            if (model->addedCuts()[i]) {
     648                if (model->parallelMode()!=1||true) {
     649                  if (!model->addedCuts()[i]->decrement(numberLeft))
     650                    delete model->addedCuts()[i];
     651                }
     652            }
     653          }
     654        }
     655#ifdef CBC_THREAD
     656        if (model->parallelMode() > 0 && model->master()) {
     657          // delete reference to node
     658          int numberThreads = model->master()->numberThreads();
     659          for (int i=0;i<numberThreads;i++) {
     660            CbcThread * child = model->master()->child(i);
     661            if (child->createdNode()==node)
     662              child->setCreatedNode(NULL);
     663          }
     664        }
     665#endif
    637666        // node should not have anything pointing to it
    638667        if (node->nodeInfo())
     
    651680        CbcThread * child = master->child(i);
    652681        if (child->node()) {
     682          double value = child->node()->objectiveValue();
    653683          // adjust
    654           double value = child->node()->objectiveValue();
    655684          bestPossibleObjective = CoinMin(bestPossibleObjective, value);
    656685        }
     
    734763        if (lastNode_->nodeInfo()->parent() == x->nodeInfo()) {
    735764            // x is parent of lastNode_ so put x on heap
    736             //#define CBCTREE_PRINT
     765          //#define CBCTREE_PRINT
    737766#ifdef CBCTREE_PRINT
    738767            printf("pushX x %x (%x at depth %d n %d) is parent of lastNode_ %x (%x at depth %d n %d)\n",
     
    932961        CbcThread * child = master->child(i);
    933962        if (child->node()) {
     963          double value = child->node()->objectiveValue();
    934964          // adjust
    935           double value = child->node()->objectiveValue();
    936965          bestPossibleObjective = CoinMin(bestPossibleObjective, value);
    937966        }
     
    9951024        CbcThread * child = master->child(i);
    9961025        if (child->node()) {
     1026          double value = child->node()->objectiveValue();
    9971027          // adjust
    998           double value = child->node()->objectiveValue();
    9991028          bestPossibleObjective = CoinMin(bestPossibleObjective, value);
    10001029        }
     
    13131342        CbcThread * child = master->child(i);
    13141343        if (child->node()) {
     1344          double value = child->node()->objectiveValue();
    13151345          // adjust
    1316           double value = child->node()->objectiveValue();
    13171346          bestPossibleObjective = CoinMin(bestPossibleObjective, value);
    13181347        }
Note: See TracChangeset for help on using the changeset viewer.