Cutting Steel Bars for Desk Legs
Contents
Problem description
The company SchoolDesk produces desks of different sizes for kindergartens, primary and secondary schools, and colleges. The legs of the desks all have the same diameter, with different lengths: 40 cm for the smallest ones, 60 cm for medium height, and 70 cm for the largest ones. These legs are cut from steel bars of 1.5 or 2 meters. The company has received an order for 108 small, 125 medium and 100 large desks. How should this order be produced if the company wishes to minimize the trim loss?
Variables
patterns The different cutting patterns demand Demand of the different lengths loss Loss for each pattern lengths The lengths
Reference
Applications of optimization... Gueret, Prins, Seveaux
% Marcus Edvall, Tomlab Optimization Inc, E-mail: tomlab@tomopt.com % Copyright (c) 2005-2009 by Tomlab Optimization Inc., $Release: 7.2.0$ % Written Oct 7, 2005. Last modified Apr 8, 2009.
Problem setup
patterns = [0 0 2 0 2 3 0 0 1 3 0 5;... 0 1 0 2 1 0 1 2 0 0 3 0;... 2 1 1 0 0 0 2 1 2 1 0 0]; demand = [108;125;100]*4; loss = [10 20 0 30 10 30 0 10 20 10 20 0]'; lengths = [150;200]; p = size(patterns,2); use = tom('use',p,1,'int'); % Bounds bnds = {use >= 0}; % Minimum demand must be met con = {patterns*use >= demand}; % Objective objective = sum(lengths(1)*use(1:end/2) + lengths(2)*use(end/2+1:end)); % Constant to deduct from objective objective = objective-75280; constraints = {bnds, con}; options = struct; options.solver = 'cplex'; options.name = 'Cutting Steel Bars'; sol = ezsolve(objective,constraints,[],options); loss = sum(sol.use.*loss); PriLev = 1; if PriLev > 0 x = sol.use; idx = find(x); order = [x(idx) idx]; disp(['a minimal loss of ' num2str(loss) ' is found with this combination:' ]) for i = 1:length(idx), disp([' cut ' num2str([order(i,1)]) ' bar(s) in pattern ' num2str([order(i,2)])]) end end % MODIFICATION LOG % % 051010 med Created % 051208 med Loss added to Result % 060112 per Added documentation. % 060112 per Minor update. % 060125 per Moved disp to end % 071218 ango Multiple CPLEX solutions handled gracefully % 090308 med Converted to tomSym
Problem type appears to be: mip ===== * * * =================================================================== * * * TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2010-02-05 ===================================================================================== Problem: --- 1: Cutting Steel Bars f_k 2020.000000000000000000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=101. CPLEX Branch-and-Cut MIP solver Optimal integer solution found FuncEv 3 CPU time: 0.015625 sec. Elapsed time: 0.015000 sec. a minimal loss of 2020 is found with this combination: cut 1 bar(s) in pattern 2 cut 1 bar(s) in pattern 3 cut 199 bar(s) in pattern 7 cut 100 bar(s) in pattern 11 cut 86 bar(s) in pattern 12