• Aucun résultat trouvé

4.1. Classes de génération

Les différents travaux réalisés en modélisation déclarative sont généralement classés sui- vant les moyens utilisés. Ce classement est globalement le suivant :

• Arbres d'exploration explicites tels que les arbres d'énumération et autres algorithmes de parcours d'arbres ([Col90], [Mar90], [Paj94], [Khe95], [PoL96]…) ;

• Moteurs d'inférences ([Ple91] et [MaM93]) ;

• Grammaires génératives ([Woo91], [Koc94] et [RMS96]) ;

• Systèmes de résolution de contraintes ([Lie96], [GAT96], [ZHH96], [PRJ97], [Cham97a]…) ;

• Systèmes d’arithmétique des intervalles ([SnK92], [Chau94] et [MaM96]) ; • Simulation inverse ([KaB92] et [SDS93]) ;

Remarque : Ce classement et les méthodes de génération qui le composent sont présentés plus en détail dans [Des95a].

Dans le cadre du projet CordiFormes, la classification adoptée repose non pas sur les tech- niques de génération utilisées mais sur les objectifs de la génération et des effets pour l'utili-

sateur. Dans ce contexte, seules deux classes de génération de scènes sont retenues à savoir l'énumération et le tirage aléatoire sous contraintes. Ainsi, toutes les méthodes développées

en modélisation déclarative peuvent être réparties selon ces deux grandes classes.

Définition II.2.10 : Une génération est dite par énumération si, étant donné un objet k et l’état de la base de connaissances courante, il est possible de prédire avec exactitude ce que sera l’objet k+1. Le passage d’un objet (ou d’une valeur) à un autre est totalement contrôlé.

Définition II.2.11 : Une génération est dite aléatoire si elle n’est pas par énumération, c’est-à-dire s'il n'est pas possible de prédire ce que sera l’objet k+1 connaissant l’objet k.

Remarques :

• Ces dernières définitions peuvent être assouplies en ne considérant que certains con- cepts jugés comme caractéristiques.

• Éventuellement, le domaine, s’il est continu, doit être préparé pour une énumération. Il s’agit alors de le discrétiser afin de le rendre fini. Cette opération s’appelle

l’échantillonnage du domaine.

• Dans le cas de la génération aléatoire, pour proposer toutes les solutions, la méthode de génération doit interdir les situations déjà produites.

Par ailleurs, nous avons montré que certains concepts sont composés d’autres concepts. Selon l’utilisation ou non de cette hiérarchie par l’algorithme de génération, nous pouvons mettre en évidence deux classes d’algorithmes :

• les algorithmes directement basés sur l’objet en tant que tel (génération globale, algo- rithmes généraux ou spécifiques à l’objet) ;

• les algorithmes exploitant la hiérarchie en faisant appel à une génération récursive (algorithmes que nous appellerons aussi algorithmes systématiques).

Les algorithmes de la première classe, par nature, sont dépendants du domaine d’application considéré. Par contre, les algorithmes systématiques sont indépendants. Notre attention se portera plus particulièrement sur ces derniers.

4.2. Méthodes sur les objets

Actuellement les plus répandues sont les méthodes de génération globales à l’objet. Elles sont basées sur des algorithmes considérant l’objet dans son ensemble (principalement en

fonction du modèle géométrique de représentation) et non selon sa structure logique. L’algorithme permet de produire directement les objets. Selon ce principe, il existe des mé- thodes spécifiques à un type d’objet et des méthodes plus générales.

4.2.1 Les méthodes spécifiques

Dans certains cas, il existe un algorithme spécifique et performant permettant de produire, aléatoirement ou par énumération, des objets d’un type donné. Ils peuvent produire unique- ment des objets répondant totalement ou partiellement aux descriptions qui les concernent. Le plus souvent, ces méthodes ne sont pas exploitables par les modeleurs déclaratifs, car elles sont difficilement contrôlables et, très souvent, ne génèrent qu’une seule solution.

4.2.2 Les méthodes générales

Il existe aussi des techniques de génération d’objets simples basées sur des algorithmes gé- néraux (partiellement indépendants de l’objet effectivement construit). La classe d’algorithmes de ce type la plus évidente concerne les algorithmes génétiques. Nous pouvons aussi imaginer l’utilisation d’autres techniques comme les réseaux de neurones, les techniques d’optimisation telles que le recuit simulé… Notons que ces méthodes, lorsqu’elles fournissent plusieurs solutions, se trouvent très souvent dans la classe des algorithmes de génération aléatoire. En fait, elles ne sont pas réellement exploitables dans l’optique de la modélisation déclarative. En particulier, il n’est souvent pas possible de contrôler totalement la génération pour garantir l’exploration de toutes les solutions. Elles nécessitent donc des adaptations spé- cifiques (voir [Mou96] pour l’utilisation d’algorithmes génétiques).

Les techniques présentées en modélisation déclarative (arbres de construction…) sont, la plupart du temps, assez générales. Cependant, leur mise en place et les méthodes de construc- tion qu’elles utilisent, sont spécifiques au domaine d’application considéré. Prenons l’exemple des algorithmes à base d’arbres d’énumération.

4.2.3 Les arbres d’énumération

Les arbres d’énumération sont une classe d’algorithmes assez courante en modélisation dé- clarative. Elle est présentée par [LMM89], [Elk89], [Pou94b], [Paj94], [Des95a], [Khe95] et [LuD95]. Elle est utilisée par [Mar90] et, plus particulièrement, par [Paj94] et [Pou94b]. L’objectif principal est de générer des arbres minimaux, c’est-à-dire des arbres où toutes les formes sont différentes. Cette technique se base sur un arbre d’énumération de numéros. L’arbre générera toutes les combinaisons de “chiffres” possibles selon une stratégie donnée (avec ou sans répétitions ; avec ou sans ordre des chiffres…). Une combinaison forme ce qu’on appelle un numéro. Ensuite, on fait une association entre un numéro et une forme par l’intermédiaire de tables ou d’une fonction de conversion (un décodeur) permettant de cons- truire la scène. Tout ceci constitue un codage de la construction d’une forme par un numéro à

base n (n correspondant au nombre de couples possibles). Autrement dit, un générateur de numéros produit toutes les combinaisons de chiffres possibles (dans une base quelconque). Ces numéros sont fournis à un algorithme spécifique de décodage qui produit la scène ou l’objet (Figure 82).

Générateur

de numéros Ensemble denuméros Décodeur Ensembled’objets

Figure 82. Principe de fonctionnement de la génération à base d’arbre d’énumération

Supposons que l’on possède un ensemble de n chiffres. Dans certains cas, la profondeur se-

ra limitée artificiellement à P. Au nœud p, le numéro s’écrit {C1, ..., Cp}. Nous avons alors les

résultats présentés dans le Tableau 10.

Tableau 10 : Caractéristiques des différents arbres d’énumération

Caractéristique CSR CAR ASR AAR

Ordre NON NON OUI OUI

Répétitions NON OUI NON OUI

Équilibré NON NON OUI OUI

Fini nat. OUI NON OUI NON

Prof. Max. n P n P Prof. Min. 1 P n P Nb de noeuds à p chiffres C n p n p n p = ! ! !( )! "n p n p p C = + !1 A n n p n p = ! ! ( )! np

Prof. restant au niv. p n - Cp P - p n - p P - p

Nb. de fils au niv. p n - Cp n - Cp + 1 n - p n Nb. de frères au niv. p n - Cp n - Cp ? n - Cp Nb de nœuds au total Cni i n n =

#

= 0 2 "ni i P =

#

0 Ani i n =

#

0 n n n i i P P = +

#

= ! ! 0 1 1 1 Nb total de feuilles 2n-1 "nP n! nP

Tous ces arbres ont aussi certaines particularités communes :

• Lorsqu’on descend d’un niveau, un seul chiffre est ajouté. Ceux déjà placés sont inva- riants dans tout le sous-arbre.

• Le niveau d’un nœud dans l’arbre correspond au nombre de chiffres que contient ce nœud.

• A chaque nœud peut correspondre une forme (complète ou partielle).

• Etant donné un nœud, il est souvent facile de déterminer la profondeur maximale restant à atteindre et le nombre de frères restants (Tableau 10).

• Le parcours en préordre fournit les combinaisons dans l’ordre lexicographique (à condi- tion d’ordonner les chiffres et de compléter les combinaisons par des zéros à droite). • Etant donné un numéro, il est souvent facile de déterminer le numéro suivant.

Ces arbres sont intéressants dans un univers discret et fini (parfois artificiellement en limi- tant la profondeur de l’arbre), où l’on peut trouver un codage performant en fonction des ob- jets de base, de leurs caractéristiques, des opérations élémentaires et aussi des propriétés de- mandées. Il est possible alors d’effectuer une énumération totale de l’univers des formes so- lutions. Par contre, pour certains codages mal choisis, deux problèmes peuvent arriver :

• des combinaisons de chiffres peuvent être interdites (le nombre ne permet pas de cons- truire une forme) ;

• des nombres différents peuvent générer une même forme.

Il est donc important de bien étudier le codage afin d’éviter qu’il y ait des combinaisons interdites et de ne générer que des formes différentes. Il permet de garder une trace de la con- ception de la forme. Ceci est utile pour la visualisation d’une part et pour la génération du mode opératoire pour construire réellement la forme.

Cette méthode de génération est semi-systématique puisque seul le décodage est spécifique à l’objet. Par contre, il faut trouver d’une part un mode intéressant de génération des numéros (avec ou sans répétitions, ordonné ou non…) et mettre au point d’autre part un codage per- formant garantissant si possible l’unicité des solutions. Néanmoins, l’intérêt essentiel réside dans la possibilité de moduler ce décodage en fonction des propriétés demandées pour ne gé- nérer que des solutions ou, si ce n’est pas possible, ordonner l’exploration pour proposer les solutions au début de l’exploration. Notons que les techniques pour ordonner les solutions semblent difficiles à mettre en place dans le cas général. Cependant, nous le verrons dans la suite, cette méthode n’est pas exploitable d’un point de vue général pour une plate-forme. Nous préférerons un algorithme adapté aux structures de données que nous avons choisi.