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 |