L’agenda des TechDays 2009 a été entièrement construit avec Microsoft Solver Foundation

Comme vous devez le savoir, l’agenda des TechDays 2009 a officiellement été publié ce lundi 12 janvier 2009 au matin et le site d’inscription à cet événement est désormais ouvert :

https://www.mstechdays.fr

Je tenais, dans ce billet, à partager avec vous la manière dont cet agenda a été construit cette année. Comme certains d’entre vous le savent peut-être déjà, le backend qui gère les TechDays s’appelle Vinci et a été développé par mes soins à l’occasion des TechDays 2008. Malgrès cela, le processus de création d’un agenda tel que celui des TechDays a, jusqu’à présent, été quelque chose de très lourd et surtout de très manuel et donc, par définition, très imparfait.

Voici donc l’envers du décor de la création de l’agenda de de l’édition 2009. En première mondiale chez Microsoft, il a été entièrement résolu à l’aide d’une toute nouvelle bibliothèque appelée Microsoft Solver Foundation :

Microsoft Solver Foundation

Quelques chiffres sur la difficulté du problème à résoudre :

  • 294 sessions dont 50 fixées à l’avance, soit 244 sessions à répartir sur 244 paires créneau horaire/salle
  • Plus de 240 speakers impliqués
  • Aucun speaker ne doit présenter plus d’une session à un créneau horaire donné (14 créneaux horaires disponibles sur les 3 jours de l’événement)
  • 1 743 contraintes de créneau horaire (La session X doit être présentée à tel créneau horaire)
  • 105 contraintes de salle (La session X doit être présentée dans tel type de salle, en terme de capacité)
  • 42 contraintes de TrackPrecedences (La session X doit avoir lieu avant la session Y)

soit près de 2 000 contraintes à respecter.

De plus, une des contraintes supplémentaires était de minimiser le nombre de sessions d’un même parcours jouées au même moment.

Si on devait tester systématiquement toutes les combinaisons possibles, il faudrait passer en revue 1E478 ( = 244! ) combinaisons pour l’agenda des TechDays 2009 ! A raison de 1 seconde de calcul par itération, il faudrait donc 1E470 années de calcul sur un seul ordinateur. En supposant que l’on dispose de 1 000 000 d’ordinateurs pour effectuer ces calculs en parallèle, il faudrait donc 1E464 années pour tester toutes les combinaisons possibles, à mettre en rapport avec l’âge de l’Univers qui est 1E9 années ou encore le nombre d’atomes estimés dans l’univers qui est 1E79. Autant dire impossible ! :-)

Microsoft Solver Foundation nous a permis de résoudre notre problématique en 52 secondes sur un laptop dual core de dernière génération et 32 secondes sur un 24 cores avec 16Go de RAM. Cependant, il a fallu un travail de 9H d’affilée pour préparer les données et éliminer les contraintes qui rendaient le problème infaisable, et ce à chaque nouvelle itération (= tout changement de données). Pour information, il y’a eu 10 itérations avant de construire cet agenda.

La solution trouvée répond à 99.4% des contraintes exprimées, c’est à dire que seules 13 contraintes sur près de 2 000 n’ont pas pu être respectées !

Un grand merci à l’équipe Corp. de Microsoft Solver Foundation qui nous a énormément aidée en écrivant tout le code de déclaration du modèle. Cette mise en œuvre leur a tellement plu qu’ils vont l’intégrer comme un sample de leur SDK. Il est possible que j'écrive un article technique sur le sujet.

A noter qu'une session sur Microsoft Solver Foundation sera justement présentée lors de ces TechDays, par Lucas Bordeaux de Microsoft Research Cambridge :

Microsoft Solver Foundation (REC313)

Pour finir, voici ce qui se passait sur le 24 cores pendant que je faisais les optimisations :

clip_image001