Changeset 971


Ignore:
Timestamp:
Jun 9, 2008 3:42:08 PM (11 years ago)
Author:
ladanyi
Message:

change how way is set. its value is now the currently processed child (instead of pointing to what will be processed next)

Location:
branches/dynamicbranching
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/dynamicbranching/Makefile

    r966 r971  
    22CXX = g++
    33CXXFLAGS = -g -Wall -I$(COININSTDIR)/include/coin
    4 
    5 NAME = dynamicbranching
    6 SRC     = dynamicbranching.cpp
    7 OBJS    = $(SRC:.cpp=.o)
    84
    95LDFLAGS  = -Wl,-rpath,-L$(COININSTDIR)/lib
     
    1814
    1915
    20 $(NAME): $(OBJS) $(SRC) $(INCL) 
    21         $(CXX) $(OBJS) $(LDFLAGS) -o $(NAME)
     16dynamicbranching: dynamicbranching.o
     17        $(CXX) dynamicbranching.o $(LDFLAGS) -o $@
     18
     19dynamicLL: dynamicLL.o
     20        $(CXX) dynamicbranching.o $(LDFLAGS) -o $@
    2221
    2322clean:
    24         rm -f $(NAME) $(OBJS)
     23        rm -f *.o dynamicbranching dynamicLL
    2524
    2625.cpp.o:
  • branches/dynamicbranching/dynamicbranching.cpp

    r970 r971  
    1010
    1111class DBNodeSimple  {
     12public:
     13  enum DBNodeWay {
     14    DOWN_UP__NOTHING_DONE,
     15    DOWN_UP__DOWN_DONE,
     16    DOWN_UP__BOTH_DONE,
     17    UP_DOWN__NOTHING_DONE,
     18    UP_DOWN__UP_DONE,
     19    UP_DOWN__BOTH_DONE,
     20    WAY_UNSET
     21  };
    1222 
    1323public:
     
    4757  // Branching variable (0 is first integer)
    4858  int variable_;
    49   // Way to branch - -1 down (first), 1 up, -2 down (second), 2 up (second)
     59  // Way to branch: see enum DBNodeWay
    5060  int way_;
    5161  // Number of integers (for length of arrays)
     
    5868  int parent_;
    5969  // Left child
     70  int child0_;
     71  // Right child
    6072  int child1_;
    61   // Right child
    62   int child2_;
    6373  // Previous in chain
    6474  int previous_;
     
    7686  objectiveValue_(COIN_DBL_MAX),
    7787  variable_(-100),
    78   way_(-1),
     88  way_(WAY_UNSET),
    7989  numberIntegers_(0),
    8090  value_(0.5),
    8191  descendants_(-1),
    8292  parent_(-1),
     93  child0_(-1),
    8394  child1_(-1),
    84   child2_(-1),
    8595  previous_(-1),
    8696  next_(-1),
     
    100110  basis_ = basis;
    101111  variable_=-1;
    102   way_=-1;
     112  way_=WAY_UNSET;
    103113  numberIntegers_=numberIntegers;
    104114  value_=0.0;
    105115  descendants_ = 0;
    106116  parent_ = -1;
     117  child0_ = -1;
    107118  child1_ = -1;
    108   child2_ = -1;
    109119  previous_ = -1;
    110120  next_ = -1;
     
    205215    value_=value;
    206216    if (value<=nearest)
    207       way_=1; // up
     217      way_=UP_DOWN__NOTHING_DONE; // up
    208218    else
    209       way_=-1; // down
     219      way_=DOWN_UP__NOTHING_DONE; // down
    210220  } else if (numberStrong) {
    211221    // more than one - choose
     
    316326            value_=value;
    317327            if (upMovement[i]<=downMovement[i])
    318               way_=1; // up
     328              way_=UP_DOWN__NOTHING_DONE; // up
    319329            else
    320               way_=-1; // down
     330              way_=DOWN_UP__NOTHING_DONE; // down
    321331          }
    322332        }
     
    347357      value_=value;
    348358      if (value<=nearest)
    349         way_=1; // up
     359        way_=UP_DOWN__NOTHING_DONE; // up
    350360      else
    351         way_=-1; // down
     361        way_=DOWN_UP__NOTHING_DONE; // down
    352362    }
    353363  }
     
    368378  descendants_ = rhs.descendants_;
    369379  parent_ = rhs.parent_;
     380  child0_ = rhs.child0_;
    370381  child1_ = rhs.child1_;
    371   child2_ = rhs.child2_;
    372382  previous_ = rhs.previous_;
    373383  next_ = rhs.next_;
     
    397407    descendants_ = rhs.descendants_;
    398408    parent_ = rhs.parent_;
     409    child0_ = rhs.child0_;
    399410    child1_ = rhs.child1_;
    400     child2_ = rhs.child2_;
    401411    previous_ = rhs.previous_;
    402412    next_ = rhs.next_;
     
    772782        // do branching variable
    773783        node.incrementDescendants();
    774         if (node.way_<0) {
     784        bool down_branch = true;
     785        switch (node.way_) {
     786        case WAY_UNSET:
     787        case DOWN_UP__BOTH_DONE:
     788        case UP_DOWN__BOTH_DONE:
     789          abort();
     790        case DOWN_UP__NOTHING_DONE:
     791          node.way_ = DOWN_UP__DOWN_DONE;
     792          break;
     793        case DOWN_UP__DOWN_DONE:
     794          node.way_ = DOWN_UP__BOTH_DONE:
     795          down_branch = false;
     796          break;
     797        case UP_DOWN__NOTHING_DONE:
     798          node.way_ = UP_DOWN__UP_DONE:
     799          down_branch = false;
     800          break;
     801        case UP_DOWN__UP_DONE:
     802          node.way_ = UP_DOWN__BOTH_DONE;
     803          break;
     804        }
     805        if (down_branch) {
    775806          model.setColUpper(which[node.variable_],floor(node.value_));
    776           // now push back node if more to come
    777           if (node.way_==-1) {
    778             node.way_=+2;         // Swap direction
    779             branchingTree.push_back(node);
    780           } else if (funnyBranching) {
    781             // put back on tree anyway
    782             branchingTree.push_back(node);
    783           }
    784807        } else {
    785808          model.setColLower(which[node.variable_],ceil(node.value_));
    786           // now push back node if more to come
    787           if (node.way_==1) {
    788             node.way_=-2;         // Swap direction
    789             branchingTree.push_back(node);
    790           } else if (funnyBranching) {
    791             // put back on tree anyway
    792             branchingTree.push_back(node);
    793           }
    794809        }
     810        // put back on tree anyway regardless whether any processing is left
     811        // to be done. We want the whole tree all the time.
     812        branchingTree.push_back(node);
    795813       
    796814        // solve
     
    10391057              // push on stack
    10401058              branchingTree.push_back(newNode);
    1041               if(branchingTree.nodes_[kNode].child1_ < 0)
     1059              if(branchingTree.nodes_[kNode].child0_ < 0)
     1060                branchingTree.nodes_[kNode].child0_ = branchingTree.last_;
     1061              else
    10421062                branchingTree.nodes_[kNode].child1_ = branchingTree.last_;
    1043               else
    1044                 branchingTree.nodes_[kNode].child2_ = branchingTree.last_;
    10451063#if 0
    10461064              } else {
Note: See TracChangeset for help on using the changeset viewer.