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