Master d’Ing´eni´erie Informatique de Paris 7
M1: Prolog et programmation par contraintes
Examen du 13 juin 2007 - Dur´ee: 2 h
Documents autoris´es; le bar`eme est donn´e `a titre indicatif.
Partie “Prolog”
Exercice 1 (3 points)
Soit p/3 le pr´edicat d´efini par
p(X,Y,Z):-Z>=X,Z=<Y.
1. Donner, en une phrase, une sp´ecification de ce pr´edicat.
2. Quel est le r´esultat de la requˆete p(3,7,X). ?
3. D´efinir un pr´edicat entre(+plancher,+plafond,-r´esultat) tel que la requˆete entre(n,m,X), pour net
mentiers, donne comme r´esultats tous les entiers compris entre net m.
Par exemple:
?- entre(3,7,X).
X=3?;
X=4?;
X=5?;
X=6?;
X=7?;
no
Exercice 2 (2 point)
L’´enonc´e suivant sp´ecifie un algorithme r´ecursif bien connu:
Un entier positif ndivise un entier positif msi nmet si ou bien n=m, ou bien ndivise mn.
Ecrire un pr´edicat div(+diviseur,+dividende) qui implemente cet algorithme.
Exercice 3 (3 point)
1. A l’aide de entre et div, ´ecrire un pr´edicat nonpremier/1 tel que la requˆete nonpremier(n), pour n
entier non egatif, r´eussi si et seulement si nn’est pas un nombre premier.
2. A l’aide de nonpremier, ´ecrire un pr´edicat premier/1 qui eussi si et seulement si l’argument est un
nombre premier.
Exercice 4 (2 point)
1. On consid`ere le pr´edicat
premier1(X):- X>1, P is X-1, entre(2,P,Y), not(div(Y,X)).
Que calcule ce pr´edicat?
2. La primalit´e d’un nombre est une propri´et´e universelle: kest premier si pour tout entier nentre 2et
k1,nne divise pas k
Sa n´egation est donc une propri´et´e existentielle: kn’est pas premier s’il existe un entier nentre 2et k1,
qui divise k
Commenter bri`evement le fait que pour tester en Prolog une propri´et´e universelle Pil convient de tester
la egation de la n´egation de P.
1
Partie “Programmation par Contraintes”
Exercice 5 (2 points)
Consid´erez le probl`eme suivant:
Minimiser 2 YX+ 2 par rapport `a
U= 2 + 3 Y2Xet
Z= 1 + 6 Y2Xet
X0 et Y0 et Z0 et U0
Quel est la requ`ete qu’on doit poser `a YAP pour obtenir la valeur du minimum ?
Le probl`eme est d´ej`a en forme r´esolue de base. Quelle est l’´equation que l’algorithme simplex choisit pour
pivoter ?
Donnez le nouveau probl`eme apr`es un pas de l’algorithme.
`
A la fin de l’algorithme on obtient quelle minimum ? Il est obtenu avec quelles valeurs des variables ?
Exercice 6 (2 points) Consid´erez la contrainte suivante:
X6=YX= 2 Y+ 2
avec domaines X: [3..9], Y :|2..7]
Appliquez l’algorithme de borne consistance sur cette contrainte.
Est-ce qu’avec l’arc-consistance on pourrait r´eduire les domaines plus ?
Exercice 7 (2 points) Appliquer l’algorithme de Fourier sur la contrainte suivante pour ´eliminer les variables
X1, X2et X3(dans cet ordre).
X1+ 3 X4X22X5X1X2+ 1 X2X1+ 3 2X14X32
Exercice 8 (4 points)
Le Kakuro est un jeu. Le but est de remplir les cases blanches des grilles de Kakuro en utilisant seulement
les chiffes de 1 a 9. Chaque Kakuro est compos´e de plusieurs bloc disposes sur des lignes et des colonnes, limit´es
par des cases noires, de la mˆeme mani`ere que les mots crois´es. Ces cases doivent ˆetre remplies par des chiffres
dont la somme correspond au nombre indiqu´e dans la case noire (en bas, pour le bloc vertical, en haut pour le
bloc horizontal). Aucun chiffre ne doit apparaˆıtre deux fois dans le mˆeme bloc. Consid´erez la grille suivante:
Mod´elisez le probl`eme comme un probl`eme de satisfaction de contraintes (en donnant les variables, leurs
domaines, et les contraintes).
´
Ecrivez un programme en GPROLOG qui esout cette grille.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !