• Keine Ergebnisse gefunden

Algorithm 7.3

:

AdvBoundingTraversal(Node n )

Data: Found non-dominated bound sets are saved to the multisetL.

Result: FillsLwith the set of non-dominated bound sets. Out ofLwe extractTc. if n6=∅ then

1

if nU B=nLB then

2

Lines 3-7 from algorithm TraverseBFS, listing 7.1.

3

else

4

if |nlef tUB|=∅ then AdvBoundingTraversal(nright);

5

else if |nrightUB|=∅ then AdvBoundingTraversal(nlef t);

6

else

7

if |nlef tUB| ≥ |nrightUB| then

8

/* Check if we have to follow the left subtree */

9

found ← false;

10

if nlef tUB⊆nrightUB then

11

if innlef tUB∃elements crossingD then AdvBoundingTraversal(nlef t);

12

/* nlef tUB was already found, prune this branch. */

16

if ¬ found thenAdvBoundingTraversal(nlef t);

17

/* Check if we have to follow the right subtree */

18

found ← false;

19

if nrightUB ⊆nlef tUB then

20

if innrightUB∃elem. crossingD then AdvBoundingTraversal(nright);

21

/* nrightUB was already found, prune this branch. */

25

if ¬ found thenAdvBoundingTraversal(nlef t);

26

else

27

As lines 9-26, reverse order. First right, then left branch.

28

according new lines are 15-20 inDynamicSearch-Tc replacing lines 15-20 from DynamicInsert-AndSearch-τ. Additionally, at incomplete nodes havingUB6=LB, we replace the lines 8 and 24 fromDynamicInsertAndSearch-τ, where we select the bestbi from the set Φ =UB\LB, that were not yet segmented. Since we have no dual values and each bi must be segmented anyway (since we searchTc), inDynamicSearch-Tc at lines 8 and 23 we simply segment the first element from Φ. The resulting algorithmDynamicSearch-Tc is listed in pseudo code 7.4. The algorithms DynamicAppendNodes(listing 6.7) andDynamicInsertNode(listing 6.6) remain unchanged.

7.4 A Non-Dominated Segmentation Tree

At this point the question, if a segmentation tree containing only non-dominated branches can be built, remains as future work. The non-dominated segmentation tree would be built by inserting allbi sequentially into an empty tree. But at the moment it is unclear, if for each insertedbi can be decided based on the incomplete construction status, if a subtree containingbican be definitely identified as as dominated a priori (and thus must be built) or not.

An algorithm sketch mainly based on checking overlaps of bi at the nodesn was developed.

We only outline the algorithm, since the work was not yet finished. Basis is again the algorithm StaticInsert, listing (6.2). By inserting bi ∈B one by one, we construct only non-dominated branches, and mark the dominated ones with a flag. If a bi generates no new non-dominated

7.4. A Non-Dominated Segmentation Tree Chapter 7. ExtractingTcfrom the Segmentation Tree

Algorithm 7.4

:

DynamicSearch- T

c

(Node n )

Data: Found bound sets are saved to the setL.

Result: FillsLwith the set of non-dominated bound sets. Out ofLwe extractTc. if n6=NULL then

1

if (nleft=∅)AND(nright=∅) then

2

/* Leaf, determine whether to save nLB or if to expand the tree. */

3

if (|nUB|= 0)AND(|nLB|= 0) then

4

/* Don’t save this bound, since it is empty. */

5

else if (|nUB|>0) AND(|nLB|= 0) then

6

/* nLB is empty, expand this branch with first unsegmented bi. */

7

bi←UB1; Ri←(bi,δ)˜;

8

/* Crop and transform negative regions Ri into D. */

9

/* If node n is no leaf, descend with UB-driven traversing strategy.

29

As lines 33-39, reverse order. First right, then left branch.

41

7.4. A Non-Dominated Segmentation Tree Chapter 7. ExtractingTcfrom the Segmentation Tree template arc at some dominated branch, we only add its index to the actual upper bound set.

A dominated branch is unmarked and expanded, if a newbi comes across, that generates a new template arc somewhere in this subtree. Having such a case, elements from the dominated branch, that were not yet segmented, must be re-segmented.

If such a tree can be built, it is an improvement for both the search for Tc and the pricing problem. In both cases, performance may be improved by only creating the (hopefully much smaller) non-dominated branches instead of a full segmentation tree.

Chapter 8

Implementation

This chapter summarizes all implementation specific details. Basis for our implementation is the framework where [ChwRai09] and [Dietzel08] implemented all previous solution strategies. All algorithms have been integrated into this existing framework.

The algorithms have been implemented in C++, compiled and linked with g++-4.1. The ex-isting code makes use of the following libraries: The Standard Template Library (STL) from Silicon Graphics (SGI), theLibrary of Efficient Data types and Algorithms (LEDA)from Algorithmic Solutions GmbH1which collects a variety of algorithms for graph theory and compu-tational geometry, the libraryBoostwhich extendsC++, andILOG CPLEXc 11.2, an optimization software package for solving (among other) linear and integer programs. CPLEX is a state of the art commercial solver software that is able to solve linear and integer programs with millions of variables by using linear and non-linear methods.

8.1 Branch-and-Price Framework

A specialized branch-and-price framework has been integrated into the existing code. Our choice fell uponSolving Constraint Integer Programs (SCIP)[SCIP] developed by theDivision Sci-entific Computing, Department Optimization at theKonrad-Zuse-Zentrum f¨ur Informationstech-nik Berlin in cooperation with TU Braunschweig, TU Darmstadt and Siemens AG. We used SCIP 1.2.0.

This framework implements and provides most algorithms, tools and diagnostics that we need for branch-and-price. SCIP is highly flexible, implemented inCand providesC++wrapper classes which we used for integrating it into the existing code. Most of its features are realized with easily extensible plugins, and include all sorts of constraint handlers, presolvers, branching rules, relaxators and primal heuristics. Interfaces for implementing variable pricers and cut separators exist. SCIP provides facility for constraint integer programming and branch-and-cut-and-price.

The authors note that “SCIP is currently one of the fastest non-commercial mixed integer pro-gramming solvers on the market”.

An introduction toSCIPis [Schwa08]. A detailed description to the framework is [AcBeKoWo08]

and [Achter07], who developed the original framework. The used documentation [Pfe07, Ber07, Ach07, Wolt07, Ach07-2] as well as implementation examples can be found at the website [SCIP].

SCIP also includes the open LP solverSoPlexwhich is, compared to other freeware solvers, very fast, but unfortunately not competitive enough for our purposes. AsSCIPintegrates support and interfaces for other solvers, we choseILOG CPLEXc 11.2 as LP solver.

1Originally byMax Planck Institute for Informatics Saarbr¨ucken.