Vous êtes sur la page 1sur 3

Correction du sujet B :

Les données de l’exercice :


On a trois wagons de chemin de fer qui ont une capacité maximum limitées à
100 quintaux chacune.
On a 16 caisses à transportés qui ont de poids :
Caisse 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Poids 34 6 8 17 16 5 73 21 25 31 14 13 33 9 25 25

On veut affecter des caisses qui ont un poids de 355 quintaux aux wagons qui
ont un poids de 100 quintaux chacune (300 quintaux) en respectant les
capacités max des wagons et en minimisant leur charge.

Variables de de décision :
Xi,j : ` la caisse numéro i est affecté au wagons j '`
On note aussi Pi = le poids de la caisse i.
Avec i=1,..16 et j=1,..3.
Xi,j est une variable booléenne, i.e :
Elle prend la valeur 1 si la caisse i est affectée au wagon j
Et elle prend la valeur 0 sinon.
Les contraintes :
a) Relatives aux caisses :
Sachant qu’une caisse i est présente une et une seule fois sur les 3 wagons (on
peut l’affecter à une seule wagon uniquement) on aura :
X1,1+ X1,2 + X1,3 = 1
X2,1+ X2,2 + X2,3 = 1
X3,1+ X3,2 + X3,3 = 1
X4,1+ X4,2 + X4,3 = 1
.
.
.
X16,1+ X16,2 + X16,3 = 1

b) Relatives aux wagons :


35X1,1 + 6X2,1 + 8X3,1 +17 X4,1 + 16X5,1 +5 X6,1 +73X7,1 +21 X8,1 + 25X9,1 + 31X10,1 +
14X11,1 + 13X12,1 + 33X13,1 + 9X14,1 +25 X15,1 + 25X16,1 <= 100

35X1,2 + 6X2,2 + 8X3,2 + 17X4,2 + 16X5,2 +5 X6,2 +73X7,2 + 21X8,2 + 25X9,2 + 31X10,2 +
14X11,2 + 13X12,2 + 33X13,2 + 9X14,2 + 25X15,2 + 25X16,2 <= 100
35X1,3 + 6X2,3 + 8X3,3 +17 X4,3 + 16X5,3 + X56,3 + 73X7,3 + 21X8,3 + 25X9,3 + 31X10,3 +
14X11,3 +13 X12,3 + 33X13,3 + 9X14,3 + 25X15,3 + 25X16,3 <= 100

La fonction objectif :
On veut affecter les caisses aux wagons en minimisant la charge de chaque
wagon de maniéré la plus équitable possible :
16 16 16 16 16 16

Min(Z)=(∑ Pi X i,1-∑ Pi X i,2)+(∑ PiX i,2


i=1 i=1 i=1
-
∑ PiX i,3)+(∑ PiX i,3
i=1 i=1
-∑ PiX ).
i=1
i,1

La resolution de probléme en utilisant le solveur Cplex :

Le modèle :

/*********************************************
* OPL 12.9.0.0 Model
* Author: shiishii
* Creation Date: May 11, 2020 at 7:29:50 AM
*********************************************/
int n=...;
int m=...;
range caisses=1..n;
range wagons=1..m;

int poids[caisses]=...;
dvar boolean x[caisses][wagons];
dexpr float z=(sum(i in caisses)(x[i][1]*poids[i]) - sum(i in caisses)(x[i]
[2]*poids[i])) + (sum(i in caisses)(x[i][2]*poids[i]) - sum(i in caisses)(x[i]
[3]*poids[i])) + (sum(i in caisses)(x[i][3]*poids[i]) - sum(i in caisses)(x[i]
[1]*poids[i]));
minimize z;
subject to {
forall(i in caisses)
contrcaisse:
sum(j in wagons ) ( x[i][j]) ==1;
forall(j in wagons )
contrwagon:
sum(i in caisses)(x[i][j]*poids[i])<=100;
}
Les données :
n=16;
m=3;
poids=[35,6,8,17,16,5,73,21,25,31,14,13,33,9,25,25];

La solution donnée:
X= [0 1 0,0 0 1,0 0 1,0 0 1,1 0 0,0 0 1,0 0 0,0 0 1,1 0 0,0 0 1,1 0 0,1 0 1,0 1 0,0
0 1,1 0 0,0 1 0]

Cela revient à dire qu’on doit affecter :


 Au wagons 1 les caisses numéros :
5 ,9, 11,12, 15
Qui ont un poids de (respectivement) :
16+25+14+13+25= 93 quintaux < 100,
 Au wagon 2 les caisses numéros :
1,13,16
Qui ont un poids de (respectivement) :
34+33+25=92 quintaux < 100.
 Au wagon 3 les caisses numéros :
2,3,4,6,8,10,14
Qui ont un poids de (respectivement) :
6+8+17+5+21+31+9=97 quintaux < 100.

Remarque : la caisse numéros 7 n’est pas affectée à aucune des 3 wagons.

Vous aimerez peut-être aussi