1 2 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