• No results found

Obtaining feasible solutions

this relaxed problem may involve a huge number of binary and integer decision variables, which causes difficulties in the solution process.

In order to enhance the previous formulation, we include some new constraints. First, we can add upper bounds on variablesxijlk, considering

the maximum number of productsithat can fit into a shipper boxj, which can be done using simple upper bounds from the pallet loading problem. We have used the upper bounds proposed by Barnes [7].

Second, we can add a set of constraints to this formulation:

I X i=1 vixijl−1k ≤ I X i=1 vixijlk ∀j, k, l= 1, .., qj (2.30)

thus forcing the different copies of each shipper type to be used in non- decreasing order of occupied volume.

Finally, we have used Dual Feasible Functions ( [34]) and Data-Dependent Dual Feasible Functions ( [17]). These functions modify the dimensions of the pieces and these modified dimensions can be used to generate new volume constraints (2.25). We include a new constraint if the modified volume of at least one piece is greater than its original volume.

The solution of this model, including the three enhancements, is a lower bound denoted asLB4.

2.5

Obtaining feasible solutions

In order to obtain feasible solutions we use the model described in Section 2.3. As this model involves a huge number of variables and cannot be solved by directly using an integer linear programming code, we follow a procedure which is performed in two phases. First, we solve the model us- ing only a selected subset of shipper types and cutting patterns, and sec- ond, we improve the solution obtained by applying several improvement

strategies. In this section we describe some ways of selecting the shipper types and in Section 2.6 we describe the improvement procedures.

In Subsection 2.5.1 we build a reduced number of patterns for each shipper type by using several constructive algorithms. In Subsection 2.5.2 we initially consider all possible shipper types and then apply some reduc- tion strategies to obtain a subset of manageable size.

2.5.1

Generating packing patterns

It is usually not possible to generate the complete set of patterns for each orderkand each shipper typejin a given instance, so we have to generate a subset of patterns heuristically. We have to achieve a balance between the number of patterns generated and the quality of the patterns. If we use very few patterns, the model is easy to solve but the solution can be very poor. If we include an extensive set of patterns, the model is very difficult to solve.

To generate the patterns we use well-known algorithms for the container loading problem and the bin packing problem.

• For each product iwe generate a pattern by packing as many items of i as possible and filling the remaining space with other products. This producesI packing patterns.

• We generate another pattern using the constructive heuristic for the container loading problem by Parre ˜no et al. [73] with all the products. • We generate furtherI patterns using again the constructive heuristic by Parre ˜no et al. [73] for the container loading problem with all the products except one product in turn.

• We use the constructive algorithm for the bin packing problem by Parre ˜no et al. [75]. This algorithm can generate several patterns, one for each bin (nbins).

2.5. Obtaining feasible solutions 35 Using these procedures we generate at most 2∗I+ 1 +nbins. In the formulation we will only include non-dominated patterns for each shipper type and each order.

2.5.2

Reducing the set of possible shipper types

We consider several ways of choosing a subset of shippers. Let us sup- pose that we have the set of possible shippers ordered by non-decreasing volume.

• Selecting a representative set

If we want to select a given percentage δ of shipper types approxi- mately, we take the first one from the list, with volumeV1. Then we go through the list and take the first shipper type whose volume is greater than (1 +δ/100)V1 or that does not include the previously selected shipper type. The newly selected shipper type is now the reference and the process is repeated until all the elements on the list have been considered. For instance if δ = 25%, L = W = {10,11,12,14} and H = 10, the first shipper type in the ordered list would be(10,10,10), withV1 = 1000. It would be chosen and taken as a reference. The next element chosen would be(12,11,10), because its volume exceedsV1 by more than 125%. Taking(12,11,10)as the new reference, the ship- per type (11,12,10) would be chosen next because it is not included in the previously selected one.

• Selecting shipper types with low waste

In Section 2.4.1 we calculatedVjk as the maximum volume that order

k can use from shipper typej. We define Vjmax = maxk{Vjk} as the

maximum volume of shipper typejthat can be occupied by any order. We select only shipper typesj for which

that is, those shipper types for which there is at least one order that could fill at least100(1−λ)% of its volume. The lower the value ofλ, the stricter the selection.

• Selecting shipper types with high occupancy

In the previous subsection we generated several patterns for each order k and each shipper type j. We define Hjmax as the maximum volume that can be occupied with any of the patterns generated for this shipper typej. Then, we select only those shipper types for which Hmax

j /Vj ≥ β. In this case, the greater the value of β, the fewer the

shipper types selected.

With the packing patterns generated in Section 2.5.1 and the subset of shippers selected using one of the alternatives described, we can solve the model of Section 2.3 and obtain a feasible solution for the original problem. The feasible solution gives us information about thepshipper types chosen and also about the way in which the products in each order k are packed into these shippers, using some of the packing patterns included in the formulation.