Dantzig–Wolfe decomposition

From HandWiki
Short description: Algorithm for solving linear programming problems with special structure

Dantzig–Wolfe decomposition is an algorithm for solving (mixed integer) linear programming problems by exploiting their structure. It was originally developed by George Dantzig and Philip Wolfe and initially published in 1960.[1] Many texts on linear programming have sections dedicated to discussing this decomposition algorithm.[2][3][4][5][6][7] Dantzig–Wolfe decomposition can be used to improve the tractability of large-scale linear programs or create a tighter linear relaxation of mixed integer linear programs.

Explanation using column generation

The Dantzig-Wolfe decomposition considers the following initial linear program.

mincTxsubject toAxaBxbx

The decomposition starts by reformulating the problem. the constraint Bxb is equivalently reformulating by writing x as a convex combination of points satisfying Bxb. This leads to the following linear program.

mincTxsubject toAxax=iλixiiλi=1x,λi+or equivalently mincTiλixisubject toAiλixiaiλi=1λi+

Here the new variables λi represent the coefficient in the convex combination, and the coefficients xirepresent the points satisfying Bxb. In order to be exact, the formulation needs to contain one variable λi for each extreme point of the polyhedron induced by Bxb. This is because every point of a non-empty, bounded convex polyhedron can be represented as a convex combination of its extreme points. This leads to an intractable number of variables.

In order to be able to solve this new formulation containing an intractable number of variables, one use the column generation algorithm. This leads to an iterative algorithm where a couple (λi,xi) is generated at every iteration.

Remarque: if the initial problem contains several constraints Axa, Bxb, Cxc ... each of these constraints can be independently reformulated with the Dantzig-Wolfe method. This leads to independent sub-problems in the column generation algorithm. This fact is especially useful when the matrix constraint of the initial problem has a form of block diagonal structure.

The whole algorithm can be summarized as follows.

  1. Initialize the reformulated problem (P) with a small subset of the points xi and their corresponding variables λi;
  2. Find an optimal solution x*of (P);
  3. Search for a point xi satisfying Bxb whose addition to (P) may improve the value of the optimal solution x*;
  4. If such a point exists, add it to (P) and go to Step 2;
  5. Otherwise x*is optimal : stop.

It can be visualized as follows.

Initialization of (P) with a small subset of the points xi (red polyhedron). Black arrow : objective function c; gray poly : Axa; dashed blue poly : Bxb.
Iteration 1. A direction (red arrow) in which to search a new point xi is created with the dual variables of (P). The farthest point in this direction satisfying Bxb is found and added to (P).
Iteration 2. Re-optimization over (P). Then, the farthest point in the dual direction satisfying Bxb is found and added to (P).
The algorithm keeps going until no more improving points can be found.

Exploiting special structure

The main use case for the Dantzig–Wolfe decomposition is when the constraint matrix of the linear program has the following 'almost diagonal' structure visualized below.

File:DW Block Angular Matrix.jpg

Here, the set of constraints D is usually be identified as "connecting", "coupling", or "complicating" constraints. Meanwhile each constraint block Fi is going to be reformulated using the Dantig-Wolfe method. This leads to one sub-problem for each block Fi.

The two main reasons why the Dantzig-Wolfe method works especially well in this case are the following. First, each block Fi only applies to a subset of the variables. This means the corresponding sub-problem will be a lot smaller than the original problem (less constraints and less variables) which means it can be solved faster. Second, although the sub-problem can always be solved independently, in the case of a diagonal structure the sub-problems are usually less linked. Indeed, suppose that F1 and F2 share a variable x1, then they have to 'agree' on the value of x1. This means every time the F1 sub-problem proposes a new point with a different value for x1, the F2 sub-problem also has to generate a new point with an agreeing value for x1. This slows down the overall process.

Implementation

There are examples of the implementation of Dantzig–Wolfe decomposition available in the closed source AMPL[8] and GAMS[9] mathematical modeling software. There are general, parallel, and fast implementations available as open-source software, including some provided by JuMP and the GNU Linear Programming Kit.[10]

The algorithm can be implemented such that the subproblems are solved in parallel, since their solutions are completely independent. When this is the case, there are options for the master program as to how the columns should be integrated into the master. The master may wait until each subproblem has completed and then incorporate all columns that improve the objective or it may choose a smaller subset of those columns. Another option is that the master may take only the first available column and then stop and restart all of the subproblems with new objectives based upon the incorporation of the newest column.

Another design choice for implementation involves columns that exit the basis at each iteration of the algorithm. Those columns may be retained, immediately discarded, or discarded via some policy after future iterations (for example, remove all non-basic columns every 10 iterations).

A (2001) computational evaluation of Dantzig-Wolfe in general and Dantzig-Wolfe and parallel computation is the PhD thesis by J. R. Tebboth[11]

See also

  • Delayed column generation
  • Benders' decomposition

References

  1. George B. Dantzig; Philip Wolfe (1960). "Decomposition Principle for Linear Programs". Operations Research 8: 101–111. doi:10.1287/opre.8.1.101. 
  2. Dimitris Bertsimas; John N. Tsitsiklis (1997). Linear Optimization. Athena Scientific. 
  3. George B. Dantzig; Mukund N. Thapa (1997). Linear Programming 2: Theory and Extensions. Springer. 
  4. Vašek Chvátal (1983). Linear Programming. Macmillan. 
  5. Maros, István; Mitra, Gautam (1996). "Simplex algorithms". in J. E. Beasley. Advances in linear and integer programming. Oxford Science. pp. 1–46. 
  6. Maros, István (2003). Computational techniques of the simplex method. International Series in Operations Research & Management Science. 61. Boston, MA: Kluwer Academic Publishers. pp. xx+325. ISBN 1-4020-7332-1. 
  7. Lasdon, Leon S. (2002). Optimization theory for large systems (reprint of the 1970 Macmillan ed.). Mineola, New York: Dover Publications, Inc.. pp. xiii+523. 
  8. "AMPL code repository with Dantzig–Wolfe example". http://www.ampl.com/NEW/LOOP2/index.html. Retrieved December 26, 2008. 
  9. Kalvelagen, Erwin (May 2003), Dantzig-Wolfe Decomposition with GAMS, http://amsterdamoptimization.com/pdf/dw.pdf, retrieved 2014-03-31 .
  10. "Open source Dantzig-Wolfe implementation". https://sourceforge.net/projects/dwsolver/. Retrieved October 15, 2010. 
  11. Tebboth, James Richard (2001). A computational study of Dantzig-Wolfe decomposition (PhD thesis). University of Buckingham, United Kingdom. https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=6595dee52a57b92b991c23ae2123fe82e4205726.