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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| /* Travail Rercherche OP */
/* Horaire de Cours */
/* Ensemble d'objets indices */
set p; #ensemble des professeurs
set c; #nombre de classes
set td; #créneaux
/*Paramètres*/
param t := 4; #nombre de créneaux par jours
param d := 5; #nombre de jours
param NbC{i in p, j in c}; #Nombre de cours que le prof i doit donner à la classe j
/* Variables */
var X {i in p, j in c, k in td} binary; # =1 si le professeur t donne cours à la classe c pendant la période t
/* Fonction objectif */
minimize Trou :
sum {i in p, j in c, k in 0..4} (X[i,j,(k+1)]+X[i,j,(k+k)]);
/* Contraintes */
#2 planifier tous les cours :
s.t. forall{i in p,j in c}:
sum {k in td} X[i,j,k] = NbC[i,j];
#3 une classe ne peut suivre plus d'un cours à la fois
s.t. forall{j in c,k in td}:
sum {i in p} X[i,j,k] <= 1;
#4 Un prof donne un cours à la fois
s.t. forall{i in p, k in td}:
sum {c in c} X[i,j,k] <=1;
#5 Une seule fois une matière par jours
s.t. forall{i in p, j in c, l in d}:
sum {k in ((l-1)*(t+1))..(l*t)} X[i,j,k] <=1;
#6 Sport le jeudi après midi classe 1
s.t. {i = 8,j = 1,k = 15}:
X[8,1,15] = 1;
#7 Sport le jeudi après midi classe 2
s.t. {i=9, j=2, j=15}:
X[9,2,15] = 1;
#8 Pas de cours en première heure du lundi
s.t. forall{i in p, j in c}:
X[i,j,1] = 0;
#9 Mr Efdehicks absent le lundi matin
s.t. forall{k in c}:
X[4,2,k]=0;
#10 Pas de cours de Biologie Mercredi
s.t. forall{j in c, k in 9..12}:
X[ 2,j,k] = 0;
#11 Les variables sont booléennes
s.t. forall{i in p, j in c, k in td}: X[i,j,k] in {0,1};
/* Données */
data;
set p := {1..9};
set c := {1..2};
set td := {1..20};
set NbC{i in p, j in c};
param NbC : 1 2 :=
1 1 1
2 3 3
3 2 2
4 0 4
5 4 0
6 3 3
7 1 1
8 1 0
9 0 1
end; |
Partager