Rapport de programmation par contraintes
Page 2 / 4
Nous avions retenu dans la première étape, 3 modélisations qui nous
semblaient pertinentes dont nous rappelons ici simplement la teneur pour pouvoir en
discuter. Nous essayerons de présenter notre démarche, les conclusions auxquelles
nous sommes parvenues et les résultats concrets.
Par ailleurs, nous avons beaucoup travaillé sur l’aspect de pré-traitement des
données, qui visent à établir la liste des salles possibles par cours de manière à
réduire très rapidement les domaines des variables. Nous disposons pour la
modélisation de tableaux pour accéder rapidement aux différentes informations
utilises (listes des cours par étudiant, liste des étudiants par cours…).
La modélisation 1 n’est pas satisfaisante vis-à-vis de la contrainte 3 (un seul
cours par salle, à chaque créneau horaire) qui prend la forme d’un allDifferent sur
des expressions uniques associées à chaque couple (créneau, salle). On peut
trouver une solution pour environ une centaine de cours mais pas au delà . Nous
l’avons implémentée en Choco (cf. pbEDT1.cl).
Les modélisations 1 et 2 sont « symétriques ». Tandis que la première associe
un créneau et une salle à chaque cours, la deuxième place les cours dans chaque
couple (créneau, salle) d’un tableau Ns x Nc (on a donc besoin d’un cours fictif, le
cours 0, ce qui empêche l’utilisation du allDifferent). Néanmoins la modélisation 2
nous semblait plus prometteuse car la contrainte 3 s’exprime simplement à l’aide
d’un occur. Nous avons constaté que cette approche n’était également pas viable, on
ne parvient pas à trouver des solutions même en ne posant que les contraintes 2 et
3. (cf. pbEDT2.cl) La contrainte occur semble plus difficile à mettre en œuvre que le
allDifferent. Pour pouvoir exprimer facilement la contrainte 3 nous nous sommes
tournés vers une modélisation que nous avions identifiée dans « autres
modélisations envisagées » dans notre premier rapport.
Il est possible dans cette 3ème modélisation de trouver une solution aux
contraintes 2 et 3 instantanément. En effet la contrainte 3 s’exprime comme un
simple allDifferent sur l’ensemble des variables. On peut, pour la contrainte 2,
éliminer du domaine de chaque variable (dans une phase de pré calcul) les valeurs
dans [1..45xNombre de salles] qui correspondent à des salles impossibles pour ce
cours. On obtient immédiatement une solution à ces 2 contraintes, là où la
modélisation 2 ne donnait aucun résultat (cf. pbEDT3 .cl). Le problème est de
pouvoir exprimer la contrainte 1 sur les élèves car on ne dispose plus de l’information
sur les créneaux comme dans la modélisation 1.
La modélisation 3 consiste à « fusionner » les deux variables de la modélisation
1. La première modélisation est très adaptée pour la contrainte n°1 (concernant les