| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 |  
param N, integer, >=0; 						/*Nb d'objet*/
set O:=1..N; 								/*ensemble des objets*/
 
set B:=1..N; 								/*ensemble des boites*/
 
param capacite, integer, >=0;				/*capacite des boites*/
param objets{o in O}; 						/*tableau des taille des  objets*/
 
var remplissage{o in O,b in B}, binary ; 	/*tableau d'affectation  */
var boites{e in B}, integer, >=0;			/*tableau indiquant si une boite est utilisée*/
 
/*fonction objectif*/
minimize nombreDeBoiteNecessaire : sum{i in B}(boites[i]); 
 
/*contraintes sur la variable remplissage*/
s.t.boitePasTropRemplie {b in B} : (sum{o in O} (objets[o]*remplissage[o,b])) <= capacite;
s.t.unObjetDansUneSeuleBoite_1 {o in O} : (sum{b in B} remplissage[o,b]) <= 1;
s.t.unObjetDansUneSeuleBoite_2 {o in O} : (sum{b in B} remplissage[o,b]) >= 1;
s.t.tousLesObjetDansUneBoite_1 : (sum{o in O}sum{b in B} remplissage[o,b]) <= N;
s.t.tousLesObjetDansUneBoite_2 : (sum{o in O}sum{b in B} remplissage[o,b]) >= N;
 
/*contraintes sur la variable boites*/
s.t. renseignerBoites {b in B} : boites[b] <=(sum{o in O}remplissage[o,b]);
s.t. renseignerBoites_2{b in B}: boites[b]*4000 >= (sum{o in O}remplissage[o,b]);
s.t. renseignerBoites_3{b in B}: boites[b] <=1;
 
data;
param N:=4;
param objets:= [1]9 [2]9 [3]1 [4]3;
param capacite:= 11;
end; | 
Partager