10/19/03 1 augmenting coin/sbb with a variety of node selection strategies gabrielle assunta grün...
TRANSCRIPT
10/19/03
1
Augmenting COIN/Sbb with a Variety of Node Selection
StrategiesGabrielle Assunta Grün
Simon Fraser University
Gabrielle Grun:
Initially, as a part of my Ph.D. research, I
attempted to implement the gamut of node
selection strategies in the
commercial CPLEX (it is too inflexible and the
critical parts of the code are
inaccessible), the open source
SYMPHONY (it is not as current and as widely used as
COIN) and COIN/BCP. Prior to working with COIN, I had no experience with
C++. The documentation for
using and compiling BCP was inaccurate
and out-of-date. It was very
frustrating just getting the
unaltered BCP code to compile in
the CSSNet environment. In addition, BCP is
merely a framework, not an actual branch and
bound code. I joined the coin-announce, coin-
discuss, etc. mail-lists on November
15th, 2002.
When I came across the
announcement of the launching of a branch and bound code which is less complicated than
BCP, namely Sbb, on January 7th, 2003, I was
quite excited. The coding contest
was mentioned in the same coin-announce digest, and when I found
out that the modifications that
I intended to make to Sbb qualified as a
contest submission, I
decided to work towards entering the contest. Even with Sbb, there was a paucity of documentation, and there were incompatibilities
with the computing
environment at SFU. However, I received some assistance with
the technical difficulties from the COIN-OR
community---John Forrest and
(Laszlo Ladanyi. I
Gabrielle Grun:
Initially, as a part of my Ph.D. research, I
attempted to implement the gamut of node
selection strategies in the
commercial CPLEX (it is too inflexible and the
critical parts of the code are
inaccessible), the open source
SYMPHONY (it is not as current and as widely used as
COIN) and COIN/BCP. Prior to working with COIN, I had no experience with
C++. The documentation for
using and compiling BCP was inaccurate
and out-of-date. It was very
frustrating just getting the
unaltered BCP code to compile in
the CSSNet environment. In addition, BCP is
merely a framework, not an actual branch and
bound code. I joined the coin-announce, coin-
discuss, etc. mail-lists on November
15th, 2002.
When I came across the
announcement of the launching of a branch and bound code which is less complicated than
BCP, namely Sbb, on January 7th, 2003, I was
quite excited. The coding contest
was mentioned in the same coin-announce digest, and when I found
out that the modifications that
I intended to make to Sbb qualified as a
contest submission, I
decided to work towards entering the contest. Even with Sbb, there was a paucity of documentation, and there were incompatibilities
with the computing
environment at SFU. However, I received some assistance with
the technical difficulties from the COIN-OR
community---John Forrest and
(Laszlo Ladanyi. I
10/19/03
7
Node Selection Strategies (1)
• Note an * signifies that the node selection technique was already present in the unaltered Sbb (simple branch and bound) developed by John Forrest.
• Each strategy is implemented as a class with a function test that returns true if given two nodes, x and y, y is preferable and false otherwise.
• Static techniques– DFS * (implemented as the SbbCompareDepth class
in SbbCompareActual.hpp)—select as dfs in enum comparisonStrategies_t defined in SbbEnum.hpp; advantageous as int feasible solutions are usually found deeper in the search tree
Gabrielle Grun:
DFS and breadth use the depth method/field of the SbbNode class to access the depth of a node. BFS uses the objectiveValue method/field to defined in SbbNode.hpp to assess the objective function value of a mode.
Hereafter, each technique will be followed by an ordered pair representing the name of the class in SbbCompareActual.hpp for all strategies already included in Sbb (excluding user) and SbbCimpareUser.hpp for all user-defined strategies and its value in enum comparisonStrategies_t.
Gabrielle Grun:
DFS and breadth use the depth method/field of the SbbNode class to access the depth of a node. BFS uses the objectiveValue method/field to defined in SbbNode.hpp to assess the objective function value of a mode.
Hereafter, each technique will be followed by an ordered pair representing the name of the class in SbbCompareActual.hpp for all strategies already included in Sbb (excluding user) and SbbCimpareUser.hpp for all user-defined strategies and its value in enum comparisonStrategies_t.
10/19/03
8
Node Selection Strategies (2)
– BFS * (SbbCompareObjective, bfs) ; minimizes superfluous nodes
– Random choice (SbbCmpareRandom, randomChoice); to compare with more intelligent choices
– Breadth (SbbCmpareBreadth, breadth)
Gabrielle Grun:
Gabrielle Grun:
10/19/03
9
Node Selection Strategies (3)
• Non-objective function value estimates---metrics intended to lead to good int sols
– Number of integer infeasibilities • (SbbCmpareOriNumUnsatisfied, oriNumUnsatisfied) • (SbbCmpareNumUnsatisfiedMod, numUnsatisfiedMod);
differs from oriNumUnsatisfied in the computation for cliques (for simple integers, the computation is the same); ;each member variable of a clique is considered individually
– Sum of integer infeasibilities • (SbbCmpareSumUnsatisfied, sumUnsatisfied)• sumUnsatisfiedMod is similar to numUnsatisfiedMod
Gabrielle Grun:
An extra field was added to the SbbNode class—estimates, a map of enum estimates_t (an enumeration type representing all estimate strategies, although the map is only utilized for rnumUnsatisfiedMod, sumUnsatisfiedMod, sumUnsatisfied, AVVInfPart, AVVIntPart and the pseudocost estimates) to double. The values for estimates are assigned in the choseBranch method of SbbNode.cpp (where numberUnsatisfied is also assigned a value). The values for numUnsatisfiedMod, sumUnsatisfiedMod, ssumUnsatisfied, AVVInfPart, and AVVIntPart are computed with the help of the getDistanceAndAllowableVariableValues method (adapted from the unfeasibility method) for both SbbClique and SbbSimpleInteger in SbbBranchActual.cpp. At the time of the contest, there was only one choice for the sum of integer infeasibilities. In its functioning, it was like the current sumUmsatisfiedMod but it was referred to as sumUnsatisfied. Note that while the numberUnsatisfied field originally existed in the SbbNode class, it did not form the basis of its own node selection strategy.
Gabrielle Grun:
An extra field was added to the SbbNode class—estimates, a map of enum estimates_t (an enumeration type representing all estimate strategies, although the map is only utilized for rnumUnsatisfiedMod, sumUnsatisfiedMod, sumUnsatisfied, AVVInfPart, AVVIntPart and the pseudocost estimates) to double. The values for estimates are assigned in the choseBranch method of SbbNode.cpp (where numberUnsatisfied is also assigned a value). The values for numUnsatisfiedMod, sumUnsatisfiedMod, ssumUnsatisfied, AVVInfPart, and AVVIntPart are computed with the help of the getDistanceAndAllowableVariableValues method (adapted from the unfeasibility method) for both SbbClique and SbbSimpleInteger in SbbBranchActual.cpp. At the time of the contest, there was only one choice for the sum of integer infeasibilities. In its functioning, it was like the current sumUmsatisfiedMod but it was referred to as sumUnsatisfied. Note that while the numberUnsatisfied field originally existed in the SbbNode class, it did not form the basis of its own node selection strategy.
10/19/03
10
Node Selection Strategies (4)
– The ratio of the sum of integer infeasibilities to the number of integer infeasibilities (SbbCompareRatioSumToNumUnsatisfiedMod, ratioSumToNumUnsatisfiedMod)
– The weighted addition of the sum of integer infeasibilities to the number of integer infeasibilities (SbbCompareWeightedSumToNumUnsatisfiedMod, weightedSumToNumUnsatisfiedMod)
– Minimum allowable variable values (SbbCompareAllowableVariableValues, AVVInfPart or AVVIntPart)
10/19/03
11
Node Selection Strategies (5)
• Direct objective function value estimates---the best objective function value from a node and its descendants given integrality– Heuristic estimate * (SbbCompareEstimate,
heuristicEstimate) – Best projection (SbbCompareProE, ProE) – Best projection using the number of integer
infeasibilities instead of the sum (SbbCompareProNumE, ProNumE)
Gabrielle Grun:
The heuristic estimate uses the guessedObjectiveValue field in the SbbNode class
which is assigned in SbbModel.cpp making use of the
SbbHeuristic class. The
computation of the projection
estimates in the computeValue method of the
SbbObjEstimate class of the
SbbCompareUser.hpp file utilizes
the objective function value and
the sum (or number) of
integer infeasibilities of
the node and the root node as well as the best int solution so far
(the method takes two arguments, a
pointier to a SbbNode and a
pointer to a SbbModel).
Gabrielle Grun:
The heuristic estimate uses the guessedObjectiveValue field in the SbbNode class
which is assigned in SbbModel.cpp making use of the
SbbHeuristic class. The
computation of the projection
estimates in the computeValue method of the
SbbObjEstimate class of the
SbbCompareUser.hpp file utilizes
the objective function value and
the sum (or number) of
integer infeasibilities of
the node and the root node as well as the best int solution so far
(the method takes two arguments, a
pointier to a SbbNode and a
pointer to a SbbModel).
10/19/03
12
Node Selection Strategies (6)
– Pseudocost estimates• Standard pseudocost estimate
(SbbComparePseudoE, PseudoE) • Altered pseudocost estimate taking the
average (minimum or maximum) of objective value differences caused by rounding of integer variables as a group (SbbCompareDiffPseudoAver(Min or Max)E, DiffPseudoAver(Min or Max)E )
Gabrielle Grun:
The pseudocost estimates were not fully implemented at the time of the contest. The computation of the standard pseudocost estimate in SbbNode.cpp is aided bib the computeDownPseudo and computeUpPseudo methods (the calculation of the midfield pseudocost estimates is supported by the setDownPseudo, setUpPseudo and setRandPseudo method) in SbbBranchActual.cpp for both cliques and simple integers. Note that for cliques, there was a choice to treat the member variables as a group or indistinctly. Since all the integer variables are already regarded as a group wig\th the altered pseudocost estimates, the variables in a clique are dealt with separately for the standard psuidupckost estimate.
Gabrielle Grun:
The pseudocost estimates were not fully implemented at the time of the contest. The computation of the standard pseudocost estimate in SbbNode.cpp is aided bib the computeDownPseudo and computeUpPseudo methods (the calculation of the midfield pseudocost estimates is supported by the setDownPseudo, setUpPseudo and setRandPseudo method) in SbbBranchActual.cpp for both cliques and simple integers. Note that for cliques, there was a choice to treat the member variables as a group or indistinctly. Since all the integer variables are already regarded as a group wig\th the altered pseudocost estimates, the variables in a clique are dealt with separately for the standard psuidupckost estimate.
10/19/03
13
Node Selection Strategies (7)
• Indirect objective function value estimates– Norm estimate (SbbCompareNormE, NormE)– Second norm estimate (SbbCompareNorm2E,
Norm2E) – Third norm estimate (SbbCompareNorm3E,
Norm3E) – Alternate norm estimate (SbbCompareAltNormE,
AltNormE)– Second alternate norm estimate
(SbbCompareAltNorm2E, AltNorm2E) – Third alternate norm estimate
(SbbCompareAltNorm3E, AltNorm3E)
Gabrielle Grun:
A norm estimate makes use of a direct objective function value estimate, so the type of this estimate has to be specified.
The following files alone have been modified or added to COIN/Sbb: SbbEnum.hpp, StringConv.h, SbbBranchActual.cpp, SbbBranchActual.hpp, SbbBranchBase.cpp, SbbBranchBase.hpp, SbbModel.cpp, SbbModel.hpp, SbbNode.cpp, SbbNode.hpp, (SbbMessage.hpp after the contest submission) sample2.cpp, runtimes, and Makefile (Makefile.sample2). The following fields were added to the SbbModel class: number of infeasibilities at continuous modified for cliques= int continuousInfeasibilitiesMod_, the type of objective based estimate for a norm estimate= enum objEstimate_t objEstimateForNorm_, sum of infeasibilities at continuous= double ontinuousSumInfeasibilities, modified sum of infeasibilities at continuous (after the contest)= double ontinuousSumInfeasibilitiesMod, number of integer nodes= int umberIntegerNodes_,
number of times upper bound (best int sol) changed= int timesUpperBoundChanged_, optimality gap (after the contest)= double opt Gap_.
Gabrielle Grun:
A norm estimate makes use of a direct objective function value estimate, so the type of this estimate has to be specified.
The following files alone have been modified or added to COIN/Sbb: SbbEnum.hpp, StringConv.h, SbbBranchActual.cpp, SbbBranchActual.hpp, SbbBranchBase.cpp, SbbBranchBase.hpp, SbbModel.cpp, SbbModel.hpp, SbbNode.cpp, SbbNode.hpp, (SbbMessage.hpp after the contest submission) sample2.cpp, runtimes, and Makefile (Makefile.sample2). The following fields were added to the SbbModel class: number of infeasibilities at continuous modified for cliques= int continuousInfeasibilitiesMod_, the type of objective based estimate for a norm estimate= enum objEstimate_t objEstimateForNorm_, sum of infeasibilities at continuous= double ontinuousSumInfeasibilities, modified sum of infeasibilities at continuous (after the contest)= double ontinuousSumInfeasibilitiesMod, number of integer nodes= int umberIntegerNodes_,
number of times upper bound (best int sol) changed= int timesUpperBoundChanged_, optimality gap (after the contest)= double opt Gap_.
10/19/03
14
Node Selection Strategies (8)
• Multi-phase strategies---find good int sols in the first phase, and in the next phases, prove that no better solutions exist – Default * (SbbCompareDefault, defaultWay); before first
integer solution, SbbCompareDepth is used, afterward a modified ProNumE with 98% of the cost of integrality (not 100%)
– User * (SbbCompareUser, user); before first int sol or rounded sol, choose by numberUnsatisfied ((if equal, decide by depth), after 1 to 5 int sols, modified ProNumE as above, more than 5 int sols, BFS
– User using sum of integer infeasibilities instead of the infeasibility count (SbbCompareUserSumUnsatisfied, sumUnsatisfied)
10/19/03
15
Future Work (1)
• Enhancing Sbb with a full spectrum of diving technique– compare the performance of the different diving
strategies to determine which approach is best under what conditions
• Applying machine learning to chose the right node selection method:– Within a problem instance
• Saaty’s Theory of Hierarchies and Eigenvectors analysis for decision-making using raw performance data as preferences
Gabrielle Grun:
Diving occurs when one of the
two children resulting from branching is
selected rather than adding the children to the active list and
selecting a mode from the
candidate list. Advantages: into feasible solutions
are usually deeper in tree and
minimal context switching,
Gabrielle Grun:
Diving occurs when one of the
two children resulting from branching is
selected rather than adding the children to the active list and
selecting a mode from the
candidate list. Advantages: into feasible solutions
are usually deeper in tree and
minimal context switching,