Explications conviviales pour la programmation par contraintes
Samir Ouis* — Narendra Jussien* — Olivier Lhomme**
* École des Mines de Nantes
4 rue Alfred Kastler – BP 20722
F-44307 Nantes Cedex 3
{souis, jussien}@emn.fr
** ILOG
1681, route des Dolines
F-06560 Valbonne
[email protected]
Dans cet article, nous présentons un ensemble d’outils pour fournir des explications
conviviales dans un système de programmation par contraintes avec explications. L’idée est de
représenter les contraintes d’un problème sous forme hiérarchique (un arbre). Les utilisateurs
sont alors représentés comme un ensemble de noeuds compréhensibles dans cet arbre (une
coupe). Les explications classiques (les ensembles de contraintes du système) doivent juste être
projetées sur cette représentation pour être compréhensibles par n’importe quel utilisateur.
Nous présentons ici les intérêts principaux de cette idée.
RÉSUMÉ.
In this paper, we introduce a set of tools for providing user-friendly explanations in
an explanation-based constraint programming system. The idea is to represent the constraints
of a problem as an hierarchy (a tree). Users are then represented as a set of understandable
nodes in that tree (a cut). Classical explanations (sets of system constraints) just need to get
projected on that representation in order to be understandable by any user. We present here the
main interests of this idea.
ABSTRACT.
MOTS-CLÉS :
programmation par contraintes, explications, implémentation
KEYWORDS:
constraints programming, explanations, implementation
2
JFPLC’02.
1. Introduction
Les systèmes classiques de programmation par contraintes (comme Ilog Solver,
Chip de Cosytec, gnuProlog de l’INRIA...) sont impuissants face à des systèmes de
contraintes n’admettant pas de solution. La plupart du temps, seul un laconique pas de
solution est affiché. L’utilisateur doit lui-même trouver les causes : le problème initial
n’admet pas de solution, une mauvaise modélisation, un bug dans le solveur...
Pour aider à la diffusion de la programmation par contraintes, il est indispensable
de palier ce défaut. En particulier, il faut être capable de guider l’utilisateur en délimitant la portion de programme (i.e. un ensemble de contraintes du système) qui
conduit à une situation à laquelle il ne s’attendait pas. Une approche prometteuse
dans cette voie semble être l’utilisation d’ explications : il s’agit d’un ensemble de
contraintes expliquant une conséquence du solveur (retrait de valeur, contradiction,...).
La construction de telles explications a fait l’objet de plusieurs travaux, par exemple
[JUS 01, JUN 01] pour les plus récents. Malheureusement, ces explications sont très
peu conviviales : il s’agit d’ensemble de contraintes de bas niveau et seul le développeur les comprend. D’où le besoin d’outils de traduction. De toute évidence, l’aide du
développeur est requise. Lors du développement d’une application, un expert a besoin
de traduire le problème d’une représentation haut niveau (la compréhension de l’utilisateur du problème) à une représentation bas niveau (les contraintes du système).
Nous notons cette traduction par la traduction ✂✁☎✄✝✆✞✄✠✟☛✡☞✁✂✌☛✂✍✏✎✑✟✓✒✔✟✓✁✖✕✘✗☎✌ .
Pour les explications conviviales, nous avons besoin d’une traduction dans l’autre
sens : depuis les contraintes bas niveau (adaptées au solveur) vers des contraintes compréhensibles par l’utilisateur (plus haut niveau d’abstraction). Nous notons cette traduction ✟✓✒✙✟✘✁✖✕✘✗☎✌✚✎✛✂✁✙✄☛✆✞✄✠✟☛✡☛✁✖✌☛✂✍ . Cette dernière n’est jamais explicitement codée
dans le système. Demander à un développeur de fournir un tel traducteur en complément du système déjà réalisé n’est pas une bonne idée : cela peut lui sembler bizarre
et cela risque de modifier sa façon de coder pour lui faciliter la tâche. Nous ne voulons
pas de ces modifications. D’où l’idée d’un système automatique simple.
Dans cet article, nous présentons un système automatique pour produire des explications conviviales. Nous rappelons d’abord quelques utilités des explications dans la
programmation par contraintes. Ensuite, nous montrons comment notre système fonctionne sur des applications hiérarchiques puis nous présenterons une implémentation.
Nous conclurons cet article avec quelques applications potentielles de nos explications
conviviales et quelques travaux liés.
2. La notion d’explication
Nous considérons des CSP représentés par un couple ✜✣✢✥✤✧✦✩★ . ✢ est un ensemble de
variables et ✦ un ensemble de contraintes portant sur ces variables. Les domaines des
variables sont vus ici comme des contraintes unaires. D’autre part, l’énumération est
gérée comme une série d’ajouts et de retraits de contraintes spécifiques : les contraintes
d’énumération. Nous ne nous limitons pas aux affectations de valeur à une variable
Explications conviviales pour la PPC
3
mais acceptons tout type de contraintes d’énumération (par exemple contraintes de
séquencement entre tâches dans le domaine de l’ordonnancement).
Une explication de contradiction (également appelée nogood [SCH 94]) est un
sous-ensemble inconsistant du système courant de contraintes, i.e. la restriction du CSP
à ce sous-ensemble de contraintes ne possède pas de solution. L’équation 1 présente
la décomposition que l’on peut faire classiquement d’un tel nogood : un ensemble
de contraintes initiales (ici ✦✩✪✬✫✭✦ ) est un ensemble de contraintes d’énumération
actuellement intégrées au système de contraintes (ici ✮✰✯☞✱✓✤✳✲✳✲✴✲✳✤✵✮✰✯✓✶ ).
✷ ✜✣✦ ✪☞✸ ✮✰✯ ✱ ✸ ✲✹✲✺✲ ✸ ✮✰✯ ✶ ★
[1]
On peut avoir une vision plus opérationnelle des explications de contradiction en
réécrivant l’équation 1 obtenant ainsi l’expression suivante :
✻✼
✦ ✪ ✸
✽
✾❀✿✂❁ ✱✧❂❃❂ ✶✵❄❆❅❈❇
✮✰✯ ✾❀❉❊
✎
✷ ✮✰✯✳❇
[2]
Dans le cas où ✮✳✯ ❇ est de la forme ❋❍●❏■ , la partie gauche de l’implication est
appelée une explication de retrait car elle justifie le retrait de la valeur ■ du domaine
P ■✂★ .
de la variable ❋ . Elle est notée : ❑☞▲✠▼✞◆✔✜❖❋◗●❘
On peut considérer les opérations de filtrage dans un CSP comme la production de
P ■ ) auxquelles on peut associer une
nouvelles contraintes (principalement du type ❋◗●❘
explication (la plus simple d’entre elles étant le système courant de contraintes mais
on verra plus tard que l’on peut faire mieux).
On peut produire des explications à partir d’explications existantes. En effet, supposons ✜❙✮✰✯✝✱❯❚❍✲✴✲✳✲✠❚❱✮✳✯✰❇❲★ l’ensemble des choix possibles pour une décision donnée
(valeurs possibles, séquencements possibles, ...). Alors, s’il existe des explications
✦❳✱ ✪ ✎ ✷ ✮✰✯✝✱ , ..., ✦❳❇ ✪ ✎ ✷ ✮✰✯✳❇ , on peut en déduire ✷ ✜❙✦✩✱ ✪ ✸ ✲✴✲✳✲ ✸ ✦❳❇ ✪ ★ . En particulier, à
partir du domaine vide d’une variable ❋ on peut en déduire une explication de contradiction :
✻✼ ✽
✷
❨ ✿☞❩✴❬✹❭❫❪
❑☞▲✠▼✞◆✔✜❖❋❴●❵
P ■✂★ ❉❊
[3]
Notons qu’une explication de contradiction peut ne plus contenir de contraintes d’énumération, caractéristique d’un problème sur-contraint.
Il existe généralement plusieurs explications différentes pour un retrait donné. On
pourrait vouloir en calculer et en conserver plusieurs mais ceci conduirait à une complexité spatiale éventuellement exponentielle. Une autre approche consiste à oublier
une partie des nogoods : ceux qui ne sont plus pertinents1 dans l’état courant de la recherche. De cette façon, la complexité spatiale de l’enregistrement reste polynômiale.
❛
. Un nogood est dit pertinent si toutes les contraintes le constituant – en particulier les décisions
prises lors de l’énumération – sont encore valides dans l’état courant du système [Bay 96].
4
JFPLC’02.
Nous avons choisi de ne pas calculer plusieurs explications pour un même retrait de
valeur. Nous ne conserverons donc qu’une seule explication de retrait à la fois.
Les explications sont utilisées dans plusieurs contextes [JUS 00a, JUS 01] tels
que :
– le débogage de problèmes en fournissant des explications de contradiction ;
– la résolution de problèmes dynamiques en fournissant les effets passés des
contraintes ;
– la résolution de problèmes sur-contraints en combinant les deux approches précédentes ;
– la définition de nouveaux algorithmes de recherche tels que mac-dbt [JUS 00b]
et path-repair [JUS 00c].
[JUS 01] présente la notion de programmation par contraintes avec explications
(e-constraints) pour faire référence aux explications et à leurs utilisations dans la programmation par contraintes.
3. Hypothèse : applications hiérarchiques
Le travail présenté dans cet article repose sur une hypothèse simple : tous les aspects d’une application à base de contraintes peuvent être représentés d’une façon
hiérarchique.
3.1. Un problème : une hiérarchie de contraintes
L’exemple 1 présente un simple problème de contraintes : l’organisation d’une
conférence.
Exemple 1 (Le problème de la conférence ) :
Michael, Peter et Alan organisent un séminaire de deux jours pour écrire un rapport de
leur travaux. Pour être efficace, Peter et Alan doivent présenter leur travail à Michael
et Michael doit présenter son travail à Alan et Peter (actuellement Peter et Alan travaillent dans le même laboratoire). Chaque présentation prend une demi-journée. Dès
le début, Michael signale qu’il lui paraît important d’avoir vu ce qu’ont à dire Peter et
Michael avant de faire ses présentations. Ensuite, Michael signale qu’il aimerait autant
ne pas venir la quatrième demi-journée. Enfin, Michael signale qu’il tient beaucoup à
ne pas présenter ses travaux à Peter et Alan en même temps.
Un modèle de contraintes pour ce problème est décrit dans l’exemple 2. On remarque que le modèle proposé pour le problème de la conférence admet une représentation hiérarchique. Une représentation graphique est donnée (cf. figure 1).
Nous prétendons qu’il est toujours possible d’attacher chaque contrainte dans un
problème donné à un seul père d’abstraction. Cette hypothèse générale peut apparaître comme étant fortement restrictive, mais nous n’avons jamais réussi à trouver
Explications conviviales pour la PPC
5
un contre-exemple : on trouve toujours une autre façon de représenter le problème de
manière hiérarchique.
En effet, deux remarques viennent étayer cette position. Lorsqu’on voudrait utiliser un treillis plutôt qu’un arbre pour représenter un problème donné, il existe toujours
la possibilité de remonter les informations dans le treillis fournissant ainsi un arbre.
Par exemple, si on veut modéliser le fait qu’à la fois Peter et Alan refusent d’avoir
une présentation des travaux de Michael au même moment, ce qui conduit à un treillis
puisqu’on aurait une information partagée sur Michael, on peut tout simplement reformuler les contraintes pour les voir sous l’angle de Michael. Par ailleurs, dans tous
les cas, la modélisation réalisée n’est qu’une vision abstraite. Concrètement, lors de
l’implémentation, on ne pose pas deux fois une même contrainte (on ne peut tout simplement pas le faire dans les solveurs existants). On obtient alors naturellement un
arbre : le déroulement effectif de la mise en place des contraintes dans le programme.
C’est bien cet arbre qui nous intéresse dans un cadre de débogage car c’est lui qui
correspond à la réalité du problème résolu. Notre hypothèse hiérarchique s’en trouve
donc justifiée.
Comme nous venons de le voir, la mise en place effective des contraintes est une
étape obligée dans un programme classique avec contraintes. La définition de nouvelles procédures de mise en place est le moyen qui nous intéresse pour mettre en
place nos mécanismes d’abstraction (cf. exemple 3).
Exemple 2 (Un modèle de contraintes pour le problème de la conférence) :
Soit ❜❞❝✂❡❢❜◗❣✙❡❈❤❥✐❦❡♠❧♥✐ les variables représentant les quatre présentations ( ❜ et ✐
désignent respectivement les présentations dans lesquelles Michael est orateur et au❛
❛
diteur). Les domaines des variables sont ♦ ❡q♣✝❡♠r☛❡❈s✴t ( exprime la matinée du premier
jour et s exprime l’après-midi du deuxième jour).
Le problème est composé de plusieurs contraintes : contraintes implicites concernant
l’organisation des présentations et les contraintes exprimées par Michael.
Les contraintes implicites peuvent être exprimées comme suit :
– Un orateur ne peut être auditeur dans la même demi-journée. Cette contrainte est
modélisée par : ✉✴✈ : ❜✇❝②③ ① ❤❥✐ , ✉✧④ : ❜⑤❣⑥③ ① ❧♥✐ , ✉✵⑦ : ❜❞❝②③ ① ❧♥✐ et ✉✵⑧ : ❜◗❣⑥③ ① ❤❥✐ .
– Aucune personne ne peut assister à deux présentations en même temps. Celle-ci
est modélisée par ✉❫⑨ : ❤⑩✐✭③ ① ❧♥✐ .
Les contraintes de Michael peuvent être exprimées :
– Michael souhaite présenter ses travaux après les présentations de Peter et Alan.
Ce qui s’exprime par : ✉✧❶ : ❜❞❝⑥❷❸❤❥✐ , ✉❫❹ : ❜❞❝⑥❷❵❧♥✐ , ✉✵❺ : ❜◗❣⑤❷❸❤❥✐ and ✉✵❻ :
❜◗❣❼❷❱❧♥✐ .
– Michael ne souhaite pas venir lors de la s✘❽❙❾❿❽ demi-journée peut s’écrire : ✉ ✈❀➀ :
❜❞❝➁③ ① s , ✉ ✈♠✈ : ❜◗❣⑥③ ① s , ✉ ✈❙④ : ❤⑩✐➂③ ① s and ✉ ✈❀⑦ : ❧♥✐➂③ ① s .
– Michael ne veut pas présenter ses travaux à Peter and Alan en même temps
s’écrit : ✉ ✈❀⑧ : ❜✇❝②③ ① ❜⑤❣ .
6
JFPLC’02.
Figure 1. Une vue hiérarchique du problème de la conférence
3.2. L’élaboration du traducteur système
➃
utilisateur
En développant une application de programmation par contraintes, le développeur doit explicitement établir la hiérarchie sous-jacente de son problème. Seules les
feuilles de cette structure (les contraintes bas niveau) sont utilisées par le solveur.
Les feuilles peuvent être trop bas niveau pour un utilisateur typique de la l’application finale. Cependant, il peut comprendre des niveaux plus hauts dans la hiérarchie. L’hypothèse hiérarchique permet d’obtenir une représentation idoine du problème sans effort de la part du développeur. Une fois construite, cette représentation
peut être utilisée pour interagir avec n’importe quel utilisateur via des explications
conviviales. De telles explications sont fournies en utilisant des procédures qui traduisent les contraintes bas niveau en des noeuds compréhensibles de la hiérarchie.
Ces procédures sont complètement indépendantes du problème et peuvent être incorporées directement dans le solveur.
La perception qu’un utilisateur a d’un problème peut être considérée comme un
ensemble de nœuds dans l’arbre de la hiérarchie : un nœud est compréhensible par cet
utilisateur si et seulement si il est présent dans cet ensemble de nœuds. Nous appellerons cet ensemble une coupe selon la vue hiérarchique du problème considéré. Dans
notre exemple, pour chaque utilisateur on obtient (cf. figure 2) :
– Le responsable de salle des réunions du département de faculté a seulement une
vue très partielle : il ne veut pas connaître les voeux de Michael et les contraintes
implicites. La seule partie du problème dont elle veut s’occuper est la partie globale
du problème. Sa vue du problème serait donc : The conference problem .
Explications conviviales pour la PPC
7
– John qui organise en réalité les réunions trouve Michael trop compliqué. Il
ne veut pas s’occuper de ses nombreux voeux. Mais, il comprend les contraintes
implicites et doit faire face à ces dernières. Donc, sa vue du problème serait :
Speaker vs. Auditor , Auditor vs. 2 pres. et Michael constraints .
– Michael ne veut pas s’occuper des contraintes implicites. Bien sûr. il sait exactement ce qu’il veut. Donc, sa vue du problème serait : The conference problem ,
P&A before , Not ➄☞➅❀➆✞➇✘➈✝➉ day et P&A not same time .
Figure 2. Différentes vues du problème de la conférence
Une explication conviviale peut être obtenu simplement en projetant les contraintes
bas niveau de l’explication sur la compréhension de l’utilisateur selon la hiérarchie du
problème.
8
JFPLC’02.
Notre exemple, le problème de conférence n’admet aucune solution. Une explication de cette situation fournie par un système d’explications est : ➊✘✮❲➋✝✤✵✮✰➌✝✤✵✮✰➍✝✤✵✮✰➎✝✤✵✮✰➏✝✤✵✮ ✱♠➐ ✤
✮ ✱q✱ ✤q✮ ✱❢➑ ✤✵✮ ✱❈➒☛➓ .
En voici des versions plus conviviales :
– Pour le responsable de la salle des réunions, l’explication est simple. Il n’y a
aucune solution possible pour le problème en raison de son ensemble de contraintes.
La projection donne : The conference problem . Elle signale donc à John qu’il y a un
problème.
– John regarde l’explication de son point de vue. La projection donne :
Auditor vs. 2 pres. et Michael constraints . Les voeux de Michael sont trop contraignants. John lui demande de reconsidérer ses voeux.
– Michael regarde l’explication de son point de vue. La projection donne :
The conference problem , P&A before , not ➄✠➅❀➆✖➇✘➈✝➉ day et P&A not same time .
Il sait que l’ensemble de ses voeux est un problème. Il peut renoncer à n’importe quel
souhait. Par exemple, Michael renonce à la contrainte de la quatrième demi-journée.
Ensuite, le solveur fournit une solution.
On remarque que l’entrée de l’utilisateur doit aussi être traduite en des contraintes
bas niveau. Une étape de projection dans l’autre sens est donc nécessaire. Il y a
deux options : la suppression de toutes les contraintes concernées ou seulement les
contraintes qui apparaissent dans l’explication. Dans notre exemple, nous pouvons relaxer toutes les contraintes de ✮ ✱❈➐ à ✮ ✱❈➔ . Mais relaxant ✮ ✱❢➔ serait inutile dans notre cas,
puisque cette contrainte n’apparaît pas dans l’explication.
De plus, choisir de relaxer uniquement les contraintes concernées peut aider à aller
dans le sens d’une relaxation partielle de contraintes. Il s’agirait alors en quelque sorte
de méta contraintes molles (codées à l’aide d’un ensemble de contraintes bas niveau
dont certaines seraient relaxées).
4. Implémentation : extension du système PaLM
4.1. Introduction à PaLM
→ ✡✠➣✠↔
est un système de programmation par contraintes fournissant et utilisant des
explications [JUS 00a]. Il est écrit à l’aide de la bibliothèque ↕✘➙✞➛✖↕☛➛ [LAB 00]. ↕✘➙✖➛✞↕☛➛
→
est la couche contrainte du langage de programmation ↕ ✆✠✡✔✄❲✍✖✌ [CAS 99]. ✡✠➣☞↔ fournit
des outils pour manipuler les explications : une classe spécifique, des méthodes de
→
sauvegarde, méthode d’accès ... ✡✠➣✠↔ calcule des explications pendant la propagation
et peut même les utiliser pour guider la recherche [JUS 01] (déjà testé avec succès
dans ✗☎✡ ↕➝➜✓➞☞➟ ✁ [JUS 00b] et aussi dans ➠ ✡☞✁ ➙❿➜ ✍✖✌ ➠ ✡✔✄✘✍ [JUS 00c]).
→
Le système ✡☞➣✠↔ manipule des variables représentées par des domaines énumérés
ou seulement par des intervalles. Il fournit un ensemble classique de contraintes arith-
Explications conviviales pour la PPC
9
métiques de base aussi bien que des contraintes symboliques (comme allDifferent,
element...).
→ ✡✠➣✠↔
est conçu pour manipuler (automatiquement) des problèmes sur-contraints.
Si un utilisateur veut définir sa propre stratégie pour traiter de tels problèmes (comme
→
ce qui a été fait pour le problème de conférence), ✡✠➣✠↔ fournit des exceptions spécifiques qui peuvent être récupérées en utilisant les mécanismes ✁➝✍➝✒✖➡ ↕ ✡☞✁ ↕❲➙ de ↕ ✆✠✡✞✄✘✍✖✌ .
→ ✡ ➣☞↔
est disponible sur ➢✠➢➝➢♥➤ ✌ ➜☞↕☛➛☛➥ ✟✓✁✠✍✖✡✔✄ ➥ ✁✙✟ ➤➦➥ ✌☛✁ .
Le système ✠
4.2. Des outils interactifs
4.2.1. Ajout des informations sur la structure
L’idée principale est de fournir des outils interférant le moins possible avec le code
original de l’application. Nous avons donc introduit la notion de ➧✖➨✠➟✖➛☞➩ (User-Friendly
box) qui regroupe des ensembles de contraintes dans une hiérarchie. Le regroupement
de contraintes est fait en spécifiant simplement les limites des boîtes en utilisant deux
méthodes : ✟✓✁✖✡☞✍➝✁ ➧✖➨✠➫✞➛☞➩ et ✌ ➥✖➞☛➧✖➨✠➫✖➛☞➩ . Cela explique pourquoi nous avons besoin de
l’hypothèse hiérarchique : la modification de code est minimale.
Considérons le problème de conférence présenté dans l’exemple 1 et modélisé
dans l’exemple 2. L’exemple 3 montre un codage de ce problème en ↕✘➙✞➛✞↕✝➛ .
Comme nous pouvons le constater, une hiérarchie implicite apparaît dans le codage
du problème : il est plus facile de maintenir un tel programme si l’ajout de contraintes
est structuré comme exprimé dans la phase de modélisation.
Pour utiliser les ➧✖➨✠➟✞➛☞➩ ✌✞✟ afin de mettre en œuvre les idées de cet article, on a
besoin d’ajouter quelques informations lors de l’ajout des contraintes. L’exemple 4
montre le code obtenu. Remarquons que ✟✓✁✖✡☞✍➝✁ ➧✖➨✠➫✞➛☞➩ a besoin de trois paramètres :
le problème courant, une courte description dont le but de faciliter la définition de la
représentation de l’utilisateur (cf. section suivante) et une représentation textuelle de
l’ensemble de contraintes.
4.2.2. Représentation de l’utilisateur
Nous fournissons aussi des outils pour représenter l’utilisateur à l’aide des descriptions courtes précisées lors de la définition de ➧✖➨✠➟✖➛☞➩ ✌✞✟ : la méthode ✟✝✌☞✁ ➧ ✟☛✌☛✍➝➭✖✌ ➜
➠ ✍✖✌✞✟☛✌ ➥ ✁✖✡☞✁☎✄ ➛✝➥ prend une liste de descriptions courtes pour définir ensuite la coupe
dans l’arbre hiérarchique.
De plus, les outils de projection nous permettent de traduire une explication donnée
selon la représentation de l’utilisateur.
→
Finalement, grâce aux capacités de ✡☞➣✠↔ face aux problèmes dynamiques, des
outils sont fournis pour gérer l’ajout dynamique ou la suppression de ➧✖➨☞➟✞➛☞➩ ✌✞✟ (c’est-
10
JFPLC’02.
Exemple 3 (Le codage du problème de la conférence avec choco) :
➯✺➲♠➳➦➵❢➸q➺➦➻q➺➦➵✧➲♠➺✴➼➾➽❲➚❿➪q➳❢➶➦➹
➚❆✃♥❐✧❒➦❮q➺➦❰❈➻✵➳✣➱ ➺✣❐✝➼❙Ï✣➲♠➳✣➵q➸q➺➦➻q➺✣➵❫➲♠➺⑩➮❢➻q➳✣➱ ➺✣❐✳Ï✧Ð✺Ñ✧➽
➘➦➴✏➷ ➺➦➬❯➮❢➪✵➱➁
❒➦➻✵Ò❼➚✹✃✏➲✣➻q➺❈❒♠➬q➺♠Ó❢➷ ➳✣➵q➸q➺➦➻q➺✣➵❫➲♠➺➦Ôq❒➦➻✧➶♠❒✣➱ ➷ ➺qÒ✳➼❆➷➮❈➱❫➽
➶❙➵Õ➼
➮✵➳qÒ✣➬✧Ö❀❐❈➮ ➷ ➶❈➲❈➶✣➬qÓ❢➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬✧Ò✳➼❆➮❈➱✓Ð×➪q❒♠➻✵Ò❢➽✰Ð
➮✵➳qÒ✣➬❈Ø✵➶❈➲✣Ù✵➺❈❒ ➷ Óq➳✣➵✧Ò✣➬❈➻✵❒❢➶❙➵❢➬✵Ò✴➼❆➮❈➱✓Ð×➪q❒➦➻✧Ò❢➽✰Ð
Ò♠➳ ➪q➺✴➼❆➮❢➱❫➽
➽✣Ú ➷
Û❈ÛÜ➲✣➻q➺❈❒♠➬✵➶❙➵qÝ❯➬❈Ù✵➺♥➪q❒➦➻✧➶♠❒✣➱ ➺qÒ
➯✺➲✣➻✵➺❈❒➦➬q➺♠Óq➳✣➵❢➸q➺➦➻✵➺✣➵✧➲♠➺➦Ô✵❒➦➻✵➶♠❒✣➱ ➷➷ ➺❢Ò✳➼❆➮❢➱☛➚✔❰❢➻q➳✣➱ ➷ ➺➦❐❫➽✴➚ ➷ ➶❢Ò✣➬✝➯❖Ö❀➵q➬❈Ôq❒➦➻❢Ú ➘♠➴ÕÞ❈Þ❈Þ Ú
Û❈Û❯➮✵➳❢Ò✣➬✧➶❙➵qÝ❯Ø✵➶❢➲❙Ù✵❒❈➺ ➲♠➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬✧Ò
➯❃➮✵➳qÒ✣➬❈Ø✵➶❈➲✣Ù✵❒❈➺ ➷ Óq➳✣➵✧Ò✣➬❈➻✵➷❒❢➶❙➵❢➬✵Ò✴➼❆➮❈➱☛➚☎❰❈➻q➳➦➱ ➷ ➺✣❐✓Ðß➪✵❒➦➻✵Ò❲➚ ➷ ➶❈Ò✣➬✝➯àÖ❀➵❢➬❈Ôq❒♠➻❢Ú✵➽✴➚❿➪q➳q➶➦➹ ➘➦➴❼Þ❢Þ❈Þ Ú
➯❃➮✵➳qÒ✣➬✧Ö❀❐❈➮ ➷ ➶❈➲❈➶✣➬qÓ❢➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬✧Ò✳➼❆➮❈➱☛➚✙❰❈➻q➳➦➱ ➷ ➺✣❐✓Ðá➪q❒➦➻✵Ò❲➚ ➷ ➶❈Ò✣➬✝➯àÖ❀➵❢➬❈Ôq❒♠➻❢Ú✵➽✴➚❿➪q➳q➶➦➹
➘➦➴ ➮✵➮✵➳❢➳❢Ò✣Ò✣➬✵➬❢æqâ✣➮✵➳➦➬❈➺❈ç❈❒➦❮✵è✵➺➦➳➦➻❢❰❈➻qã➦äq➺❢➹✵Ò❈➺✣➶✣➵❢➬q➬q➳➦➻✧❒➦➬✧Ö❙➵✧➶♠➳✣➲♠➵✧➳✣❐❈Ò➦➮✧ã❈➬❈❒➦➬✵ç♠Ù✵➶❙➱✧➺❈â❢➶ ➷❒✣❐✵➶✣➬❢➺➦ç✵å❈Óq➶✣❐✵➳✣➵✧➺♠Ó❢Ò✣➬❈➳✣➵❫➻✵❒❢Ò✣➬❈➶❙➵❢➻q➬✵❒❢Ò✴➶✣➵❢➼❆➮❈➬✵➱✘Ò✰Ð✔➼❆➮❈➪q➱✝❒♠Ð✔➻✵➪qÒ❢❒➦➽✰➻✵Ð Òq➽éÚ
Û❈Û❯➮✵➳❢Ò✣➬✵➶✣➵qÝ❯➬♠Ù✵➺✏➲♠➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬❳➲♠ê
➯❃➮✵➳qÒ✣➬❈æq➳➦➬❢ç❈èq➳➦❰❈➻✵➺❢Ò♠➺✣➵❢➬✵❒➦➬✵➶♠➳✣➵❫Ò➦ã♠➬❈ç♠Ù✧➺❈â❈❒✣❐✵➺♠ç✵➶❙❐✵➺♠Óq➳✣➵✧Ò✣➬❈➻✵❒❢➶❙➵❢➬✵Ò✴➼❆➮❈➱✝➚✖❰❈➻✵➳✣➱ ➷ ➺✣❐✝Ðë➪q❒➦➻✵Ò✘➚ ➷ ➶❈Ò✣➬☛➯❖Ö❀➵❢➬❈Ô✵❒➦➻❢Ú✵➽
➘➦➴②Þ❈Þ❈Þ Ú
➯❃➮✵➳qÒ✣➬qâ✣➮✵➺❢❒➦❮q➺➦➻❢ã♠äq➹q➶✣➬q➳♠➻✧Ö❀➵✧➲♠➳➦❐❈➮✵❒➦➬✵➶✣➱✧➶ ➷ ➶✣➬qå❈Ó❢➳✣➵✧Ò➦➬❈➻q❒❢➶❙➵q➬✵Ò✳➼❆➮❈➱☞➚✖❰❈➻q➳✣➱ ➷ ➺✣❐✓Ðß➪q❒♠➻✵Ò❲➚ ➷ ➶❈Ò✣➬✝➯❖Ö❙➵❢➬❈Ôq❒➦➻qÚ✵➽✴➚❿➪q➳❢➶♠➹
➪✵❒➦➻✵Ò❲➯❖ì➦ÚÕí❆✃❈✃❯➪✵❒➦➻✵Ò❲➯✹î❈Ú✵➽✰ÐïÛ❈Û✏➲♠➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬❳➲❢ì
➘➦➴ ➮✵➮✵➳❢➳❢Ò✣Ò✣➬✓➬✓➼❆➼❆➮❈➮❈➱✓➱✓Ðë
Ðë➪✵❒➦➻✵Ò❲➯✹ð❈ÚÕí❆✃❈✃❯➪✵❒➦➻✵Ò❲➯❆Ñ❢Ú✵➽✰ÐïÛ❈Û✏➲♠➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬❳➲♠î
➮✵➳❢Ò✣➬✓➼❆➮❈➱✓Ðë➪✵❒➦➻✵Ò❲➯❖ì➦ÚÕí❆✃❈✃❯➪✵❒➦➻✵Ò❲➯❆Ñ❢Ú✵➽✰ÐïÛ❈Û✏➲♠➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬❳➲♠ð
➮✵➳❢Ò✣➬✓➼❆➮❈➱✓Ðë➪✵❒➦➻✵Ò❲➯✹ð❈ÚÕí❆✃❈✃❯➪✵❒➦➻✵Ò❲➯✹î❈Ú✵➽✣ÚñÛ❈Û✏➲♠➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬❳➲➦Ñ
Exemple 4 (L’ajout des UFboxes) :
➯✺➲♠➳➦➵❢➸q➺➦➻q➺➦➵✧➲♠➺✴➼➾➽❲➚❿➪q➳❢➶➦➹
➚❆✃♥❐✧❒➦❮q➺➦❰q❒ ❐❢❰❈➻q➳➦➱ ➺✣❐✓➼✣Ï✣➲♠➳✣➵❢➸✵➺➦➻q➺✣➵✧➲❈➺✥➮q➻q➳✣➱ ➺➦❐✳Ï✧Ð✺Ñ✵➽éÛ❢Û✏Ò✣è✵➶➦➬✵➲❙Ùñ➬q➳❯❰q❒♠ò♠Ø
➘➦➴✏➷ ➺➦➬❯➮❢➪✵➱➁
❒➦➻✵Ò❼➚✹✃✏➲✣➻q➺❈❒♠➬q➷ ➺♠Ó❢➳✣➵q➸q➷➺➦➻q➺✣➵❫➲♠➺➦Ôq❒➦➻✧➶♠❒✣➱ ➷ ➺qÒ✳➼❆➮❈➱❫➽ ➷
➶❙➵Õ➼
➮✵➳qÒ✣➬✧Ö❀❐❈➮ ➷ ➶❈➲❈➶✣➬qÓ❢➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬✧Ò✳➼❆➮❈➱✓Ð×➪q❒♠➻✵Ò❢➽✰Ð
➮✵➳qÒ✣➬❈Ø✵➶❈➲✣Ù✵➺❈❒ ➷ Óq➳✣➵✧Ò✣➬❈➻✵❒❢➶❙➵❢➬✵Ò✴➼❆➮❈➱✓Ð×➪q❒➦➻✧Ò❢➽✰Ð
Ò♠➺♠➬♠ó✧Ò♠➺➦➻❢ôq➺✣➮❢➻q➺qÒ♠➺✣➵❢➬q❒♠➬✵➶♠➳✣➵✓➼✹➮❈➱✓Ð ➷ ➶❈Ò✣➬✓➼❙Ï➦Ö✣Ó❫Ï❫Ð❙Ï➾❰❢ã♠õ✳Ï✧Ð❙Ï➾æ❢Ñ♠ö✳Ï✧Ð❙Ï➾æ❢❰❢ã❫Ï➦➽❈➽✳Ð×Û❈Û❯➻q➺✣➮❢➻q➺qÒ♠➺✣➵❢➬✵➶✣➵qÝ❯Ø✵➶❈➲✣Ù✵❒❈➺ ➷
Ò♠➳ ➪q➺✴➼❆➮❢➱❫➽
➽✣Ú ➷
Þ❈Þ❈Þ
➯❃➮✵➳qÒ✣➬✧Ö❀❐❈➮ ➷ ➶❈➲❈➶✣➬qÓ❢➳✣➵✧Ò✣➬❢➻q❒❢➶❙➵❢➬✧Ò✳➼❆➮❈➱☛➚✙❰❈➻q➳➦➱ ➷ ➺✣❐✓Ðá➪q❒➦➻✵Ò❲➚ ➷ ➶❈Ò✣➬✝➯àÖ❀➵❢➬❈Ôq❒♠➻❢Ú✵➽✴➚❿➪q➳q➶➦➹
➲♠➳✣➵✧Ò➦➬❈➻q❒❢➶❙➵q➬✵Ò✵Ï➦➽✰Ð
➘➦➴ Ò✣➬q❒➦➮✵➻❢➳q➬♠ó❢Ò✣➬q÷❈õqâ✣➮✵➳❈➺❢ø❲❒➦➼❆➮❈❮q➱✓➺➦➻❢Ð✣ã♠Ï➦äqÖ✣➹qÓ❫➶✣Ï✧➬qÐ✣➳♠Ï➦➻✧Ö❀❐❈Ö❀➵✧➮ ➷➲♠➳➦➶❈❐❈➲❈➮✵➶✣➬ù
❒➦➬✵➶✣➱✧➶ ➷ ➶✣➬qå❈Ó❢➳✣➵✧Ò➦➬❈➻q❒❢➶❙➵q➬✵Ò✳➼❆➮❈➱✝Ð✔➪q❒➦➻✵Òq➽✰Ð
➮✵➳qÒ✣➬❈æq➳➦➬❢ç❈èq➳➦❰❈➻✵➺❢Ò♠➺✣➵❢➬✵❒➦➬✵➶♠➳✣➵❫Ò➦ã♠➬❈ç♠Ù✧➺❈â❈❒✣❐✵➺♠ç✵➶❙❐✵➺♠Óq➳✣➵✧Ò✣➬❈➻✵❒❢➶❙➵❢➬✵Ò✴➼❆➮❈➱✓Ð✞➪q❒♠➻✵Ò❢➽✰Ð
➺✣➵q➹➦óq÷❈õq➳♠ø❲➼✹➮❈➱❫➽✣Ú
Þ❈Þ❈Þ
➯❃➮✵➳qÒ✣➬qâ✣➮✵➺❢❒➦❮q➺➦➻❢ã♠äq➹q➶✣➬q➳♠➻✧Ö❀➵✧➲♠➳➦❐❈➮✵❒➦➬✵➶✣➱✧➶ ➷ ➶✣➬qå❈Ó❢➳✣➵✧Ò➦➬❈➻q❒❢➶❙➵q➬✵Ò✳➼❆➮❈➱☞➚✖❰❈➻q➳✣➱ ➷ ✣➺ ❐✓Ðß➪q❒♠➻✵Ò❲➚ ➷ ➶❈Ò✣➬✝➯❖Ö❙➵❢➬❈Ôq❒➦➻qÚ✵➽✴➚❿➪q➳❢➶♠➹
➼❆➮❈➱✓Ð✣Ï❙â♠ã✵Ö✣Ó✰Ï✧Ð❙Ï❙â✣➮✧➺❈❒➦❮q➺➦➻♥ã➦äq➹✵➶✣➬q➳➦➻❳Ö❙➵✧➲♠➳✣❐❈➮✧❒➦➬✵➶❙➱✧➶ ➷ ➶✣➬❢❯
å Ó❢➳➦➵✧Ò✣➬❈➻q❒q➶❙➵❢➬✰Ï➦➽✳Ð
➘➦➴ Ò✣➬q❒➦➮✵➻❢➳q➬♠ó❢Ò✣➬✘÷❈õq➼❆➮❈➳❈➱✝ø❲Ðë
➪q❒➦➻✵Ò✘➯❖ì✣ÚÕí❆✃❢✃ù➪q❒➦➻✧Ò❲➯✹î♠Ú✵➽✳ÐáÛ❈Û✏➲♠➳➦➵✧Ò✣➬❈➻q❒q➶❙➵❢➬✏➲❢ì
➮✵➳qÒ✣➬✘➼❆➮❈➱✝Ðë➪q❒➦➻✵Ò✘➯✹ð♠ÚÕí❆✃❢✃ù➪q❒➦➻✧Ò❲➯❆Ñ❈Ú✵➽✳ÐáÛ❈Û✏➲♠➳➦➵✧Ò✣➬❈➻q❒q➶❙➵❢➬✏➲♠î
➮✵➳qÒ✣➬✘➼❆➮❈➱✝Ðë➪q❒➦➻✵Ò✘➯❖ì✣ÚÕí❆✃❢✃ù➪q❒➦➻✧Ò❲➯❆Ñ❈Ú✵➽✳ÐáÛ❈Û✏➲♠➳➦➵✧Ò✣➬❈➻q❒q➶❙➵❢➬✏➲♠ð
➮✵➳qÒ✣➬✘➼❆➮❈➱✝Ðë➪q❒➦➻✵Ò✘➯✹ð♠ÚÕí❆✃❢✃ù➪q❒➦➻✧Ò❲➯✹î♠Ú✵➽✳ÐáÛ❈Û✏➲♠➳➦➵✧Ò✣➬❈➻q❒q➶❙➵❢➬✏➲➦Ñ
➺✣➵q➹➦óq÷❈õq➳♠ø❲➼✹➮❈➱❫➽✣Ú
Explications conviviales pour la PPC
11
à-dire, les ensembles de contraintes considérés comme étant une seule contrainte –
pour les relaxations).
4.2.3. Exemple
L’exemple 5 montre l’utilité des ➧✖➨✠➟✖➛☞➩ ✌✞✟ . Comme on peut le constater, seules
des informations compréhensibles par l’utilisateur sont fournies. Dans cet exemple,
la représentation de Michael dans le problème de conférence est utilisée. Face à une
contradiction (le problème est sur-contraint), Michael doit interagir avec l’explication
de cette contradiction. Il veut laisser Peter ou Alan donner une présentation avant
→➝ú
lui (relaxant le bloc ➫ dans l’exemple). Malheureusement, ce n’est pas suffisant 2
et Michael accepte d’assister à la quatrième demi-journée (en relaxant le bloc û➝ü➝ý ).
Cette fois une solution est obtenue. Remarquons que seulement une seule contrainte
de cette boîte nécessite d’être relaxée.
L’exemple 5 montre une autre caractéristique de notre système. Une fois un pro→
blème résolu, le système permet de rétablir des contraintes relaxées auparavant. ✡✠➣✠↔
présente l’ensemble des ➧✂➨✠➟✞➛☞➩ ✌✖✟ relaxées pour les réexaminer. Michael veut remettre
→➝ú
le bloc ➫ . Une solution est trouvée. Remarquons que de nouvelles contraintes sont
relaxées (de la boîte û➝ü➝ý qui est toujours relaxée).
5. Application
Les explications conviviales peuvent être un outil précieux dans les situations suivantes :
– Débogage
Les explications peuvent aider à se concentrer sur les parties pertinentes de l’ensemble de contraintes lors de l’identification d’une contradiction. Les explications
conviviales sont vraiment nécessaires pour interagir avec l’utilisateur : les ensembles
de contraintes doivent être traduits selon la compréhension de l’utilisateur.
– Résolution de problèmes sur-contraints
Comme vu dans l’exemple (le problème de la conférence), les explications conviviales (comme dans le cas du débogage ci-dessus) aident l’utilisateur à compremdre
les raisons profondes de l’abscence de solution de son problème. De plus, les explications conviviales s’accordent bien avec les environnements distribués comme le cas de
notre exemple : une simple explication est présenté à différentes personnes qui ont des
différentes vues sur le problème. Les explications ne sont pas modifiées, seule la projection qui fournit des explications selon chaque utilisateur l’est. Remarquons que la
résolution de problèmes sur-contraints peut être vu comme un problème de débogage !
– Analyse dynamique du comportement d’un solveur
Comme dans le cas des explications classiques, les explications conviviales peuvent
♣ . Rappelons que les explications ne peuvent pas nous informer sur LA contrainte à relaxer,
mais se concentrent seulement sur un sous-ensemble de contraintes appropriées.
12
JFPLC’02.
Exemple 5 (Utilisation des UFboxes) :
þ☛ÿ✁✄✂✆☎✞✝✠✟☛✡✌☞✎✍✠✏✁✍✑✡✒✝✑✍✔✓✖✕
✍✠✗✓✎ÿ ✙✘✛✚✠✜✌☎✣✢✓✠ÿ ✏✥✤✴ÿ✑✦✥✠✍✌✧✩★✪✓✬✫✭✂✮★✁✘✰✯✲✱✠✱✛✳✎✜✙✴✶✵✑✂✮★✎✘✰✯✲✱✎✱✛✳✠✜✙✴✸✷✝ÿ✙★✁✘✹✯✲✱✎✱✛✳✎✜✔✴✸✷❲þ✺★✁✘✰✯✻✱✎✱✛✳✎✜✒✕
✼✎✼✎✼✪✽✁✟☛✡✌☞✁✍✾✏✁✍✑✡✒✝✾✍ þ✌✏✁✟☛✦✿✠✍✭✂❀★❂❁✁✍✌✧✎✝☛✏✥❫✤ þ✌❃✥✤✾✟☛✡
❄ ✱✎✱✠✱✎✱✁✘❅✵✎❆✎✜❈❇✾❉✥✍✞✝✠✟✄✂✝✿
þ ✠✍✠❃✎✍ þ✌✏✌✟☛✦✿✾✍✭✂
❄ ✱✎✱✠✱✎✱✎✱✎✱✁✘✬❊✾✽✠✜❋❊✄✂✝✿
þ ✎✤✎✝✎✤✑❃●✝✠✟✭✡✒✧✑❃✎✏✓ÿ✁✤✭✡✌❃✥✧
❄ ✱✎✱✠✱✎✱✎✱✎✱✎✱✠✱✁✘✬❍✾✫✥❊✑✽✠✜■❍❫þ✥✍✘ÿ✑❏✥✍✾✏✒❑✰ÿ✑▲✌❁✌✤✑❃✌✟✾✏❋✤✭✡✒✝✾✟▼✂✝þ☛ÿ✠❃✌✤✭✦✒✤✠✁✤☛❃✎◆❖✝✾✟☛✡✒✧✑❃✎✏✘ÿ✌✤✭✡✌❃
❄ ✱✎✱✠✱✎✱✎✱✎✱✎✱✠✱✁✘❅P✥◗✑✵✎✜❘P✥✟✑❃✪❃✠❙✥✟◗þ✌✏✁✍✌✧✾✍☛✡✌❃✓ÿ✠❃✥✤✾✟☛✡✒✧❱ÿ✠❃❚❃✾❉✌✍✞✴✧ ÿ✭✂✒✍✣❃✥✤✄✂✒✍
❄ ✱✎✱✠✱✎✱✎✱✎✱✁✘❯✷✌✽✠✜❈✷✿✤✎✝✭❉✝ÿ✎✍✁✞✝✠✟☛✡✿✧✑❃✎✏✓✌
ÿ ✤▼✡✌❃✥✧
❄ ✱✎✱✠✱✎✱✎✱✎✱✎✱✠✱✁✘❅✵✁✫✠❆✎✜❘✵✌✍✾❃✁✍✠✏❞ÿ✑✡✁❁❚✫✌❲ÿ✑✡✪✦✥✍✠☞✌✟✾✏✎✍✣✷✿✤✎✝✭❉✝ÿ✎✍✁
❄ ✱✎✱✠✱✎✱✎✱✎✱✎✱✠✱✁✘❅P✁✳✠❱✎✜❘P✥✟⑥þ✌✏✁✍✌✧✑✍✑✡✌❃✓ÿ✠❃✌✤✠✟☛✡■✟☛✡✞❃✾❉✌✍✪✳✎❃✾❉✣❉☛ÿ✁✾☞✒❑▼✓❁ ÿ✠◆
❄ ✱✎✱✠✱✎✱✎✱✎✱✎✱✠✱✁✘❅P✎✵✁✫✠✜❘P✥✟✑❃✣✵✌✍✠❃✎✍✠✏✇ÿ✑✡✌❁❚✫✁❲ÿ✑✡ ÿ✠❃✣❃✾❉✥✍✞✧✳ÿ✭✂✒✍✪❃✥✤✖✂✒✍
❍✎✟✎✑✗✥✤✭✡✌❲❈❃✾❉✌✍❴þ✌✏✌✟☛✦✥✠✍✭✂❳✱✎✱✎✱
❨✎❨✎❨ ✫❘✝✠✟☛✡✌❃✠✓✏ ÿ✠❁✥✤✎✝☛❃✥✤✠✟☛✡■✟✁✝✎✝▼▲✌✏✎✏✁✍✠❁✪✦✌✍✌✝✴ÿ✑▲✒✧✑✍❈✟✾☞❩★
✯ ★❈✘✬❊✾✽✠✜❘❊✄✂✓✿
✲
þ ✁✤✎✝✎✤☛❃●✝✠✟☛✡✒✧✑❃✠✏✓✌ÿ ✤✭✡✌❃✌✧
◗✔★❈✘❯✵✁✫✠❆✁✜✪✵✁✍✠❃✁✍✠✇
✏ ÿ✑✡✁❁✪✫✌❲ÿ☛✡❈✦✥✍✠☞✌✟✾✏✎✍✣✷✿✤✎✝✭❉✝ÿ✎✍✁
❬ ★❈✘❯P✁✳✠❱✁✜✪P✌⑤
✟ þ✌✏✁✍✌✧✑✍✑✡✌✓❃ ÿ✠❃✌✤✠✟☛✡■✟☛✡❈❃✑❉✥✍✪✳✎❃✾❉✪☛
❉ ÿ✁✾☞✒❑▼❁✓ÿ✠◆
✳❭★❈✘❯P✎✵✁✫✎✜✪P✌✟✾❃✪✵✌✍✠❃✎✍✠✏❞ÿ✑✡✌❁✪✫✌❲ÿ✑✡ ÿ✾❃❚❃✾❉✥✍✞✳✧ ÿ✭✂✒✍✪❃✥✤✖✂✒✍
❪✎❪❴❫ ❉✒✤✎✝✭❉❚✦✥✎✟✁✝✭❏✞❙✥✟✭▲✿✾❁❚◆✌✟✭▲●✁✤✭❏✥✍✣❃✌✟✣✏✁✍✁✴ÿ✠❵✞❛❜✓✖✯✠❑✭✳❈✚✿❑✖✡✿✟☛✡✥✍✿✕
✵✁✫✠❝✠✷❞★❂❡✌✍✭✂✆✟✑✗✥✤✭✡✌❲●✝✠✟✭✡✒✧✑❃✎✏✓✁ÿ ✤✭✡✌❃❚✷❲●
þ ☎✾✼❢✵✑✂ ❄ ✯❣☞✎✏✌✟✄✂❘✵✁✫✠❆
✵✁✫✠❝✠✷❞★❂❡✌✍✭✂✆✟✑✗✥✤✭✡✌❲●✝✠✟✭✡✒✧✑❃✎✏✓✁ÿ ✤✭✡✌❃❚✷❲●
þ ☎✾✼✣✫☛✂ ❄ ✯❣☞✎✏✌✟✄✂❘✵✁✫✠❆
✵✁✫✠❝✠✷❞★❂❡✌✍✭✂✆✟✑✗✥✤✭✡✌❲●✝✠✟✭✡✒✧✑❃✎✏✓✁ÿ ✤✭✡✌❃❚✷✝ÿ❈☎✾✼❢✵✑✂ ❄ ✯❣☞✎✏✌✟✄✂❘✵✁✫✠❆
✵✁✫✠❝✠✷❞★❂❡✌✍✭✂✆✟✑✗✥✤✭✡✌❲●✝✠✟✭✡✒✧✑❃✎✏✓✁ÿ ✤✭✡✌❃❚✷✝ÿ❈☎✾✼✣✫☛✂ ❄ ✯❣☞✎✏✌✟✄✂❘✵✁✫✠❆
◗
✎❨ ❨✎❨ ✫❘✝✠✟☛✡✌❃✠✓✏ ÿ✠❁✥✤✎✝☛❃✥✤✠✟☛✡■✟✁✝✎✝▼▲✌✏✎✏✁✍✠❁✪✦✌✍✌✝✴ÿ✑▲✒✧✑✍❈✟✾☞❩★
✯✲★❈✘✬❊✾✽✠✜❘❊✄✂✓✿
þ ✁✤✎✝✎✤☛❃●✝✠✟☛✡✒✧✑❃✠✏✓ÿ✌✤✭✡✌❃✌✧
◗✔★❈✘❯P✁✳✠❱✁✜✪P✌⑤
✟ þ✌✏✁✍✌✧✑✍✑✡✌✓❃ ÿ✠❃✌✤✠✟☛✡■✟☛✡❈❃✑❉✥✍✪✳✎❃✾❉✪❉☛ÿ✁✾☞✒❑▼✓❁ ÿ✠◆
❬ ★❈✘❯P✎✵✁✫✎✜✪P✌✟✾❃✪✵✌✍✠❃✎✍✠✏❞✑ÿ ✡✌❁✪✫✌❲ÿ✑✡ ÿ✾❃❚❃✾❉✥✍✞✧✳ÿ✭✂✒✍✪❃✥✤✖✂✒✍
❪✎❪❴❫ ❉✒✤✎✝✭❉❚✦✥✎✟✁✝✭❏✞❙✥✟✭▲✿✾❁❚◆✌✟✭▲●✁✤✭❏✥✍✣❃✌✟✣✏✁✍✁✴ÿ✠❵✞❛❜✓✖✯✠❑ ❬ ✚✿❑✖✡✿✟☛✡✥✍✿✕
✵✁✫✠❝✠✷❞★❂❡✌✍✭✂✆✟✑✗✥✤✭✡✌❲●✝✠✟✭✡✒✧✑❃✎✏✓✁ÿ ✤✭✡✌❃❈✫☛✂ ❨ ✼✎✼✪✳✪☞✠✏✌✟▼✂❘P✁✳✾❱
❨✎❨✎❨ ❘
✫ ✧✠✟✎☛▲✁❃✥✤✠✟☛✡❈☛
❉ ÿ✁✧❣✡✿✟✑❙✣✦✥✍✎✍✑✡●✟✭✦✌❃✓ÿ✌✤✭✡✌✍✠❁
❨✎❨✎❨ ✬✓ ✫☛✂✮★✛✳✔✴✸✵✑✂✮★✖✯✻✴❤✝
✷ ÿ✙★✐◗❥✴❤✷❲✺
þ ★❬ ✕
❨✎❨✎❨ ❇✾❉✥✍✪☞✌✟✠✎✎✟✑❙✿✤▼✡✌❲✪✦✿✎✟✁✝▼❏✒✧❴❉☛ÿ✠✗✁✍❴✦✥✍✎✍✑✡✞✏✎✍✁❲ÿ✠❵✁✍✾❁
✯■★❈✘❅✵✁✫✠❆❋❑❣✳❘✝✑❃✌✧✑✜✪✵✌✍✠❃✎✍✠❞
✏ ✑ÿ ✡✌❁✪✫✌❲ÿ✑✡❚✦✌✍✠☞✌✟✾✏✁✍❢✷✿✤✎✝✭❉☛ÿ✠✍✁
◗❜★❈✘❅P✁✳✠❱❋❑❣✳❘✝✑❃✌✧✑✜✪P✥⑥
✟ þ✌✏✁✍✌✧✾✍☛✡✌❃✓✠ÿ ❃✥✤✾✟☛✡■✟☛✡✞❃✾❉✥✍✣✳✎❃✾❉❚☛
❉ ÿ✎✾☞✒❑✭❁✓ÿ✾◆
❫ ❉✒✤✠✝✭❉❋✟☛✡✥✍❴❙✥✟☛▲✿✾❁❈◆✁✟☛▲●✁✤✭❏✌✍✪❃✌✟❚✧✑✍✠❃✣✦☛ÿ✌✝▼❏●❛❦✓✄✯✠❑☛◗✪✚✿❑✄✡✿✟✭✡✥✍✿✕✞✯
❊✭✡●✟✑✏✎❁✁✍✠✏❚❃✁✟✣❁✌✟✣❃✾✝
❉ ÿ✠❃❘✧✠✟▼✂✿✍✞✝✠✟☛✡✒✧☛❃✎✓✏ ÿ✌✤✭✡✁❃✥✧❴✡✥✍✎✍✠❁✪❃✌✟❴✦✥✍✪✏✎✍✭✂✆✟✾✗✁✍✾❁❭★
✵✁✫✠❝✠✷❞★❂❡✌✍✭✂✆✟✑✗✥✤✭✡✌❲●✝✠✟✭✡✒✧✑❃✎✏✓ÿ✁✤✭✡✌❃❚✵✑✂ ❨ ✼✎✼✪✳✪☞✠✏✌✟▼✂❘✵✁✳✾❱
✵✁✫✠❝✠✷❞★❂❡✌✍✭✂✆✟✑✗✥✤✭✡✌❲●✝✠✟✭✡✒✧✑❃✎✏✓ÿ✁✤✭✡✌❃❚✷❲þ ❨ ✼✎✼✪✳✪☞✠✏✌✟▼✂❘✵✁✳✾❱
❨✎❨✎❨ ❘
✫ ✧✠✟✎☛▲✁❃✥✤✠✟☛✡❈☛
❉ ÿ✁✧❣✡✿✟✑❙✣✦✥✍✎✍✑✡●✟✭✦✌❃✓ÿ✌✤✭✡✌✍✠❁
❨✎❨✎❨ ✬✓ ✫☛✂✮★✖✯✆✴✸✵✑✂✮★✐◗❥✴❤✝
✷ ÿ✙★ ❬ ✴❤✷❲✺
þ ★✛✳✒✕
◗
Explications conviviales pour la PPC
13
expliquer des situations spécifiques lors la recherche. Donc, elles peuvent être utilisées
pour analyser le comportement du solveur selon différents utilisateurs : développeur,
utilisateur final, manager...
6. Travaux liés
[GOU 00] ont présenté la notion s-box dans la programmation logique par contraintes.
s-box sont utilisés pour structurer le store des contraintes en considérant des ensembles
de contraintes comme des simples contraintes. Il faut noter que s-box présente deux
principaux inconvénients :
– la considération d’un ensemble de contraintes comme une contrainte simple est
relativement facile dans le cas des contraintes numériques : il suffit juste d’unir leur
projection. Ce n’est pas aussi facile avec d’autres types de contraintes.
– l’inconvénient principal revient au comportement des s-box. En effet, le comportement du solveur est modifié dès qu’un ensemble de contraintes est remplacé par une
simple contrainte. Ceci oblige la propagation à rester dans une s-box et lui interdit de
changer de s-box avant l’achèvement de cette dernière. Cela modifie complètement le
comportement du solveur.
Notre proposition par contre limite le regroupement de contraintes au seul niveau
représentation. Les contraintes bas niveau restent concrètement inchangées et indépendantes.
[SQA 96] ont récemment présenté des explications conviviales pour les problèmes
de puzzles logiques. L’idée est de fournir une trace lisible du mécanisme de résolution en générant des déclarations lisibles pour chaque événement du solveur. Les
explications produites sont généralement tout à fait semblables à celles calculées à
la main bien qu’un peu plus longue. Cependant, les explications sont associées à des
contraintes bas niveau et ce travail ne gère pas des ensembles de contraintes.
Notre proposition elle le fait et permet, de plus, de manipuler en même temps
plusieurs vues pour un seul problème.
7. Conclusion
Dans cet article, nous avons présenté la notion d’explication conviviale. L’idée
principale est de considérer des programmes de contraintes sous forme hiérarchique
puis ajouter des informations sur cette hiérarchie. Donc, les utilisateurs peuvent être
modélisés comme une coupe dans l’arbre représentant la hiérarchie et les explications
peuvent être projetées selon la représentation du problème.
→
Notre proposition a été implémentée dans le système ✡☞➣✠↔ et montre des propriétés
intéressantes : la possibilité de gérer plusieurs utilisateurs, adaptabilité à des systèmes
14
JFPLC’02.
distribués, possibilité de gérer en des boites simples des contraintes de haut niveau,
généralité de l’approche, ...
Nos travaux actuels se concentrent sur l’utilisation réelle de nos explications conviviales. Notre première expérience sera réalisée dans le système ➠ ✁☎✄ ➞ ✌✆❧ [ALB 01].
8. Bibliographie
[ALB 01] A LBIN -A MIOT H., C OINTE P., G UÉHÉNEUC Y.-G., J USSIEN N., « Instantiating
and Detecting Design Patterns : Putting Bits and Pieces Together », 16th IEEE conference
on Automated Software Engineering (ASE’01), San Diego, USA, novembre 2001.
[Bay 96] BAYARDO J R . R. J., M IRANKER D. P., « A complexity analysis of space-bounded
learning algorithms for the constraint satisfaction problem », AAAI’96, 1996.
[CAS 99] C ASEAU Y., J OSSET F.-X., L ABURTHE F., « CLAIRE : combining sets, search and
rules to better express algorithms », S CHREYE D. D., Ed., Proc. of the 15th International
Conference on Logic Programming, ICLP’99, MIT Press, 1999, p. 245–259.
[GOU 00] G OUALARD F., B ENHAMOU F., « Debugging constraint programs by store inspection », vol. 1870 de Lecture Note in Computer Science, chapitre Analysis and visualization
tools for constriant programming (11), Springer Verlag, 2000.
[JUN 01] J UNKER U., « QUICKXPLAIN : Conflict Detection for Arbitrary Constraint Propagation Algorithms », rapport, 2001, Ilog SA.
[JUS 00a] J USSIEN N., BARICHARD V., « The PaLM system : explanation-based constraint
programming », Proceedings of TRICS : Techniques foR Implementing Constraint programming Systems, a post-conference workshop of CP 2000, Singapore, septembre 2000,
p. 118–133.
[JUS 00b] J USSIEN N., D EBRUYNE R., B OIZUMAULT P., « Maintaining Arc-Consistency within Dynamic Backtracking », Principles and Practice of Constraint Programming (CP
2000), n ♠ 1894 Lecture Notes in Computer Science, Singapore, septembre 2000, SpringerVerlag, p. 249–261.
[JUS 00c] J USSIEN N., L HOMME O., « Local search with constraint propagation and conflictbased heuristics », Seventh National Conference on Artificial Intelligence – AAAI’2000,
Austin, TX, USA, août 2000, p. 169–174.
[JUS 01] J USSIEN N., « e-constraints : explanation-based Constraint Programming », CP01
Workshop on User-Interaction in Constraint Satisfaction, Paphos, Cyprus, 1 décembre
2001.
[LAB 00] L ABURTHE F., « CHOCO : implementing a CP kernel », CP00 Post Conference
Workshop on Techniques for Implementing Constraint programming Systems (TRICS), Singapore, septembre 2000.
[SCH 94] S CHIEX T., V ERFAILLIE G., « Nogood Recording fot Static and Dynamic
Constraint Satisfaction Problems », International Journal of Artificial Intelligence Tools,
vol. 3, n ♠ 2, 1994, p. 187–207.
[SQA 96] S QALLI M. H., F REUDER E. C., « Inference-Based Constraint Satisfaction Supports Explanation », AAAI : National Conference on Artificial Intelligence, 1996, p. 318–
325.