TomSym Cutting Steel Bars for Desk Legs: Difference between revisions
From TomWiki
Jump to navigationJump to search
No edit summary |
No edit summary |
||
Line 80: | Line 80: | ||
<pre> | <pre> | ||
Problem type appears to be: mip | Problem type appears to be: mip | ||
Time for symbolic processing: 0. | Time for symbolic processing: 0.011981 seconds | ||
Starting numeric solver | Starting numeric solver | ||
===== * * * =================================================================== * * * | ===== * * * =================================================================== * * * | ||
Line 93: | Line 93: | ||
FuncEv 3 | FuncEv 3 | ||
Elapsed time: 0.003000 sec. | CPU time: 0.046800 sec. Elapsed time: 0.003000 sec. | ||
a minimal loss of 2020 is found with this combination: | a minimal loss of 2020 is found with this combination: | ||
cut 1 bar(s) in pattern 2 | cut 1 bar(s) in pattern 2 |
Latest revision as of 09:33, 8 November 2011
This page is part of the TomSym Manual. See TomSym Manual. |
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 Time for symbolic processing: 0.011981 seconds Starting numeric solver ===== * * * =================================================================== * * * TOMLAB - TOMLAB Development license 999007. Valid to 2011-12-31 ===================================================================================== 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.046800 sec. Elapsed time: 0.003000 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