Beruflich Dokumente
Kultur Dokumente
This is a new method to solve a classical OR problem – Cutting Stock Problem - that leads to a totally
new expansion of the capabilities of linear programming.
Suppose you sell boards of lumber to the retail market in lengths of 3’, 5’ and 9’, to meet a demand of
• 25 units of 3’ boards
• 20 units of 5’ boards
• 15 units of 9’ boards
Suppose also that you can only buy boards in the wholesale market in 17’ lengths. How many 17’ lengths
do we need and how should we cut them to meet the demand at minimum waste.
Unfortunately, we cannot simply start to define decision variables to formulate this problem into a
mathematical model. We need some preliminary analysis.
It turns out that one of the issues we have to deal with is to define in advance all the possible ways that
we can cut a 17’ board into one or more of the target lengths.
Cut Type 1 2 3 4 5 6
3’ 5 4 2 2 1 0
5’ 0 1 2 0 1 3
9’ 0 0 0 1 1 0
waste 2 0 1 2 0 2
Note that we have omitted any cut which results in a waste ≥ 3’.
Let xi be the number of boards cut according to cut type i. and z the overall waste.
subject to
x4 + x5 ≥ 15
All xi ≥ 0
Daniel Frances 2017 1
MIE365 ORIII Lecture Notes
While it would seem that we would need to restrict the variables to integers, in practice rounding off
works quite well for this type of problem, we are done, or are we?
• Is the waste expression correct? If we exceed demand is that not also waste?
• What if instead of 17’ boards, we were dealing with 107’ wire lengths to be cut into 3’, 5’ and 9’
lengths – the number of possible cuts would render this method impractical.
In addition to the waste that we cannot sell because there is no demand for the “wrong” size, we also need
to account for the waste that we cannot sell because we are producing too many units of the “right” size.
Min z = x1 + x2 + x3 + x4 + x5 + x6
subject to
x4 + x5 ≥ 15
All xi ≥ 0
Designer Cuts
With this approach we first select a number of start-up cuts with which we can meet the demand, say cut
1 which only produces 3’ lengths, cut 2 which only produces 5’lengths and cut 3 which only produces 9’
lengths. then design a “new” cut that is better than the existing cuts by solving an IP problem.
Below is the table for this approach. Cut 4 is the new better cut we are designing, and we let a, b and c, be
the number of 3’, 5’ and 9’ lengths it should have.
Cut Type 1 2 3 4
3’ 35 0 0 a
5’ 0 21 0 b
9’ 0 0 11 c
Since we initially use cuts 1, 2, and 3, then 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 must be in the basis, and so far 𝑥𝑥4 is zero and non-
basic. We would like to choose a, b, c, in such a way that the simplex method will definitely use cut 4,
and bring it into the basis, and drop one of the existing cuts, by removing it from the basis.
If you recall the criterion that simplex uses for a variable to enter the basis are the entries in the z-
equation. Thus the IP starts to look like
At this point we have to find a way of building the objective of the IP, and will use LP matrix notation,
and relax the requirement that the 𝒙𝒙𝒊𝒊 have to be integer.
Since we are using only cuts 1, 2 and 3, the corresponding variables 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 will be basic, and the
remaining variables non-basic. Then we separate all the vectors into the basic and non-basic parts.
𝑥𝑥4 1 31 0 0
𝑥𝑥1 1 𝑎𝑎 −1 0 0
𝑠𝑠1 0
Where 𝑥𝑥𝐵𝐵 = �𝑥𝑥2 � , 𝑥𝑥𝑁𝑁 = � 𝑠𝑠 �, 𝑐𝑐𝐵𝐵 = �1� , 𝑐𝑐𝑁𝑁 = � � B = 0 21 0 𝑁𝑁 = �𝑏𝑏 0 −1 0 �
𝑥𝑥3 2 0 0 0 11
𝑠𝑠3 1 𝑐𝑐 0 0 −1
0
In LP terms, how do we know this basis is optimal? We need to check the signs of the z-equation to see
if there is any benefit to be had in entering a non-basic variable.
To see if it’s worthwhile introducing 𝑥𝑥4 into the basis we need to find a way for calculating the
coefficients of 𝑥𝑥4 in the z-equation.
Then substitute into 𝑧𝑧 = 𝑐𝑐𝐵𝐵𝑇𝑇 (𝐵𝐵−1 𝑏𝑏 − 𝐵𝐵 −1 𝑁𝑁𝑥𝑥𝑁𝑁 ) + 𝑐𝑐𝑁𝑁𝑇𝑇 𝑥𝑥𝑁𝑁 = 𝑐𝑐𝐵𝐵𝑇𝑇 𝐵𝐵 −1 𝑏𝑏 − (𝑐𝑐𝐵𝐵𝑇𝑇 𝐵𝐵−1 𝑁𝑁 − 𝑐𝑐𝑁𝑁𝑇𝑇 )𝑥𝑥𝑁𝑁
Thus for minimization of the LP, we should maximize the entry in (𝑐𝑐𝐵𝐵𝑇𝑇 𝐵𝐵 −1 𝑁𝑁 − 𝑐𝑐𝑁𝑁𝑇𝑇 ) corresponding to 𝑥𝑥4 ,
1/35 0 0 𝑎𝑎
1 1 1
𝑀𝑀𝑀𝑀𝑀𝑀 (1 1 1) � 0 1/21 0 � �𝑏𝑏 � − 1 = � � 𝑎𝑎 + � � 𝑏𝑏 + � � 𝑐𝑐 − 1
35 21 11
0 0 1/11 𝑐𝑐
Is there a more efficient way of building the objective function of the IP?
When we use a computer to solve an LP, is there an efficient way of extracting 𝑐𝑐𝐵𝐵𝑇𝑇 𝐵𝐵 −1.?
Recall that the dual objective is given as 𝑤𝑤 = 𝑏𝑏 𝑡𝑡 𝑦𝑦, where y are the dual variables, which are also the
shadow prices of the primal, and that at optimality 𝑧𝑧 = 𝑤𝑤, so that 𝑧𝑧 = 𝑏𝑏 𝑡𝑡 𝑦𝑦 = 𝑦𝑦 𝑡𝑡 𝑏𝑏
Note that the value of the objective at any iteration is 𝑧𝑧 = 𝑐𝑐𝐵𝐵𝑇𝑇 𝐵𝐵 −1 𝑏𝑏. Comparing this to 𝑧𝑧 = 𝑦𝑦 𝑡𝑡 𝑏𝑏, we
conclude that 𝑐𝑐𝐵𝐵𝑇𝑇 𝐵𝐵 −1 is the vector of shadow prices, which can easily be extracted from an LP.
1. Create simple cuts that satisfy the demand, and formulate the corresponding LP
2. Solve the LP and cut-and-paste the shadow prices for the constraints into the IP objective
3. Solve the IP and cut and paste the new cut into the LP
5. Solve the LP with all the cuts, as an IP enforcing integer 𝑥𝑥𝑖𝑖 values.