Production of Drinking Glasses
Contents
Problem description
The main activity of a company in northern France is the production of drinking glasses. It currently sells six different types (V1 to V6), that are produced in batches of 1000 glasses, and wishes to plan its production for the next 12 weeks. The batches may be incomplete (fewer than 1000 glasses). The demand in thousands for the 12 coming weeks and for every glass type is given in the following table.
Demands for the planning period (batches of 1000 glasses)
+----+--+--+--+--+--+--+--+--+--+--+--+--+ |Week| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12| +----+--+--+--+--+--+--+--+--+--+--+--+--+ |V1 |20|22|18|35|17|19|23|20|29|30|28|32| |V2 |17|19|23|20|11|10|12|34|21|23|30|12| |V3 |18|35|17|10| 9|21|23|15|10| 0|13|17| |V4 |31|45|24|38|41|20|19|37|28|12|30|37| |V5 |23|20|23|15|10|22|18|30|28| 7|15|10| |V6 |22|18|20|19|18|35| 0|28|12|30|21|23| +----+--+--+--+--+--+--+--+--+--+--+--+--+
For every glass type the initial stock is known, as well as the required final stock level (in thousands). Per batch of every glass type, the production and storage costs in $ are given, together with the required working time for workers and machines (in hours), and the required storage space (measured in numbers of trays).
The number of working hours of the personnel is limited to 450 hours per week, and the machines have a weekly capacity of 850 hours. Storage space for up to 1000 trays is available. Which quantities of the different glass types need to be produced in every period to minimize the total cost of production and storage?
Data for the six glass types
+--+----------+-------+-------+-----+----------+-----------+-------+ | |Production|Storage|Initial|Final| | |Storage| | | cost | cost | stock |stock|Timeworker|Timemachine| space | +--+----------+-------+-------+-----+----------+-----------+-------+ |V1| 100 | 25 | 50 | 10 | 3 | 2 | 4 | |V2| 80 | 28 | 20 | 10 | 3 | 1 | 5 | |V3| 110 | 25 | 0 | 10 | 3 | 4 | 5 | |V4| 90 | 27 | 15 | 10 | 2 | 8 | 6 | |V5| 200 | 10 | 0 | 10 | 4 | 11 | 4 | |V6| 140 | 20 | 10 | 10 | 4 | 9 | 9 | +--+----------+-------+-------+-----+----------+-----------+-------+
Variables
demand Weekly demand of V1-V6 workermax The staffs weekly capacity in hours machinemax The machines weekly capacity in hours maxstorage Maximal storage space productioncost Cost to produce a batch of a glasstype. storagecost Cost to store a batch of a glasstype initialstock Initial stock of glasstypes finalstock Required final stock timeworker Personnel-time required for a batch timemachine Machine-time required for a batch storagespace Space required by batch in storage
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
demand = [20 22 18 35 17 19 23 20 29 30 28 32;... 17 19 23 20 11 10 12 34 21 23 30 12;... 18 35 17 10 9 21 23 15 10 0 13 17;... 31 45 24 38 41 20 19 37 28 12 30 37;... 23 20 23 15 10 22 18 30 28 7 15 10;... 22 18 20 19 18 35 0 28 12 30 21 23]; workermax = 450; % Modified from 390, otherwise infeasible machinemax = 850; maxstorage = 1000; productioncost = [100;80;110;90;200;140]; storagecost = [25;28;25;27;10;20]; initialstock = [50;20;0;15;0;10]; finalstock = [10;10;10;10;10;10]; timeworker = [3;3;3;2;4;4]; timemachine = [2;1;4;8;11;9]; storagespace = [4;5;5;6;4;9]; t = size(demand,2); p = size(demand,1); store = tom('store',p,t); produce = tom('produce',p,t); % All slots are positive bnds = {store >= 0, produce >= 0}; % Production, storage equilibrium, first period. con1 = {store(:,1) == initialstock + produce(:,1) - demand(:,1)}; % Production, storage equilibrium, all other periods. con2 = {store(:,2:end) == store(:,1:end-1) + produce(:,2:end) - demand(:,2:end)}; % Worker capacity constraint con3 = {timeworker'*produce <= workermax}; % Machine capacity constraint con4 = {timemachine'*produce <= machinemax}; % Storage constraint con5 = {storagespace'*store <= maxstorage}; % Final stock constraint, bounds on decision variable bnds2 = {store(:,end) >= finalstock}; % Objective objective = sum(productioncost'*produce + storagecost'*store); constraints = {bnds, bnds2, con1, con2, con3, con4, con5}; options = struct; options.solver = 'cplex'; options.name = 'Production of Drinking Glasses'; sol = ezsolve(objective,constraints,[],options); PriLev = 1; if PriLev >= 0 [g,w] = size(demand); % g = glass_types, W = weeks temp = []; temp(:,1,:) = sol.produce; temp(:,2,:) = sol.store; for i = 1:w, disp(['results for week ' num2str(i) ':']) for j = 1:g, if temp(j,1,i) > 0, disp([' ' num2str(temp(j,1,i)) ' batches of type ' num2str(j) ' should be produced' ]) end if temp(j,2,i) > 0, disp([' ' num2str(temp(j,2,i)) ' batches of type ' num2str(j) ' should be stored to next month' ]) end end end end % MODIFICATION LOG % % 051017 med Created. % 060109 per Added documentation. % 060125 per Moved disp to end % 090308 med Converted to tomSym
Problem type appears to be: lp
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2010-02-05
=====================================================================================
Problem: --- 1: Production of Drinking Glasses f_k 180880.136363636350000000
sum(|constr|) 0.000000000000000134
f(x_k) + sum(|constr|) 180880.136363636350000000
f(x_0) 0.000000000000000000
Solver: CPLEX. EXIT=0. INFORM=1.
CPLEX Dual Simplex LP solver
Optimal solution found
FuncEv 115 Iter 115
results for week 1:
30 batches of type 1 should be stored to next month
3 batches of type 2 should be stored to next month
18 batches of type 3 should be produced
16 batches of type 4 should be produced
27.3636 batches of type 5 should be produced
4.3636 batches of type 5 should be stored to next month
12 batches of type 6 should be produced
results for week 2:
8 batches of type 1 should be stored to next month
16 batches of type 2 should be produced
35 batches of type 3 should be produced
45 batches of type 4 should be produced
15.6364 batches of type 5 should be produced
18 batches of type 6 should be produced
results for week 3:
10 batches of type 1 should be produced
23 batches of type 2 should be produced
17 batches of type 3 should be produced
24 batches of type 4 should be produced
23 batches of type 5 should be produced
20 batches of type 6 should be produced
results for week 4:
35 batches of type 1 should be produced
20 batches of type 2 should be produced
10 batches of type 3 should be produced
38 batches of type 4 should be produced
15 batches of type 5 should be produced
19 batches of type 6 should be produced
results for week 5:
17 batches of type 1 should be produced
11 batches of type 2 should be produced
9 batches of type 3 should be produced
41 batches of type 4 should be produced
10 batches of type 5 should be produced
18 batches of type 6 should be produced
results for week 6:
19 batches of type 1 should be produced
10 batches of type 2 should be produced
21 batches of type 3 should be produced
20 batches of type 4 should be produced
22 batches of type 5 should be produced
35 batches of type 6 should be produced
results for week 7:
23 batches of type 1 should be produced
12 batches of type 2 should be produced
23 batches of type 3 should be produced
19 batches of type 4 should be produced
33.75 batches of type 5 should be produced
15.75 batches of type 5 should be stored to next month
results for week 8:
20 batches of type 1 should be produced
34 batches of type 2 should be produced
15 batches of type 3 should be produced
37 batches of type 4 should be produced
14.25 batches of type 5 should be produced
28 batches of type 6 should be produced
results for week 9:
29 batches of type 1 should be produced
21 batches of type 2 should be produced
10 batches of type 3 should be produced
28 batches of type 4 should be produced
28 batches of type 5 should be produced
12 batches of type 6 should be produced
results for week 10:
30 batches of type 1 should be produced
23 batches of type 2 should be produced
12 batches of type 4 should be produced
31 batches of type 5 should be produced
24 batches of type 5 should be stored to next month
30 batches of type 6 should be produced
results for week 11:
28 batches of type 1 should be produced
30 batches of type 2 should be produced
13 batches of type 3 should be produced
30 batches of type 4 should be produced
11 batches of type 5 should be produced
20 batches of type 5 should be stored to next month
33.25 batches of type 6 should be produced
12.25 batches of type 6 should be stored to next month
results for week 12:
42 batches of type 1 should be produced
10 batches of type 1 should be stored to next month
22 batches of type 2 should be produced
10 batches of type 2 should be stored to next month
27 batches of type 3 should be produced
10 batches of type 3 should be stored to next month
47 batches of type 4 should be produced
10 batches of type 4 should be stored to next month
10 batches of type 5 should be stored to next month
20.75 batches of type 6 should be produced
10 batches of type 6 should be stored to next month