Keywords

1 Introduction

In the classical formulation, the cutting stock problem (CSP) is stated as follows: there are infinite pieces of stock material of fixed length L. We have to produce \(m \in \mathbb {N}\) groups of pieces of different lengths \(l_1, \cdots , l_m\) and demanded quantities \(b_1, \cdots , b_m\) by cutting initial pieces of stock material in such a way that the number of used initial pieces is minimized.

The cutting stock problem is one of the earliest problems that have been studied through methods of operational research  [6]. This problem has many real-world applications, especially in industries where high-value material is being cut  [3] (steel industry, paper industry). No exact algorithm is known that solves practical problem instances optimally, so there are lots of heuristic approaches. The number of publications about this problem increases each year, so we refer the reader to bibliography  [18] and the most recent survey  [2].

Throughout this paper we abbreviate an instance of CSP as \(E := (L,l,b)\). The total number of pieces is \(n = \sum _{i=1}^m b_i\). W.l.o.g., we assume that all numbers in the input data are positive integers and \(L \ge l_1> \cdots> l_m > 0\).

The classical approach for solving CSP is based on the formulation by Gilmore and Gomory  [5]. Any subset of pieces (called a pattern) is formalized as a vector \(a = (a_1, \cdots , a_m)^\top \in \mathbb {Z}^m_+\) where \(a_i \in \mathbb {Z}_+\) denotes the number of pieces i in the pattern a. A pattern a of E is feasible if \(a^\top l \le L\). So, we can define the set of all feasible patterns \(P^f(L,l) = \{ a \in \mathbb {Z}^m_+ \; | \; a^\top l \le L \}\). For a given set of patterns \(P = \{ a^1, \cdots , a^r \}\), let A(P) be the \((n \times r)\)-matrix whose columns are given by the patterns \(a^i\). Then the CSP can be formulated as follows:

$$z(E) := \sum _{i=1}^r x_i \rightarrow \min \text { subject to } A(P^f(L,l))x=b, x \in \mathbb {Z}^r_+.$$

The common approximate solution approach involves considering the continuous relaxation of CSP

$$z_C(E) := \sum _{i=1}^r x^C_i \rightarrow \min \text { subject to } A(P^f(L,l))x^C=b, x^C \in \mathbb {R}^r_+.$$

Here z(E) and \(z_C(E)\) are called the optimal function values for the instance E. The difference \(\varDelta (E) = z(E) - z_C(E)\) is called the gap of instance E. Practical experience and numerous computations have shown that for most instances the gap is very small. An instance E has the integer round up property (IRUP) if \(\varDelta (E) < 1\). Otherwise, E is called a non-IRUP instance. This notation was introduced by Baum and Trotter  [1].

Subsequently, the largest known gap was increased. In 1986 Marcotte constructed the first known non-IRUP instance with the gap of exactly 1  [9]. Fieldhouse found an instance with gap \(31/30 \approx 1.033333\) in 1990  [4]. In 1991 Schiethauer and Terno slightly improved this result to \(137/132 \approx 1.037879\)  [16]. Rietz, Scheithauer and Terno subsequently constructed non-IRUP instances with gaps \(10/9 \approx 1.111111\) and \(7/6 \approx 1.166666\) in 1998 and 2000 respectively  [12, 13] (both papers were published in 2002). Finally, Rietz constructed an instance with gap \(6/5 = 1.2\) and published it in his PhD thesis in 2003  [10] and a slightly smaller instance with the same gap together with Dempe in 2008  [11].

The MIRUP (modified IRUP) conjecture  [17] states that \(\varDelta (E) < 2\) for all CSP instances E, but it is still open. More investigations about non-IRUP instances can be found in  [7, 8, 14].

The main idea of our paper is to connect our algorithm for enumeration of instances published in  [15] together with ideas of Rietz and Dempe  [11] in aim to construct CSP instances with the gap larger than currently known.

The paper has the following structure. In Sect. 2, we describe the construction of Rietz and Dempe, in Sect. 3, we describe our enumeration algorithm. In Sect. 4, we present the computational results and, finally, we draw a conclusion in Sect. 5.

2 Preliminaries

The construction principles of Rietz and Dempe are based on the instance

$$E_0(p,q) = (33 + 3p + q, (21 + p + q, 19 + p + q, 15 + p + q, 10 + p, 9 + p, 7 + p, 6 + p, 4 + p)^\top , b_0 ),$$

where p and q are positive integers, \(b_0=(1,1,1,1,1,2,1,1)^\top \), and the following theorem:

Theorem 1 (Rietz and Dempe)

Consider an instance \(E = (L,l,b)\) of CSP with the following properties: \(l_1> l_2> \ldots> l_{m-1} > 2l_m\) and \(l_m \le L/4\). Moreover, assume that this instance is sensitive, i.e. its optimal function value increases if \(b_m\) is increased by 1. Then, there are integers p and q such that instance \(E' = E \oplus E_0(p,q)\) has gap \(\varDelta (E') = 1 + \varDelta (E)\).

Here \(\oplus \) means a composition of instances. Let \(E_1 = (L_1, l_1, b_1)\) and \(E_2 = (L_2, l_2, b_2)\) denote two instances of CSP having \(n_1\) and \(n_2\) pieces respectively and with \(L_1 = L_2\). The composed instance \(E := E_1 \oplus E_2\) of CSP consists of the task of cutting all the \(n_1 + n_2\) pieces of lengths from the both vectors \(l_1\) and \(l_2\) and with demands according to both vectors \(b_1\) and \(b_2\). In case when \(L_1\) and \(L_2\) are different, they can be multiplied by one common multiplier (together with piece lengths) to adjust the stock material lengths of both instances. For example, the instances \((2, (1)^\top , (1)^\top )\) and \((5,(2)^\top ,(2)^\top )\) can be composed into the new instance \((2, (1)^\top , (1)^\top ) \oplus (5,(2)^\top ,(2)^\top ) = (10, (5,4)^\top , (1,2)^\top )\).

Note that \(b_m=0\) is possible in Theorem 1, this means that the maximal possible trimloss in a cutting pattern used in an optimal solution is smaller than half of the length of the shortest piece.

Searching for sensitive instances with properties described in Theorem 1 is a very difficult task. An example of a suitable instance mentioned by Rietz and Dempe in their paper is the following:

$$E_{ST'} = (132, (44,33,12)^\top , (2,3,5)^\top ).$$

Indeed, this instance is sensitive, because its optimal function value \(z(E_{ST'})=2\) increases to 3 when we insert an additional piece of length 12. Also, \(l_1> l_2 > 2l_3\) and \(l_3 < L/4\). \(\varDelta (E_{ST'}) = 17/132\), so by Theorem 1 there are integers p and q such that \(\varDelta ( E_0(p,q) \oplus E_{ST'} ) = 149/132 \approx 1.128787\). Namely, the instance \(E_1 = E_0(p,q) \oplus E_{ST'}\) for \(p=74\) and \(q=669\) is the following:

$$E_1 = (924, (764,762,758,308,231,84,83,81,80,78)^\top , (1,1,1,2,3,6,1,2,1,1)^\top ).$$

3 Enumeration Algorithm

Consider an instance \(E = (L,l,b)\). If L and l are fixed, then the matrix of patterns \(A(P^f(L,l))\) is fixed too. We will consider vector b as a vector of variables. Setting \(l=(L-l_m,L-l_m-1,\ldots ,2l_m+2,2l_m+1,l_m)\), where \(l_m \le L/4\), we ensure that the most of required properties of Theorem 1 are satisfied, and now we have to ensure that E is sensitive.

We will enumerate all sensitive instances with a fixed objective function value. Namely, let \(S_k(L,l)\) be the set of all patterns b such that \(z((L,l,b))=k\) and b corresponds to a sensitive instance (Llb).

Consider the set of inextensible feasible patterns \(P^f_*(E) = \{ a \in \mathbb {Z}^m_+ \; | \; a^\top l \le L \; \wedge \; a^\top l + l_1 > L \}\). Obviously, \(S_0(L,l) = \{ \mathbf {0} \}\), and \(S_1(L,l) = P^f_*(L,l)\). Now we will build the set \(S_{i+1}(L,l)\) from \(S_i(L,l)\) by adding vectors from \(P^f_*(E)\) and considering only those patterns which lead to sensitive instances.

To transform the set \(S_i(L,l)\) into the set \(S_{i+1}(L,l)\) we need a data structure called a “map”, which contains a set of pairs <key, value> (all keys are pairwise distinct) and allows us to make the following operations: insert a pair, find a value by a key (or determine that there is no pair with this key), modify a value by a key and return the list of all pairs. The algorithm is the following:

figure a

To find a sensitive instance with maximum gap with fixed L, l and k we generate \(S_k(L,l)\) and then simply calculate \(\varDelta (E)\) over all \(E=(L,l,s)\), \(s \in S_k(L,l)\).

4 Results

We implemented our algorithm as a C++ program using CPLEX 12.7. The program was run on an Intel Core i7-5820K 4.2 GHz machine with 6 cores and 32 Gb RAM.

Results for the runs where \(l=(L-l_m, L-l_m-1, \ldots , 2l_m+1, l_m)\) are presented in Table 1 and Table 2. Maximum gaps greater than 0.1 are marked in bold, and the maximal gap in every column is underlined.

Several sensitive instances with large gaps found during the search are presented in Table 3. Here \(E_1\), \(E_2\) and \(E_3\) correspond to some maximum gaps presented in Table 1 and Table 2. For instance \(E_4\) we continued the search up to \(L=250\) setting \(l=(\lfloor L/2 \rfloor , \lfloor L/2 \rfloor -1, \ldots , 2l_m+1, l_m)\). The gap 0.1875 is the maximal over all considered instances with \(k \le 4\).

The instance \(E_5\) is built from \(E_4\) and a non-IRUP instance

$$E_T(t) = (3t, (t+4, t+3, t, t-2, t-6)^\top , (1,1,2,1,1)^\top )$$

for some integer t. \(E_6\) is a combination of \(E_4\) and some pieces from two copies of \(E_T(t)\) with different values of t.

Using Theorem 1, we constructed a series of non-IRUP instances \(E'_1,\ldots ,E'_6\) from the sensitive instances \(E_1, \ldots , E_6\). They are presented in Table 4. In Table 5 we compare our instances with the previously known ones considering the number of piece types m.

Table 1. Maximum gaps for sensitive instances with fixed L, \(l_m\) and \(k \le 4\)
Table 2. Maximum gaps for sensitive instances with fixed L, \(l_m\) and \(k \le 4\)
Table 3. Sensitive instances with required properties and large gaps
Table 4. Non-IRUP instances with large gaps
Table 5. The number of piece types in old and new non-IRUP instances

5 Conclusion

We have combined the construction of Rietz and Dempe and our enumeration algorithm for searching for sensitive instances. We have found a lot of sensitive instances with large gaps. This allowed us to construct a lot of non-IRUP instances with gap, say, greater than 1.17. We also constructed a non-IRUP instance with gap 1.203125 which is greater than the previously known world record 1.2. Also the non-IRUP instances with large gaps that we found are smaller than the previously known ones.

Producing instances with large gaps using our search method requires a lot of computational resources, so we do not expect that it will handle the MIRUP conjecture directly. But the instances we found may provide the hints about improved constructions. In the future research we are going to improve our technique of combining instances (using which we produced \(E_5\) and \(E_6\)) and construct new instances with much larger gaps.