Projet INF242 Stéphane Devismes & Benjamin Wak Pour e projet les étudiants doivent former des groupes de 3 ou 4 étudiants. 1 Planning Distribution du projet au premier ours. À la fin de la deuxième semaine de TD, onstitution des groupes et validation du sujet par le hargé de TD. Livraison par email à votre enseignant de TD au plus tard le 6 mars 2015 du pré-rapport (5 pages maximum). Livraison au plus tard le 30 avril 2015 par email du rapport final. Dans la semaine du 4 au 7 mai 2015, soutenane de 20 minutes par groupe, questions inluses (démonstration du travail réalisé en groupe). 2 Travail à réaliser Le projet se déoupe en deux parties. La première partie fera l objet d un pré-rapport. À la fin de la seonde partie, les différents groupes devront produire un rapport résumant les travaux aomplis dans les deux parties. Enfin, e projet sera aussi évalué par une soutenane. Les ontenus des pré-rapport et rapport final seront pris en ompte dans la notation. 2.1 Première partie La première partie de e projet onsiste à formaliser plusieurs problèmes en logique propositionelle sous la forme d ensembles de lauses. Dans votre pré-rapport, pour haque problème traité, vous devrez : 1. Donnez l énoné informel du problème, 2. Traduire et énoné sous la forme de formules propositionelles. Cette tradution devra être justifiée. 3. Traduire les formules propositionelles en un ensemble de lauses équivalentes. Cette tradution devra aussi être justifiée. Il vous est demandé de traiter plusieurs problèmes. Ces différents problèmes doivent être de diffiulté roissante. Vous pouvez, par exemple, ommener ave des exeries du polyopié qui n ont pas été traités en TD ou alors des exeries d examen ou partiel des années préédentes, disponibles à ette adresse 1
http://www-verimag.imag.fr/~devismes/www/enseignements.html#inf242 Après vous être exeré sur des exemples simples, vous devrez vous onentrer sur la formalisation d un problème plus omplexe. Par exemple : le Sudoku le arré magique Squaro Tetravex Paint-by-numbers D autres pistes de sujets sont proposées sur la page http://www-verimag.imag.fr/~wak/inf242 ave en général des liens vers des applets de démonstration. Ce dernier problème devra obligatoirement être validé par votre hargé de TD! 2.2 Deuxième partie La seonde partie de e projet onsiste en la résolution automatique des problèmes proposés lors de la première partie. Pour ela, vous utiliserez un solveur SAT. Plus préisement, vous programmerez vous-même votre propre solveur SAT (dans le langage de votre hoix) ave différentes stratégies de résolution. En outre, il vous est demandé de fournir deux autres programmes qui onernent uniquement le dernier problème à traiter : le problème omplexe validé par votre hargé de TD. Le format DIMACS. La première étape onsistera à traduire les ensembles de lauses proposés lors de la première partie en fihier DIMACS. Le format des fihiers d entrées des SAT-solveurs est un standard international pour la représentation de formules en forme normale onjontive. Un fihier en format DIMACS ommene par une ligne qui spéifie qu il s agit d une forme normale onjontive, qui préise ombien de variables la formule ontient, et de ombien de lauses disjontives elle est onstituée. Par exemple : p nf 5 3 indique que le fihier ontient une formule en forme normale onjontive, ave 5 variables et 3 lauses. Ensuite, le fihier est omposé de plusieurs lignes, une par lause. Chaque ligne ontient des entiers positifs et/ou négatifs, et se termine par 0. Un entier positif i indique que la i-ème variable apparaît ave polarité positive dans la lause. Un entier négatif i indique que la i-ème variable apparaît ave polarité négative dans la lause. Par exemple, le fihier suivant au format DIMACS représente la formule : start with omments p nf 5 3 1-5 4 0-1 5 3 4 0-3 -4 0 (x 1 x 5 x 4 ) ( x 1 x 5 x 3 x 4 ) ( x 3 x 4 )
Attention! Pour les problèmes de taille onséquente (par exemple, le dernier problème proposé), ette transformation devra être effetuée automatiquement à l aide d un programme que vous aurez érit 1. Votre solveur SAT : WalkSat. Il vous est demandé de programmer dans le langage de votre hoix un solveur de type WalkSat. Votre WalkSat devra lire en entrée l ensemble de lauses à résoudre sous la forme d un fihier DIMACS. Le but est ensuite de renvoyer une assignation modèle de toutes les lauses de l ensemble si ela est possible. Notez que WalkSat est un solveur inomplet : si l ensemble de lauses donné en entrée est ontraditoire, il est inapable de le déterminer. Le pseudo-ode d un algorithme de type WalkSat est donné i-dessous. 1: Choisir une assignation v uniformément au hasard 2: i=0 3: TANT QUE (v n est pas modèle) et i < MAX_ITERATION FAIRE 4: Choisir au hasard C parmi les lauses C telles que v(c ) = faux 5: Tirer une valeur réelle x uniformément au hasard dans [0,1] 6: SI x <= P ALORS 7: Choisir uniformément au hasard une variable y de C 8: SINON 9: Choisir une variable y de C de manière déterministe 10: FIN SI 11: Inverser la valeur de v(y) dans l assignation v 12: i++ 13: FIN TANT QUE 14: SI v est modèle ALORS 15: Renvoyer v 16: SINON 17: Renvoyer pas_de_deision 18: FIN SI Le ode donné i-dessus est volontairement inomplet! En effet, il ne préise pas les valeurs de MAX_ITERATION et P, ni la proédure de hoix déterministe de la variable y à la ligne 9. Au minimum, il vous est demandé de proposer une valeur raisonnable pour es deux onstantes, et de faire en sorte que la variable y hoisie soit la variable présente dans C qui va minimiser le nombre de lauses insatisfaites. Faultativement, vous pouvez mener des expérimentations afin de trouver les meilleures valeurs possibles pour MAX_ITERATION et P ; vous pouvez également programmer d autres méthodes de hoix de y, par exemple : Choisir la variable présente dans C parmi elles les moins modifiées jusqu ii. Pour haque variable z, aluler sore(z) de la manière suivante : si v(z) = vrai alors ompter le nombre de lauses où z apparaît négativement moins le nombre de lauses où elle apparaît positivement, 1. Si vous programmez en JAVA, vous pouvez vous inspirer de l exemple donné à la page www-verimag.imag.fr/~devismes/java/fihier.java pour la gestion de fihiers.
sinon ompter le nombre de lauses où z apparaît positivement moins le nombre de lauses où elle apparaît négativement Ensuite hoisir une variable de C de sore maximum. Vous inspirer des heuristiques MOMS et JW données dans le poly. Mixer plusieurs des stratégies préédentes. et. Dans e as, il peut être judiieux de omparer entre elles les différentes proédures de hoix que vous aurez implantées. Notez que pour simplifier votre implémentation, vous pouvez transformer en préambule votre ensemble de lauses en ensemble de lauses 3-SAT équivalent (vous pourrez vous baser sur l algorithme proposé dans l exerie 50 p. 63 de votre polyopié de ours). Problème omplexe. En e qui onerne le dernier problème demandé (le problème omplexe validé par votre hargé de TD), vous devrez fournir : Un programme générant le fihier DIMACS orrespondant à une instane du problème. Par exemple, une grille de Sudoku ontenant quelques nombres. Un programme affihant de manière lisible une solution du problème omplexe hoisi. Par exemple, si vous hoisissez le Sudoku, e programme devra affiher une grille solution alulée par votre solveur à partir de la grille inomplète fournie en entrée. Ne perdez pas de temps à réaliser une interfae graphique onviviale : des programmes reevant et affihant les instanes du problème sous forme de simples fihiers texte sont tout-à-fait aeptables pour e projet. 3 Rapport Votre rapport devra inlure : 1. le ontenu (éventuellement mis à jour) de votre pré-rapport ; 2. la tradution en logique propositionnelle de l énoné des différents problèmes traités ; 3. une présentation (informelle) de votre solveur illustrée par l analyse d exemples pertinents ; 4. une présentation des deux programmes «interfae» du gros problème que vous aurez traité ; 5. éventuellement, vos expérimentations sur les valeurs de MAX_ITERATION et de P et/ou l étude omparative des différentes méthodes de hoix de la variable que vous aurez programmées. 4 Soutenane La soutenane est OBLIGATOIRE (sauf pour les dispenses offiielles). Toute absene injustifiée onduira le jury à délivrer la note de 0 au projet pour le andidat absent. Lors de votre soutenane, vous exéuterez vos programmes sur une mahine personnelle ou
une mahine de l université. Chaque membre du projet devra intervenir équitablement pendant la soutenane. Il faudra présenter le sujet du projet, mais aussi de donner une démonstration de vos programmes sur mahine. 5 Exemple pour le problème des pigeons Nous illustrons par un exemple simple le minimum que nous attendons des étudiants pour le projet de INF242. 5.1 Enoné informel Un olombophile possède n nids et p pigeons. Il souhaite que : haque pigeon soit dans un nid, il y ait au plus un pigeon par nid. 5.2 Modélisation en ensemble de lauses La variable booléenne x i,j représente le fait que le pigeon i est dans le nid j. Par exemple, pour un ensemble de pigeons {a, b, } et un ensemble de nids {1, 2, 3, 4}, nous devons donner au SAT-solveur l ensemble de lauses suivant : Chaque pigeon est dans un nid : x a,1 x a,2 x a,3 x a,4, x b,1 x b,2 x b,3 x b,4, x,1 x,2 x,3 x,4, Chaque nid ontient au plus un pigeon : x a,1 x b,1, x a,1 x,1, x b,1 x,1 x a,2 x b,2, x a,2 x,2, x b,2 x,2, x a,3 x b,3, x a,3 x,3, x b,3 x,3, x a,4 x b,4, x a,4 x,4, x b,4 x,4. 5.3 Transformation en fihier DIMACS et résolution par un SATsolveur Le premier programme «interfae» doit demander à l utilisateur de donner le nombre de nids n et le nombre de pigeons p, puis doit générer le fihier DIMACS odant les ontraintes relatives au problème de n nids et p pigeons. Si n p alors votre WalkSat trouvera une assignation modèle. Votre seond programme «interfae» devra alors affiher dans quel nid l assignation à affeter haque pigeon. Ainsi nous saurons omment plaer les pigeons! Nous remarquons qu il nous est faile de trouver une solution à e problème alors que l ordinateur doit résoudre un nombre de ontraintes exponentielles.