• Aucun résultat trouvé

décrit le système de contraintes C où toutes les contraintes sont en conjonction.

Puisque Ibex ne prend pas en compte les clauses disjonctives, nous avons écrit les contraintes sous forme normale disjonctive (FND) puis nous avons créé un chier par clause conjonctive.

Les premiers résultats que nous avons obtenus ont été infructueux en raison de l'explosion combinatoire des disjonctions présentes dans les contraintes. Par exemple, en reprenant le graphe d'inuence comprenant 2 entités v1 et v2 présenté en gure 4.7 page 92 et la trace biologique

    5.0 > v2+     ;     7.0 > v1+     ;     8.0 > v2−     ;     4.0 > v1−     ( D4 H4 )

avec D4 ≡ (ηv1 = 0) ∧ (ηv2 = 0), H4 ≡ T rue, le calcul de la plus faible précondition mène à 8 disjonctions, ce qui se traduit par la création de 256 chiers. Ces disjonctions proviennent de la sous-propriété F(∆t) lorsqu'une entité n'est jamais contrainte que ce soit par les symboles d'assertion ou par les autres chemins élémentaires de la trace biologique. Pour cet exemple, la quantité de chiers à analyser par le solveur reste abordable. Toutefois, pour le graphe d'inuence du cycle circadien comprenant 4 entités et dont une trace biologique est constituée de 8 chemins élémentaires (voir section 6.5.1 page 123), le calcul de plus faible précondition contient 42 disjonctions, ce qui mènerait à la construction d'environ 4400 milliards chiers (242) ! Ces premiers essais montrent que la transformation des contraintes obtenues par le calcul de plus faible précondition en FND mène à trop de chiers pour que le solveur Ibex puisse être ecace. Nous nous sommes tournés vers un nouveau solveur continu plus adapté aux CSPs construits par le calcul de plus faible précondition de la logique de Hoare hybride : le solveur AbSolute.

5.3 Les avancées grâce au solveur AbSolute

AbSolute est un solveur de contraintes linéaires et non linéaires sur les réels qui inclut les clauses disjonctives [103]. Ce solveur s'appuie sur la notion de domaines abstraits qui sur-approxime l'ensemble des solutions satisfaisant les contraintes. Le solveur AbSolute propage également les domaines de dénition des variables sur les contraintes et réduit la taille de ces intervalles par contraction. AbSolute propose de fournir en entrée une précision (la taille minimale des intervalles des variables) ainsi que le nombre de solutions à identier.

Chapitre 5 : Résolution des contraintes grâce à un solveur

5.3.1 Réécriture symbolique

Avant la propagation des domaines de dénition, une étape de préprocessing est nécessaire pour simplier les contraintes d'égalité. La taille du problème peut être réduite en éliminant des variables par réécriture symbolique.

La première étape de ce préprocessing consiste à identier l'ensemble des constantes du CSP, c'est-à-dire l'ensemble des variables v pour lesquelles il existe une contrainte de la forme v = n avec n ∈ R, et de les conserver dans une liste. On remplace dans tout le CSP les constantes par leurs valeurs et on réitère le processus jusqu'à atteindre un point xe.

La seconde étape du préprocessing consiste à identier l'ensemble des contraintes d'égalité entre deux variables (de la forme π4

v1 = 1 − πv310) et de les conserver dans une liste de vues de variables. Une variable est choisie au hasard dans une des vues et toutes ses occurrences dans le CSP sont remplacées par sa réécriture issue de cette contrainte et des contraintes sur les bornes sont ajoutées (dans l'exemple précédent, on remplace π4

v1 par 1 − π30

v1). Le processus est répété jusqu'à atteindre un point xe.

Illustrons ce préprocessing sur le CSP (V, D, C) suivant :  V = {v1, v2, v3},

 D = {Dv1 = [−5, 5], Dv2 = [−5, 5], Dv3 = [−5, 5]},

 C = {c1 : v1= 2, c2: v1 = v2+ v3, c3 : v3 = 3 × (v2)2},  vues = {}.

D'après la contrainte c1, v1 est une constante. La première étape remplace v1 par la valeur 2 dans c2 qui devient une vue de variable : v2est alors remplacée par 2−v3 dans c3et on contraint 2 − v3 par les bornes de l'intervalle de v2. Ainsi on obtient un nouveau CSP :

 V0 = {v3},

 D0 = {Dv3 = [−5, 5]},

 C0 = {c01 : v3 = 3 × (2 − v3)2, c02 : 2 − v3> −5, c03: 2 − v3 6 5},  vues = {v2 = 2 − v3}.

Le CSP a été réduit de trois variables à une seule, une constante v1= 2 et une vue de variable v2 = 2 − v3.

5.3.2 Domaines de dénition invariants et changeants

Le solveur AbSolute a été modié pour s'adapter aux CSPs issus de la logique de Hoare en temps continu. Chaque solution est représentée par deux ensembles de domaines de dénition :  le premier ensemble contient les domaines des variables sûres, c'est-à-dire que, quelle que soit les valeurs prises de ces variables dans leurs domaines de dénition, elles satisfont toutes les contraintes du CSP. Par abus de langage, dû au choix d'implémentation, on

Section 5.3, Les avancées grâce au solveur AbSolute parle de liste d'invariantsLI.

 le second ensemble contient les domaines de dénition des variables dont au moins une valeur peut satisfaire les contraintes du CSP. On parle de liste de changeantsLC. Intuitivement, l'ensemble des domaines de dénition d'un CSP (V, D, C) correspond à l'union de la liste d'invariants et de la liste de changeants (D = LI ∪ LC). Par abus de langage, nous appelons variable invariante (resp. variable changeante) les variables dont le domaine de dénition est dans LI (resp. LC).

Lorsqu'une solution est sûre, sa liste de changeants est vide. A l'inverse, une solution non sûre présente au moins un domaine de variable dans la liste de changeants.

Lorsqu'une solution du CSP est identiée, une des deux variables de chaque vue notée x est remplacée par son expression dépendant de l'autre variable notée y. Intuitivement, si y est une variable invariante (resp. variable changeante), x est aussi une variable invariante (resp. variable changeante).

Exemples de LI et LC sur un CSP: Soit (V, D, C) un CSP tel que :

 V = {v1, v2, v3, v4}

 D = LI ∪ LC

où LI = {} et LC = {D1= [−5, 5], D2= [−5, 5], D3= [−5, 5], D4= [−5, 5]}

 C = {c1 : v1= 2, c2 : v1= v2+ v3, c3: v3= 3 × (v2)2, c4: v4 < −1}

 vues = {}

Initialement, tous les domaines de dénition des variables appartiennent à LC, donc LI = ∅. La réécriture symbolique de ces contraintes est identique à celle présentée en sous-section 5.3.1

page ci-contre. La contrainte v1 = v2+ v3 devient v2 = 2 − v3 qui est une vue de variable. Les

contraintes du nouveau CSP deviennent alors C0 = {c01 : v3 = 3 × (2 − v3)2, c02 : 2 − v3 >

−5, c03 : 2 − v3 6 5}. Notons que la contrainte c4 : v4 < −1 n'est plus présente car c'est la

seule contrainte sur v4, menant à dénir v4 comme variable invariante sur le domaine [−5, −1[.

Puisque les variables v1 et v4 ne sont plus dénies dans ces contraintes, leurs domaines de

dé-nition sont retrouvés dans la liste d'invariants et sont réduits selon les contraintes des variables

(c1 et c4).

La variable v2 participe à la vue : v2= 2 − v3, v2 est remplacée dans la contrainte v3= 3 × (v2)2

par (2 − v3). Puisque v3 est une variable changeante (aucune information sur v3 au départ),

le domaine de dénition de la variable v2 est aussi dans LC. Enn, l'expression 2 − v3 est

contrainte par les bornes de l'intervalle de v2. Le CSP obtenu nal est donc :

 V0 = {v1, v2, v3, v4}

 D0 = LI ∪ LC

Chapitre 5 : Résolution des contraintes grâce à un solveur

 C0 = {c1 : v3 = 3 × (2 − v3)2, c2 : 2 − v3 > −5, c3 : 2 − v3 6 5}

 vues = {v2 = 2 − v3}

5.3.3 Limites du solveur

Comme tout solveur de contraintes, AbSolute comporte des limitations qui peuvent ralentir voire empêcher de résoudre le CSP initial. Dans le cas des CSPs issus du calcul de plus faible précondition de la logique de Hoare hybride, certaines de ces limitations peuvent être énumérées :  Lorsque le solveur de contraintes permet de trouver facilement des solutions du problème posé, le temps de calcul peut être ralenti en voulant récupérer un trop grand nombre de solutions.

 L'approximation des réels en ottants crée de nombreux problèmes dans la résolution des contraintes. Des domaines de dénition dans la liste de changeants pourraient donner des solutions qui ne satisfont pas les contraintes (exemple de variable v dont la valeur est xée dans son domaine de dénition à 2.500001 alors que cette variable doit satisfaire la contrainte v = 5.0/2.0). La réécriture symbolique a permis de limiter ce problème car elle peut simplier les contraintes en factorisant les variables identiques.

 Lorsqu'on améliore la précision sur les intervalles des variables du CSP, le temps de calcul augmente. En eet, tant qu'une solution n'est pas trouvée, l'algorithme coupe les intervalles jusqu'à obtenir des tailles d'intervalles inférieures ou égales à la précision.  Le nombre de disjonctions présentes dans le CSP augmente le temps de calcul de manière

au moins linéaire, voir gure 5.4 page suivante.