• Aucun résultat trouvé

Méthodes de résolution

Dans le document Exploration d’ensembles de modèles (Page 38-42)

2.2 Programmation par contraintes

2.2.2 Méthodes de résolution

Il existe de nombreuses méthodes de résolution pour les CSPs, COPs et HCSPs. Ces méthodes peuvent être classées en deux grandes familles. Les méthodes exactes offrant des garanties de résultats (solution, si elle existe, pour un CSP ou solution optimale, si elle existe, pour un COP ou un HCSP), mais coûteuses en temps, car nécessitant une exploration exhaus-tive de l’espace des solutions. Les méthodes approchées sacrifient la garantie de résultat au profit du temps d’exécution. Contrairement aux méthodes exactes, les méthodes approchées n’explorent qu’une partie limitée de l’espace de recherche. C’est pourquoi ces méthodes ne donnent généralement pas de garantie sur la qualité des résultats.

4. Ce problème consiste, à l’origine, à placer 8 dames d’un jeu d’échecs sur un échiquier de8×8et plus généralement à placerndames sur un échiquier den×n.

Propagation de contraintes et backtrack

La méthode du backtack est une méthode de résolution exacte. Celle-ci consiste en l’ex-ploration complète de l’espace de recherche. Pour se faire, l’algorithme du backtrack utilise un arbre de recherche.

Cette structure d’arbre permet de représenter efficacement l’ensemble de l’espace de re-cherche. La racine de cet arbre correspond à une affectation vide, aucune variable n’est af-fectée. Les feuilles quant à elles regroupent toutes les affectations complètes possibles. Les nœuds internes représentent des affectations partielles où une partie seulement des variables sont affectées à des valeurs. Les arcs eux encodent l’affectation spécifique d’une variable. Avec cette structure, un parcours de l’arbre de recherche assure une exploration complète de l’espace de recherche.

La méthode naïve du backtrack, détaillée dans l’Algorithme 1, consiste en un parcours en profondeur de cet arbre de recherche jusqu’à la découverte d’une solution valide du CSP (ou parcours complet de l’arbre pour trouver la ou les solutions optimales des COPs et HCSPs). L’algorithme affecte chacune des variables lors des différents points de choix que sont les nœuds intermédiaires. À chaque point de choix, l’algorithme vérifie que l’affectation partielle ne viole aucune contrainte, auquel cas il ne sert plus à rien de compléter l’affectation partielle, car celle-ci ne pourra jamais vérifier toutes les contraintes et il faut donc annuler la dernière affectation et tester une autre valeur possible pour cette variable.

Algorithme 1Backtrack naïf

1 : fonctionBACKTRACK(X,D,C,A) 2 : siVIOLE(A,C)alors 3 : retourne 4 : sinon 5 : siX =alors 6 : retourneA 7 : fin si 8 : pourv∈Xfaire 9 : pourx∈Dvfaire 10 : A′ AJOUTEAFFECTATION(A,v,x) 11 : res←BACKTACK(X\ {v},D,C,A′) 12 : sires̸=alors 13 : retourneres 14 : fin si 15 : fin pour 16 : fin pour 17 : retourne 18 : fin si 19 : fin fonction

2.2. Programmation par contraintes

a pas de garantie sur la taille de l’espace de recherche exploré avant de trouver une solution. C’est pourquoi il existe de nombreuses méthodes venant étendre l’algorithme du backtrack afin d’arriver plus vite à une solution. Ces méthodes agissent de plusieurs façons.

La majorité de ces techniques cherchent à minimiser le nombre d’affectations nécessaires avant de détecter que l’affectation partielle n’est pas possible. C’est l’idée dufail fast.

Une stratégie couramment utilisée consiste, à chaque sélection de variables (ligne 8), à sélectionner la variable ayant le plus petit domaine. Une autre stratégie complémentaire très utilisée est l’idée de propagation de contraintes.

L’idée est de réduire les domaines des variables au fur et à mesure de la descente dans l’arbre de recherche grâce à l’affection partielle qui est considérée. En effet, il est très probable qu’à chaque point de choix, une partie des domaines des variables non affectées ne satisfasse pas les contraintes et donc ne vaille pas la peine d’être explorée. Pour éviter l’exploration inutile de ces sous-arbres, on utilise les techniques de propagation. Ces techniques visent à retirer des domaines des variables non affectées les valeurs incompatibles avec l’affection partielle considérée. Lors de chaque choix, les conséquences de ce choix sont propagées aux variables non affectées et réduisent ainsi la taille des domaines et donc la taille du sous-arbre à explorer. La plus connue de ces méthodes est l’Arc Consistency. Il existe de nombreux dérivés de cette méthode.

En plus de ces méthodes de sélection de variables et de réduction de domaines, on peut aussi citer des méthodes visant à déterminer un ordre d’exploration du domaine de la variable considérée.

Recherches locales

Contrairement à la méthode du backtrack, les méthodes basées sur la recherche locale sont inexactes, ou incomplètes. Celles-ci permettent d’obtenir des résultats plus rapidement, mais le font en n’explorant l’espace de recherche que partiellement. C’est pourquoi ces méthodes n’offrent pas de garantie de résultats. Il est tout à fait possible que la solution à un CSP se trouve dans une partie de l’espace de recherche qui ne sera jamais exploré.

Plutôt que de construire méthodiquement toutes les solutions possibles et les vérifier, les algorithmes de recherches locales construisent une solution initiale puis explorent l’espace de recherche en voyageant de voisin en voisin. Les voisins d’une solution sont les solutions pouvant être atteintes par l’application d’une variation à la solution originale. Il existe de nom-breuses méthodes de génération de voisinage dépendant du problème. Pour un CSP on peut considérer le changement d’affection d’une variable comme une variation, ainsi le voisinage d’une solution correspond ici à toutes les solutions n’ayant qu’une variable modifiée. Dans ce voisinage il faut sélectionner un voisin en particulier qui sera la nouvelle solution considérée. Pour cela il existe aussi de nombreuses méthodes telles que le premier améliorant qui sélec-tionnera le premier voisin améliorant. Dans le cas d’un CSP, on considère qu’une solution est améliorante si elle viole moins de contraintes.

Algorithme 2Recherche Locale

1 : fonctionLOCALSEARCH(X,D,C,pasM ax) 2 : a←GÉNÉRATIONALÉATOIRE(X,D) 3 : pour pas←1àpasM axfaire 4 : siVIOLE(A,C)alors 5 : a←CHANGE(a,D,C) 6 : sinon 7 : retournea 8 : fin si 9 : fin pour

10 : retourne“pas de solution” 11 : fin fonction

L’Algorithme 2 donne une implémentation naïve d’une recherche locale. Premièrement, une solution aléatoire est construite, d’autres méthodes peuvent être utilisées pour générer de meilleures solutions initiales. Puis, l’algorithme va chercher à l’améliorer jusqu’à ce qu’une solution valide soit trouvée ou qu’un critère d’arrêt soit rencontré. S’il trouve une solution valide alors il la retourne, sinon il indique ne pas avoir trouvé de solutions. Il existe de nombreuses variantes de l’algorithme naïf permettant d’obtenir de meilleurs résultats plus rapidement, on peut par exemple citer la méthode du recuit simulé [KGV83] (Simulated Annealing).

Cependant, comme l’espace de recherche n’est pas totalement exploré, il n’est pas possible de conclure qu’un CSP est insatisfiable si aucune solution n’est trouvée. Similairement, pour les COP, la solution retournée n’est pas forcément la solution optimale.

2.3 Méthodes de résolution de problèmes appliquées à l’Ingénierie Dirigée par les Modèles

Les challenges liés à l’IDM sont nombreux et ne se limitent pas à la transformation de mo-dèles. Dans la sous-section 2.3.1 nous aborderons les problèmes de validation de modèles et notamment les approches visant à générer des modèles respectant des conditions de validité (well formeness). Puis, dans la sous-section 2.3.2 nous traiterons des méthodes de transfor-mation de modèles utilisant des techniques de résolution de contraintes ou de programtransfor-mation logique pour calculer la transformation. Enfin, dans la sous-section 2.3.3 nous présenterons quelques applications de méthodes de résolution approchées à l’IDM.

2.3.1 Génération, vérification et réparation de modèles

Les métamodèles spécifient la topologie du graphe des graphes d’objets qui constituent les modèles. Cependant, ces métamodèles seuls ne sont pas toujours suffisants pour totalement

Dans le document Exploration d’ensembles de modèles (Page 38-42)