xternal_binpacking.c
Go to the documentation of this file.
31/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
37 * This example contains a branch-and-price approach for the binpacking problem which is realized with the framework
40 * - a \ref reader_bpa.c "problem reader" which parses the problem out of file and creates the corresponding problem within \SCIP
41 * - a \ref probdata_binpacking.c "(global) problem data structure" which contains all necessary information
44 * - a \ref cons_samediff.c "constraint handler" which handles the branching decisions of the Ryan/Foster branching
45 * - a \ref vardata_binpacking.c "variable data structure" which stores information for each variable and is needed to perform the Ryan/Foster
48 * In the following we introduce the problem, explain the use of the reader plugin and pricer plugin. Finally, we
49 * introduce the Ryan/Foster branching rule and briefly discuss how that specific branching rule is realized within
66 * The binpacking problem consists of the task to distribute a given set of items \f$ [n] := \{1, \dots, n\}\f$ with
67 * nonnegative size \f$s_i\f$ to a minimal number of bins, all of the same capacity \f$\kappa\f$. As example consider 9
68 * items with sizes: 2, 1, 2, 1, 1, 2, 3, 2, and 1 and a bin capacity of \f$\kappa\f$ of 4. The following pictures show
69 * a feasible solution which needs 5 bins. The minimum number of bins needed for that example is 3.
75 * This problem can be formulated as a set covering problem as discussed by Gilmore and Gomory in the following two classical papers:
76 * - Gilmore P. C., R. E. Gomory: A linear programming approach to the cutting-stock problem. Operations Research 9 (1961): 849-859.
77 * - Gilmore P. C., R. E. Gomory: A linear programming approach to the cutting-stock problem - Part II. Operations Research 11 (1963): 863-888
79 * We introduce a binary variable \f$x_{S}\f$ for each feasible packing \f$S\f$. A <b>packing</b> \f$S\f$ is an
80 * assignment vector \f$ \lambda_{S}\in\{0,1\}^n \f$ which states the items belonging to that packing. It is
81 * <b>feasible</b>, if and only if the total size of the items contained in this assignment is not greater than the
82 * given capacity \f$\kappa\f$. Let \f$\mathcal{S}\f$ be the set of all feasible packing, this measns:
94 * subject \ to & \displaystyle \sum_{S \in \mathcal{S}} (\lambda_{S})_{i}x_{S} \ge 1 & \quad \forall i \in \{1,\dots,n\} \\
100 * This means we are searching for a set of packings such that each item is contained in at least one of the selected
101 * packings. Since the objective is to minimize the number of used packings, each optimal solution to the above problem
105 * Since \f$\mathcal{S}\f$ can be of exponential size, we are using a column generation approach to solve this
106 * problem. We initialize the (master) problem with a set of \f$ n \f$ variables representing packings of a single item
107 * per bin. Now, we have to iteratively search for variables representing "better" packings, i.e., a packing pattern
108 * which reduces the overall cost. For a given solution \f$y^\star\f$ of the (restricted) dual linear program, we have
109 * to find a variable/packing \f$ \lambda_{S} \f$ for which the reduced costs is negative. This means:
115 * Since all variables \f$ \lambda_{S} \f$ have an objective coefficient \f$ c_{S} = 1 \f$ the above condition is
135 * where \f$ (\lambda_S)_i \f$ for \f$i\in\{1,\dots,n\}\f$ are binary variables and \f$y^\star_i\f$ given by the dual