Production dans une brasserie

Bien.

L’idée est de définir deux types de variables binaires. x[i,k] qui indique le début d’une maintenance de 2 mois pendant le mois i sur la machine k, et z[i,k] qui indique si la machine k est disponible au mois i.

Puis on va avoir une variable y[i,k], qui précise le nombre de homme-jour travaillé pendant le mois i sur la machine k.

Finalement il y a des variables de moyenne avr et de sur et sous-utilisation de la main d’oeuvre par mois, over[i], under[i].

set MOIS := 1..12;
set MACH := {1, 2};
param d{MOIS};           # demande par mois
param a{MACH};
param l{MACH};

param L{MOIS}, >=0; # jours ouvrables par mois

var y{MOIS cross MACH}, >=0; 
# nombre de homme-jours par mach et par mois

var x{1..11 cross MACH}, binary; 
# x[i,k]=1 si machine k est en maintenance pendant les mois i, i+1

var z{1..12 cross MACH}, binary; 
#z[i,k] = 1 si la mach k est active pendant le mois i

var avr >=0;          # main d'oeuvre moyenne par mois
var over {MOIS} >=0;  # surutilisation de la main d'oeuvre
var under{MOIS} >=0;  # sousutilisation

minimize fluctuation: 
    sum{i in MOIS} (over[i] + under[i]);

subject to average_over_under{i in MOIS}: 
    sum{k in MACH} y[i, k] == avr - under[i] + over[i];

subject to average_y: 
    sum{i in MOIS, k in MACH} y[i, k] == avr * 12;

subject to ouvrables{i in MOIS, k in MACH}: 
    y[i, k] <= L[i] * l[k] * z[i, k];

subject to arret1{i in 1..11, k in MACH}: 
    z[i, k] <= 1 - x[i, k];

subject to arret2{i in 1..11, k in MACH}: 
    z[i + 1, k] <= 1 - x[i, k];

subject to production{j in MOIS}:
    sum{k in MACH, i in 1..j} y[i, k] * a[k] / l[k] 
        >= sum {i in 1..j} d[i];

subject to maintenance{k in MACH}:
    sum{i in 1..11} x[i, k] >= 1;

subject to vacancesEte {j in 7..8}:
    sum{k in MACH} z[j, k] <= 1;    

Voici le plan de production pour l’année.

mois machine 1 machine 2 fluctuation
1 84.2909 110 0
2 180 100 +85.7091
3 79.2909 115 0
4 99.2909 95 0
5 94.2909 100 0
6 89.2909 105 0
7 0 100 -94.2909
8 0 110 -84.2909
9 187.455 105 +98.1636
10 194.291 0 0
11 189 0 5.29091
12 152.543 41.7483 0

suite