• Aucun résultat trouvé

Configuration optimale des paramètres de classe 2

6.7 Une contribution outillée : Pacogen

7.1.3 Configuration optimale des paramètres de classe 2

Pacogen propose plusieurs paramètres internes pour optimiser le processus de ré- solution des contraintes. Ces paramètres sont les suivants : profondeur_père, opéra- teur_commun et profondeur_features qui permettent de réaliser un tri des paires juste avant la début de la résolution, f irst_f ail et lef t_most les deux stratégies de résolu- tion et les deux fonctions de coûts :

f1 = Maxk∈1..4n2Rk

f2=Pk∈1..4n2Rk.

Ces paramètres sont listés table 7.1. Avec ces paramètres, il est possible de paramétrer Pacogen de 18 façons différentes. Dans cette section, nous souhaitons déterminer la configuration de Pacogen donnant, en moyenne, le plus petit nombre de configurations à tester. Nous ne testons pas Pacogen dans toutes ses combinaisons de paramètres possibles. Nous appliquons le processus suivant : nous prenons un paramètre et nous le faisons varier tout en fixant les autres paramètres. Cette expérience permet d’obtenir la valeur optimale (celle qui donne le plus petit nombre de configurations) de ce paramètre. Une fois ce paramètre déterminé, nous répétons le même processus pour les autres paramètres, en utilisant la valeur optimale du paramètre précédent. Nous déterminons d’abord quelle stratégie d’énumération retourne le meilleur résultat, puis quel tri des paires et finalement les deux fonctions de coûts. Pour chaque paramètre évalué, les résolutions sont réalisées sur 224 modèles de features issus de SPLOT [MBC09].

Les expériences ont été réalisées sur machine linux 64-bit avec deux CPU Intel Xeon E5520 et 16 GB de mémoire vive. Dans cette section est présenté une synthèse des expériences réalisées. L’ensemble des résultats est disponible en ligne1.

7.1.3.1 Identification de la stratégie d’énumération optimale

La comparaison du nombre de configurations obtenues avec les deux techniques d’énumération a été réalisée sur 224 modèles. La fonction de tri des paires choisie est celle de profondeur_père et la résolution se fait sans minimisation. Seule la technique d’énumération varie. Le tableau 7.2 présente le nombre moyen de configurations obtenu pour chaque technique d’énumération.

Les résultats montrent que first-fail réalise de meilleures performances que left-most. La moyenne de la taille des matrices solutions first-fail est de 12.40 contre 16.13 pour left-most. Pour 83% des modèles first-fail donne des solutions jusqu’à 73% plus petites.

Modèle first-fail left-most Aircraft PL 9 9 Arcade game 13 35 Car PL 6 7 Coche Ecologico 90 93 Connector PL 14 14 Doc generation 12 18 Fame DBMS 10 10 Inventory 12 14 Model Trans. 23 49 Movie App PL 6 6 Search Engine 11 13 Sienna 20 22 Smart Home 11 18 Stack PL 9 14 Web Portal 15 20

Table 7.3 – Évaluation des techniques d’énumération. Paramètres : nombre de modèles = 15 ; tri = profondeur_père ; sans minimisation ; taille de matrice = 200.

Pour 17% des modèles, les deux approches fournissent les mêmes résultats en nombre de configurations. Un extrait des résultats est présenté table 7.3. Ce tableau montre que les performances, en terme de nombre de configurations obtenues sont meilleures lorsque la technique d’énumération utilisée est first-fail. Cette différence de performance s’explique par la nature de first-fail qui est une technique de sélection dynamique. Avant de placer une paire dans la matrice, first-fail inspecte tous les domaines des paires non placées et sélectionne celle qui a le plus petit domaine, et la place dans la matrice.

7.1.3.2 Identification de la fonction tri des paires optimale

L’évaluation des trois fonctions de tri des paires a été réalisée sur les 224 modèles issus de SPLOT. Nous souhaitons déterminer lequel de ces tris fournit le plus petit nombre de configurations. Pour chaque modèle, la technique d’énumération utilisée est first-fail et les résolutions sont faites sans processus minimisation, seulement l’algo- rithme de tri des paires a été changé. La taille moyenne des configurations obtenue pour chaque tri est présentée dans le tableau 7.4. Les résultats montrent que l’application d’un tri des paires permet une amélioration du nombre de configurations trouvé par rapport à une absence de tri. La comparaison des trois fonctions de tri montre que le tri le plus performant en terme de nombre de configurations est profondeur_père, suivi de opérateur_commun puis profondeur_features.

Tri opérateur profondeur profondeur Aucun tri

commun features père

Nombre moyen de 12.57 12.79 12.43 13.42

configurations trouvé

Table 7.4 – Évaluation du tri des paires. Paramètres : nombre de modèles : 224 ; énumération : first-fail ; sans minimisation ; taille de matrice : 200.

Fonction de minimisation Fonction 1 Fonction 2

Nombre moyen de conf. 11.86 12.40

Table 7.5 – Évaluation des deux fonctions de minimisation. Paramètres : nombre de modèles : 224 ; tri : profondeur père ; Énumération : first-fail ; taille de matrice : 200.

7.1.3.3 Identification de la fonction de coût optimale

Dans cette section sont évaluées les deux fonctions de coûts. Ces fonctions sont éva- luées sur 224 modèles, avec le tri profondeur_père et la technique d’énumération first- fail. La taille moyenne des configurations pour les deux fonctions de coût est présentée dans le tableau 7.5. Ce tableau montre que la moyenne des tailles des configurations est plus petite pour la fonction f 1. L’analyse des résultats expérimentaux montre que sur 100 % des modèles, la fonction f 1 donne un nombre de configurations inférieur ou égal à la fonction f 2. Sur 40 % des modèles, la fonction f 1 fournit un nombre de configura- tions strictement inférieur à la fonction f 2. Sur certains modèles nous constatons que la fonction f 1 permet d’obtenir un nombre de configurations jusqu’à 46% plus petit que le nombre de configurations retourné par la fonction de coût f 2.

Pour illustrer comment les deux fonctions de minimisation diffèrent, nous avons réa- lisé une contrainte utilisateur nous permettant de surveiller le processus minimisation. Dès qu’une paire est placée dans la matrice, cette contrainte utilisateur se réveille et indique le nombre de paires restantes à arranger. La figure 7.3 présente les résultats des observations réalisées sur les deux fonctions de minimisation f1 et f2 sur le modèle de features Application F M de SPLOT. Les nombres de la forme #V al représentent la taille de la configuration trouvée. L’axe des abscisses représente le temps en seconde, l’axe des ordonnées le nombre de paires restantes à mettre dans la matrice. Pour ce modèle de features il y a l’origine 1131 paires à arranger.

Quand le nombre de paires restantes atteint 0, une solution a été trouvée. Dans la figure 7.3 Pacogen trouve neuf solutions grâce à la fonction de coût f1, la solution la plus petite est de huit configurations. La fonction de coût f2, Pacogen trouve deux solutions, dont la plus petite est de taille 16. L’allure de la courbe illustre le phénomène de backtracking présenté dans la section 5.3.2 utilisé durant la résolution. Le backtracking permet au solveur à contraintes de revenir dans un état antérieur du processus de résolution.

0 200 400 600 800 1000 Temps [s] Nombre de paires #15 #16 #14 #13 #12 #11 #10 #9 #8 0 10 17 26 34 43 52 61 69 78 0 200 400 600 800 1000 Temps [s] Nombre de paires #17 #16 15 54 0 100

Figure 7.3 – Comparaison des deux processus de minimisation pour le modèle de features Applications avec (a) la fonction de coût f 1 et (b) la fonction de coût f 2.

Cette expérience montre que la fonction de coût f 1 donne de meilleurs résultats : elle fournit une solution plus petite et teste plus de configurations (neuf configurations sont testées avec les fonction f 1 contre deux seulement avec f 2).