Chapitre 5

Représentation et gestion des contraintes temporelles dans Madeus

[Table des matières]

1 Introduction

Ce chapitre rend compte du module de Madeus qui permet le traitement temporel des documents multimédia. Ce traitement consiste à prendre en charge les différentes opérations d'édition permettant de créer et de mettre à jour un document. Pour chaque opération d'édition, le gestionnaire temporel permet d'analyser l'état du scénario temporel en cours de composition. Cette analyse porte sur la vérification de la cohérence temporelle d'un point de vue qualitatif, quantitatif, causal et indéterministe. Une fois cette opération effectuée, l'auteur du document peut à tout moment lancer sa présentation. Cette opération nécessite le formatage du document, ce qui permet de déterminer une valeur de durée pour chaque élément du document.

Le travail présenté ici se veut avant tout une contribution aux systèmes d'édition de documents multimédia. Nous avons souhaité exposer d'abord dans le Chapitre III le raisonnement temporel dans le cadre plus général des systèmes de contraintes. En ce qui concerne l'application Madeus, nous avons accordé une attention particulière à deux aspects, l'incrémentalité et une certaine approche du temps. Comme on se place dans un environnement d'édition interactif, les différents traitements des contraintes temporelles doivent être faits par une manipulation incrémentale. D'autre part, il est nécessaire de prendre en compte l'aspect causal et indéterministe du temps inhérents à une présentation multimédia. Les propositions faites dans ce chapitre constituent une première solution dont le but est de permettre la construction d'une application d'édition et de présentation opérationnelle, Madeus. Elles ne prétendent pas résoudre toutes les difficultés théoriques posées, qui dépassent largement le cadre de cette thèse.

Dans la première section, nous présentons une vue d'ensemble du module de gestion de contraintes temporelles, appelé gestionnaire temporel. La section 2 est consacrée à la description des éléments de base, des relations temporelles supportées et à leur représentation interne sous forme d'un graphe d'instants qui constitue aussi notre réseau de contraintes, nous parlerons de graphe de contraintes. Dans la dernière section, les algorithmes de gestion des relations sont développés. Ces algorithmes forment le coeur de la phase d'édition de Madeus. Leur rôle est de produire une forme exécutable du document. À partir de cette forme, le module de présentation peut alors ordonnancer la présentation. Ceci fait l'objet du chapitre VI.

[Table des matières]

1.1 Objectifs

Dans Madeus, toute la conception du système d'édition repose sur la notion de temps élastique. L'idée fondamentale consiste à offrir à l'auteur la possibilité de définir et de manipuler le document de façon à la fois explicite et flexible. Pour atteindre cet objectif, il est nécessaire que le système d'édition puisse adapter automatiquement le scénario pour traduire tout au long d'une session les mises à jour de l'auteur et lui signaler, le cas échéant, la présence d'incohérences. Pour faciliter la tâche de l'auteur, il faut lui signaler les incohérences au moment même où il effectue l'opération qui en est la cause. Il faut donc faire des vérifications incrémentales.

Au delà de la difficulté théorique inhérente aux problèmes de synchronisation temporelle, une mise en oeuvre efficace d'une application d'édition multimédia doit offrir une réponse adaptée aux problèmes qui viennent du processus d'édition/présentation :

Le traitement de la synchronisation est donc intimement lié à la représentation interne d'un document. En effet, les opérations d'édition font intervenir à la fois la modification de paramètres numériques représentant les durées des éléments d'un document (l'analyse et la synthèse) mais aussi des opérations de mise à jour de ces structures de données, c'est-à-dire des transformations de graphes.

[Table des matières]

1.2 Vue d'ensemble du gestionnaire temporel de Madeus

Le gestionnaire temporel de Madeus occupe une place particulière qui est au coeur de l'architecture générale de l'application. Ce module interagit avec le système d'édition de deux façons : tout au long d'une session interactive d'édition et pendant le chargement initial d'un document. Dans les deux cas, cette interaction se fait à travers des mises à jour de l'arbre abstrait par l'insertion ou la suppression d'éléments multimédia, de relations temporelles ou par la spécification des valeurs de leurs attributs temporels. C'est à travers ces mises à jour que tous les traitements réalisés par le gestionnaire temporel sont déclenchés.

Avant d'aborder en détail les traitements réalisés par le gestionnaire temporel, nous présentons dans cette section une vue d'ensemble de son architecture logicielle.

Image temp-kern.gif
Fig 0. Organisation du système de gestion de la synchronisation de Madeus

Le gestionnaire temporel de Madeus est organisé sous forme de quatre modules dont chacun assure une fonction particulière du système d'édition et de présentation :

  1. Le module de gestion des relations d'intervalles : Ce module met en correspondance, à travers l'arbre abstrait, les opérations d'édition de l'auteur et le traitement effectué par le gestionnaire temporel.
  2. Le module de traduction des relations : il permet de maintenir en correspondance les relations temporelles à base d'intervalles et les relations à base d'instants.
  3. Le module de maintien de la cohérence : il assure la vérification de la cohérence de chaque contrainte temporelle résultant de l'insertion et de la suppression d'une nouvelle relation d'instant.
  4. Le module de formatage : il attribue à chaque élément une valeur de durée pour la présentation. Une partie de cette opération est effectuée dynamiquement pendant la présentation.
La Fig 0 montre le cheminement des traitements qui, partant de l'organisation logique hiérarchique d'un document (l'arbre abstrait) et d'une suite de relations temporelles, aboutissent au niveau du formateur à une forme du document exploitable pour la présentation.

[Table des matières]

2 Représentation des contraintes dans Madeus

Au sein du gestionnaire temporel, la structure temporelle d'un document est maintenue à deux niveaux : L'approche adoptée dans Madeus repose donc principalement sur une mise en correspondance entre une représentation de haut niveau et une gestion interne de plus bas niveau fondée sur les instants. L'objectif est de ramener la représentation temporelle à un STP qui permet des traitements efficaces de la synchronisation (voir 0.0.0). Signalons néanmoins qu'au fur et à mesure de la prise en compte des relations causales et de l'indéterminisme, nous nous éloignerons du cadre des STP classiques [VID 95b]. Nous reviendrons sur ces aspects dans la section 3.2.4.

[Table des matières]

2.1 Représentation de l'information de base

Dans la classification des éléments multimédia de base introduite dans la section III.3.1, nous avons fait la distinction entre les éléments multimédia de base de type discret, continu et indéterministe. Dans notre modèle de contraintes, tous ces types d'éléments ainsi que les délais peuvent être représentés par une abstraction à base d'intervalles.

Chaque intervalle est décrit par une borne inférieure l (lower bound) et une borne supérieure u (upper bound) et est noté [l, u] (où l < u, l et u sont des valeurs positives et u pouvant valoir l'infini).

Les intervalles considérés dans Madeus peuvent être de deux types contrôlables ou incontrôlables :


Définition 1 : Un intervalle contrôlable est un intervalle ayant une contrainte numérique sur la durée delta = [l,u]c , et cette contrainte peut être réduite librement par le système d'édition entre l et u.


Ce type d'intervalle permet de modéliser le comportement des éléments de type continu et discret dont la durée de présentation peut être choisie dans un certain intervalle. Cette durée est bornée pour les éléments continus par des limites liées à l'intelligibilité de leur contenu, mais pour les éléments discrets comme le texte et les graphiques, elle peut être infinie. Ce type d'intervalle présente un comportement temporel élastique.


Définition 2 : Un intervalle incontrôlable est un intervalle ayant une contrainte numérique sur la durée omega = [l,u]i , et cette contrainte n'est connue qu'à l'exécution.


Ce type d'intervalle permet de modéliser le comportement indéterministe de certains éléments multimédia dont la durée de présentation ne peut être connue pendant la phase d'édition. Par exemple, pour les boutons d'interaction , la durée qui leur est associé correspondant à la période de temps ou ils sont activables, mais la valeur effective de ces durées ne dépend que de l'instant même de leur activation.

D'après ces deux types d'intervalles, nous pouvons distinguer deux propriétés qui caractérisent le scénario temporel d'un document multimédia : la flexibilité et la contrôlabilité.

La flexibilité mesure l'aptitude d'un scénario temporel à pouvoir être adapté aux contraintes numériques induites par les spécifications de l'auteur tout en garantissant sa cohérence globale. La flexibilité d'un scénario dépend de l'élasticité des éléments multimédia (définie par la différence u-l des intervalles contrôlables) présents dans le document ainsi que de leur emplacement dans le graphe de contraintes.

Cette flexibilité du document peut être mise à profit pour compenser le comportement indéterministe qu'il contient (cf. 3.2.4). Cela introduit la notion de contrôlabilité qui mesure l'aptitude d'un scénario à pouvoir être adapté dynamiquement, à l'exécution, au comportement indéterministe des éléments multimédia qu'il contient. Il s'agit donc d'une généralisation de la notion de cohérence pour les scénarios indéterministes [VID 97].

[Table des matières]

2.2 Graphe de contraintes temporelles de Madeus

Arbre abstrait

Dans Madeus, l'arbre abstrait est défini par un ensemble d'éléments multimédia de base ou composés où :

Cette description des relations temporelles peut être de deux types : [Here is a formula]

Graphe de contraintes

À partir de l'arbre abstrait (voir exemple dans la Fig 1 ) et les relations à base d'intervalles, nous définissons, pour chaque élément composé d'un document, un graphe de contraintes G = (I, A, E) à base d'instants, de la façon suivante :

Notons que tous les intervalles sont représentés moyennant des bornes (min, max) de durées.
Image RepInterne.gif
Fig 1. Arbre abstrait et graphe de contraintes dans Madeus

Deux instants abstraits de début et de fin sont attachés aux éléments composés du document, afin de délimiter leur contenu dans le temps. Ceci permet de définir pour chaque élément composé c un sous-graphe de contraintes Gc = (Ic, Ac, Ec) qui est construit de la même façon que celui du document lui-même. Ainsi, nous pouvons ramener le traitement temporel pour tout un document à celui d'un seul niveau de la hiérarchie logique. Le graphe obtenu est orienté (voir Fig 1 ) et acyclique (Directed Acyclic Graph : DAG) (voir la condition de cohérence qualitative présentée dans la section 3.2.1). À chaque niveau de la hiérarchie logique, le graphe de contraintes correspondant possède un seul sommet source (l'instant début de l'élément englobant) et un seul sommet puit (l'instant de fin de l'élément englobant).

Chaînes temporelles

Le graphe G étant à base d'instants, il nous permet d'en avoir une vue supplémentaire sous forme d'un ensemble de chaînes temporelles. Ces chaînes sont définies de la façon suivante :

Définition : Une chaîne temporelle Ch={a1,.. , an} est une séquence d'arcs contigus du graphe G tels que chaque arc aj, 2 < j < n-1, n'est relié qu'à un seul arc prédécesseur et à un seul arc successeur. De plus, le sommet a+j-1 est confondu avec le sommet a-j, chaque arc étant étiqueté par un intervalle contrôlable ou incontrôlable.

À toute chaîne Ch = {a1,.. , an} , telle que aj est étiqueté par [lj, uj] dans le graphe, nous pouvons associer comme étiquette l'intervalle suivant :

[ [Here is a formula]j , [Here is a formula]j ]

On peut ainsi définir un graphe de chaînes noté GCh, obtenu à partir du graphe G en remplaçant la suite des arcs composant une chaîne Ch par l'arc Ch dans GCh (Fig 2 ).

Image ChainGraph.gif
Fig 2. Graphe d'instants et graphe de chaînes dans Madeus

L'intérêt de cette structuration en chaînes dans Madeus est principalement lié à deux considérations. Elle permet d'améliorer les performances des opérations de mise à jour du document, car la plupart des traitements portent sur des chaînes et non pas directement sur des intervalles, en particulier, en ce qui concerne la vérification de la cohérence. Par ailleurs, les chaînes peuvent être mises à profit pour gérer l'indéterminisme pendant l'édition et pendant la présentation puisqu'elles constituent les branches parallèles du scénario.

[Table des matières]

2.2.1 Relations temporelles qualitatives et quantitatives

Comme nous l'avons évoqué dans le chapitre précédent, les relations retenues dans Madeus couvrent à la fois l'aspect qualitatif, quantitatif et causal des scénarios temporels. Pour être traitées, les relations temporelles considérées sont d'abord traduites sous forme de relations à base d'instants. Nous avons enrichi les relations temporelles de Allen [ALL 83] de la notion de délai, de manière à pouvoir transformer chaque relation d'intervalles dans le graphe G. Il en découle deux types de relations temporelles de base : Par exemple, pour la relation A before(t) B, le début de l'intervalle B a lieu à t unités de temps après la fin de l'intervalle A. Pour la relation, A overlaps B, si l'auteur ne précise pas le délai temporel t associé à cette relation, le délai est introduit par défaut avec des bornes [1, dur(A)] (la valeur 0 est exclue pour distinguer la relation overlaps de la relation starts). Afin de simplifier l'unité de mesure, nous considérerons dans la suite que les durées des intervalles d'un document sont exprimées moyennant la même unité de mesure (valeur discrète entière).
Image allen_relations.gif
Fig 3. Les relations temporelles de base

La sémantique de ces relations est définie par un ensemble de contraintes entre les instants de début et de fin des intervalles. Ces contraintes font intervenir la durée et le type (contrôlable ou non) des intervalles associés aux éléments multimédia du document. La Fig 3 illustre la correspondance entre les relations d'intervalles d'Allen, dotée éventuellement d'un paramètre quantitatif de durée, et leur représentation sous forme d'un graphe à base d'instants, avec les contraintes associées. Les lignes verticales de la Fig 3 représentent des contraintes de simultanéité entres les différents instants qui interviennent dans les relations.

[Table des matières]

2.2.2 Relations temporelles causales

Dans cette section, nous nous intéressons à la représentation des relations permettant d'exprimer des effets de causalité entre les différents instants du document. La Fig 4 illustre les opérateurs supportés dans Madeus. Les flèches verticales de la figure signifient que l'occurrence d'un instant source provoque l'occurrence de l'instant cible.
Image CausalOperators.gif
Fig 4. Les relations temporelles causales

Les relations causales dans Madeus ont la sémantique suivante :

En fonction de leur durée, chacune des relations Parmaster, Parmin et Parmax peut avoir deux représentations graphiques, et donc deux transformations dans le graphe de contraintes (voir les colonnes b et c de la Fig 4 ). Pour pouvoir les départager, il est nécessaire de définir une relation d'ordre entre les intervalles qui interviennent dans ces relations. Par exemple, pour deux intervalles A et B tels que A=[5,7] et B=[15,20], compte tenu que les durées possibles de A sont nécessairement plus petites que celles de B, il est facile de vérifier que ce cas correspond à l'illustration donnée dans la colonne b du tableau. De façon plus générale, l'ordre partiel << entre deux intervalles est défini de la façon suivante :

Pour A = [lA, uA], B = [lB, uB], ( lA, uA, lB, uB > 0 ), A << B ==> uA < lB

Cet ordre nous permet de déterminer laquelle des deux situations se présente. En particulier, lors de la transformation des relations Parmaster et Parmax en relations d'instants, nous pouvons savoir s'il faut ou non insérer un délai et à quel endroit du graphe. Dans le cas où l'ordre << ne peut être établi, le problème peut être contourné en encapsulant dans un élément composé X les deux intervalles A et B ainsi que la relation correspondante. Ensuite, le traitement avec le reste du document est réalisé à partir de cette nouvelle entité. Dans ce cas, l'intervalle associé à l'élément composé X, qu'il soit contrôlable où incontrôlable, possède des bornes de durées bien définies (voir la colonne c de la Fig 4 ). Dans la section 3.2.2, nous montrons comment le type (contrôlable ou incontrôlable) de l'intervalle X est déterminé. Cette information intervient dans la méthode de vérification de la cohérence causale proposée.

[Table des matières]

2.3 Primitives de manipulation des relations

Les primitives de manipulation des relations sont fournies dans le noyau de Madeus à travers deux fonctions d'insertion et de suppression. Ces fonctions sont appelées à partir de deux modules du système d'édition/présentation : Dans le cas du chargement d'un document à partir d'un fichier, l'insertion des relations est réalisée de façon ascendante par rapport à l'arbre abstrait du document. Chaque fois qu'une relation est reconnue par l'analyseur syntaxique, elle est insérée dans le document.

Fonctions d'insertion et de suppression de relations

RelationId <== Crée_Relation (Parent, Intervalle1, TypeRelation, Paramètre_Temporel, Intervalle2).

Supprime_Relation (Parent, RelationId).

Ces deux fonctions permettent la création et la suppression d'une relation dans le document. L'opération d'insertion retourne l'identifiant interne d'une structure RelationId qui représente la relation et sa traduction sous forme de relations d'instants (voir la section 2.4).

Parent : désigne l'élément composé de la structure logique sur lequel on veut insérer la relation.

Intervalle1, Intervalle2 : sont les identifiants symboliques des intervalles liés par cette nouvelle relation.

TypeRelation : indique quel est le type de relation temporelle liant les deux intervalles (représentation interne des relations).

Paramètre_Temporel : indique la valeur du délai lié dans la relation temporelle en question (ce délai est null si la relation ne fait pas intervenir de délai).

L'intérêt de garder en mémoire la structure RelationId est double : d'une part, dans le cas d'incohérence, cette structure permet de retrouver la relation d'intervalle incriminée et permet donc de retourner le bon message d'erreur à l'utilisateur. D'autre part, étant donné que le format de stockage des documents est basé sur les intervalles, cette structure permet de retrouver aisément la forme finale du document à partie de l'arbre abstrait.

Dans la suite de cette section, nous présentons le traitement qui est effectué lors de l'appel des fonctions présentées. Comme les relations n-aires n'interviennent qu'au niveau du format du document, et que leur traitement se ramène à des relations binaires, nous nous limiterons à exposer ce dernier cas de figure.

[Table des matières]

2.4 Traduction en relations d'instants

La traduction de chaque relation en relations d'instants est réalisée au moyen d'une fonction qui s'appuie sur un tableau interne. En remarquant que chaque relation binaire (a R b) fait intervenir deux intervalles, chacun étant formé par deux instants temporels, nous obtenons une configuration particulière pour chaque relation à partir des quatre instants résultants. Cette configuration est donnée dans le tableau Fig 5 qui indique de façon précise les relations entre les instants de début noté a- (resp. b-) et les instants de fin notés a+(resp. b+) des intervalles a et b.

Les relations d'instants données dans le tableau sont organisées selon une suite de relations i1 r1 i2 r2 i3 r3 i4. Chaque suite correspond à une entrée du tableau et représente la conjonction de relations d'instants : (i1 r1 i2), (i2 r2 i3) et (i3 r3 i4) où chaque instant i correspond à un sommet existant ou à créer dans le graphe de contraintes, c'est à dire (a-, a+, b-, ou b+).

Les entrées du tableau qui représentent les instants et les relations d'instants ont été disposées conformément à leur ordre d'apparition temporel dans la relation d'intervalle (ordre de précédence a- < a+ et b- < b+).

Les relations d'instants (i1 r i2) que nous utilisons sont les suivantes :

Relation i1 r1 i2 r2 i3 r3 i4
a finishes b b- < a- < a+ = b+
a starts b a- = b- < a+ < b+
a overlaps b a- < b- < a+ < b+
a during b b- < a- < a+ < b+
a meets b a- < a+ = b- < b+
a before b a- < a+ < b- < b+
a equals b a- = b- < a+ = b+
parmax(a, b) a- = b- < a+ hookleftarrow b+
parmaster(am, b) am- = b- < am+ ==> b+
parmin(a, b) a- = b- < a+ leftrightarrow b+
Fig 5. Tableau de traduction en relations d'instants

Les relations '=', '==>', 'leftrightarrow' et 'hookleftarrow' entre deux instants i1 et i2 entraînent leur fusion sur un même sommet du graphe G. La relation '<' entraîne la création d'un arc entre les sommets i et j. Dans la suite de ce chapitre, on désignera un sommet par i ou j et on désignera l'arc reliant i à j par (i, j).

Dans l'application Madeus, la redéfinition ou l'ajout de nouvelles définitions de relations temporelles se limite à la simple mise à jour de cette table. Cela permet, à tout moment, de modifier les relations temporelles supportées et l'interface graphique d'édition (palette de relations) sans avoir à apporter de grands changements aux traitements effectués par l'application.

[Table des matières]

3 Gestion des contraintes dans Madeus

Le graphe décrit précédemment est construit et modifié tout au long d'une session d'édition. Cette construction se fait progressivement suite aux différentes opérations effectuées par l'auteur. Les opérations qui ont des implications directes sur l'organisation temporelle d'un document sont l'insertion de nouveaux éléments multimédia et l'insertion ou la suppression de nouvelles relations ou de nouvelles contraintes sur les durées des différents éléments.

Les mises à jour du document ont généralement une portée locale. Cette portée est délimitée par les instants de début et de fin associés aux éléments. Les modifications introduites dans la structure temporelle susceptibles d'avoir lieu après chaque type d'opération d'édition sont détaillées dans la section 3.1. Ce sont ces opérations qui permettent la construction incrémentale du graphe par des mises à jour locales, et c'est à partir de ces mises à jour qu'on peut déterminer la portion du graphe qui doit être vérifiée.

[Table des matières]

3.1 Manipulation du réseau de contraintes

Dans cette section, nous présentons les solutions apportées au problème d'insertion et de suppression de relations temporelles du document. Ces opérations induisent respectivement une restriction ou un relâchement des contraintes portées par le graphe.

[Table des matières]

3.1.1 Ajout de relations

L'insertion d'une nouvelle relation (A R B) dans un document apporte des changements de sa structure temporelle. Ces changements se traduisent par la modification de la topologie du graphe à partir des trois opérations élémentaires suivantes :
  1. L'apparition explicite des sommets (instants) de début et de fin des intervalles A et B dans le graphe s'ils n'y figuraient pas déjà (cas de nouveaux éléments).
  2. L'insertion, entre les sommets du graphe d'instants, d'arcs valués par les intervalles représentant les durées des délais et des éléments du document.
  3. La fusion de certains sommets du graphe (cf. 2.4).
Ces différentes opérations entraînent la création ou la suppression de nouvelles chaînes dans le graphe et/ou la modification de la liste des chaînes existantes. Des vérifications sont effectuées à deux niveaux : Nous présentons d'abord comment l'insertion d'une nouvelle relation influe sur la structure du graphe. Cette insertion entraîne le deuxième niveau de vérification qui, prenant en compte le graphe du document, est plus générale que la première. L'algorithme décrivant le schéma général d'une opération d'insertion est décrit par le pseudo-code de la Fig 6 . Durant l'opération d'insertion, les différents traitements (lignes 3-4 de l'algorithme Fig 6 ) peuvent mettre en évidence ces incohérences.

Vérifier_et_ajouter_relation (RelationId)

{

1. Si (Relation_cohérente_a_priori (Relation_Id))

2. Alors Créer_sommets(RelationId);

3. Relier_sommets_au_graph(RelationId);

4. Propager_contraintes();

5 Sinon /* incohérence détectée */

6. Retourner_erreur(RelationId);

}


Fig 6. Algorithme d'insertion de nouvelles relations

La fonction Créer_sommets() effectue la création de nouveaux sommets pour les intervalles A et B de la relation, s'ils ne sont pas déjà créés. Ces sommets sont les représentants de l'élément A et B dans le graphe de contraintes. Comme ce graphe est structuré en chaînes, les sommets des intervalles A et B sont d'abord regroupés dans des chaînes (une pour chaque intervalle Fig 7 ) avant d'être insérés dans le graphe par la fonction Relier_sommets_au_graphe().

La fonction Relier_sommets_au_graphe() modifie la structure de graphe en y apportant les trois types de mise à jour cités auparavant : la création de sommets, l'insertion d'arcs ou la fusion de sommets existants du graphe. Ces opérations affectent la configuration des chaînes existantes et/ou en créent de nouvelles. Les algorithmes de vérification s'appuient sur ces chaînes pour déterminer la cohérence de la relation insérée. Pour cette raison, les procédures mettant en oeuvre ces trois opérations retournent la liste des chaînes modifiées.

Fusion de sommets

Dans ce qui suit, nous détaillons l'opération de fusion de sommets qui présente la plus grande complexité. Pour comprendre cet algorithme, nous allons dérouler pas à pas un exemple d'enchaînements d'insertion de relations.

L'exemple de la Fig 7 , donne une illustration graphique du fonctionnement de l'algorithme d'insertion de relations pendant une session d'édition. Au début le document est vide et l'auteur insère une relation A before (t1) B. Cette opération a pour effet l'apparition dans le graphe des arcs représentant A et B ainsi que le délai t1, sous forme d'une chaîne Ch1. Ensuite, l'insertion de la relation C meets D a pour conséquence l'apparition d'une chaîne parallèle Ch2, et ainsi de suite. L'insertion de la relation A finishes C dans notre exemple a engendré la fusion de deux sommets, produisant ainsi les quatre chaînes (Ch1, .., Ch4).

Image graph1.gif
Fig 7. Gestion des chaînes temporelles

L'opération de fusion de deux sommets, qui intervient lorsqu'il y a une relation d'instant de type '=', 'leftrightarrow', '==>' ou 'hookleftarrow' entre eux, est gérée par l'algorithme présenté dans la Fig 8 . Cet algorithme prend en entrée deux sommets s1 et s2 à fusionner. Il commence d'abord par éliminer les délais temporels qui peuvent éventuellement relier chacun de ces sommets au début ou à la fin de l'élément englobant (lignes 3-6 de l'algorithme). Ensuite, une phase supplémentaire permet de diviser les chaînes correspondant aux sommets s1 et s2 en deux chaînes chacune (lignes 8-11). Celles-ci sont ensuite fusionnées sur un seul sommet s qui regroupe toutes les chaînes entrantes et sortantes de s1 et s2 (ligne 12). L'algorithme enregistre sur le sommet s la relation d'instant qui fait intervenir les extrémités des chaînes des sommets s1 et s2 (lignes 13-22) : la raison de la fusion. Enfin, si le résultat des modifications entraîne la création de deux chaînes, il les concatène pour en produire une seule (lignes 23-27).


Chaînes <== Fusionner_sommets ( s1, s2, Relation_instant )

{

1. /* Enlever les intervalles de délai reliant les sommets */

2. /* s1 et s2 aux instants source et puit de l'englobant */

3. Enlever_arc_depuis_début(s1);

4. Enlever_arc_depuis_début(s2);

5. Enlever_arc_depuis_fin(s1);

6. Enlever_arc_depuis_fin(s2);

7. /* Phase initiale de la fusion de deux sommets */

8. si (Degré_entrant(s1) = Degré_sortant(s1) = 1)

9. Diviser_chaîne_en_deux(s1);

10. si (Degré_entrant(s2) = Degré_sortant(s2) = 1)

11. Diviser_chaîne_en_deux(s2);

12. s <== Fusionner_sommets(s1, s2);

13. pour (Relation_instant) {

14. '=':

15. Ajouter_relation_au_sommet(s,(=,Chaîne(s1),Chaîne(s2)))

16. '==>':

17. Ajouter_relation_au_sommet(s,(==>,Chaîne(s1),Chaîne(s2)))

18. 'leftrightarrow':

19. Ajouter_relation_au_sommet(s,(leftrightarrow,Chaîne(s1),Chaîne(s2)))

20. 'hookleftarrow':

21. Ajouter_relation_au_sommet(s,(hookleftarrow,Chaîne(s1),Chaîne(s2)))

22. }

23. si (Degré_entrant(s) = Degré_sortant(s) = 1) {

24. Chaîne1 = Chaîne_de_sommet_de_fin(s);

25. Chaîne2 = Chaîne_de_sommet_de_début(s);

26. Concaténer_chaînes(Chaîne1, Chaîne2);

27. }

28. Retourner (Toutes_les_chaînes_modifiées)

}


Fig 8. Algorithme d'insertion de nouvelles relations

En plus de sa fonction de construction du graphe, cet algorithme permet d'identifier les contraintes numériques à vérifier. Il s'agit des contraintes liées aux intervalles des nouvelles chaînes créées et/ou modifiées du graphe. Nous pouvons ainsi limiter le traitement de la cohérence aux seules chaînes en question. Dans l'exemple de la Fig 7 , cela revient à s'assurer que les contraintes Ch1 = Ch2 et Ch3 = Ch4 peuvent être vérifiées. Pour cette raison, l'algorithme retourne la liste des chaînes créées ou modifiées afin de les passer aux algorithmes de vérification détaillés dans la section 3.2.

[Table des matières]

3.1.2 Retrait de relations

Dans la structure du graphe d'instants, le retrait d'une relation nécessite le traitement inverse de celui de l'insertion, à part que cette opération ne peut entraîner d'incohérences. Par conséquent, il n'est pas nécessaire de refaire une phase de vérification. Il suffit de défaire les modifications introduites dans le graphe par l'insertion de la relation retirée. Cela revient à effectuer trois opérations : Image graph3.gif
Fig 9. Mise à jour du graphe d'instants suite à une suppression de relation

Les deux premières opérations consistent à effectuer le traitement inverse de celui réalisé par l'algorithme de la Fig 8 . Signalons que les intervalles qui interviennent dans chaque relation supprimée ne disparaissent effectivement du graphe que s'ils ne figurent dans aucune autre relation du document (c'est le cas par exemple de l'intervalle A dans Fig 9 ). Pour obtenir cette information, un compteur de références est utilisé, qui indique le nombre de fois qu'un intervalle figure dans une relation. Ce compteur est incrémenté/décrémenté à chaque insertion/suppression de relation qui met en jeu l'intervalle. Dès que ce compteur atteint la valeur nulle, l'intervalle en question et éventuellement les sommets du graphe correspondants sont supprimés.

La suppression d'un élément du document revient aussi à la suppression de relations du document. En effet, cette suppression entraîne celles de toutes les relations dans lesquelles figure l'intervalle correspondant. Ce qui, comme nous venons de le montrer, a aussi pour effet de supprimer du graphe l'intervalle correspondant ainsi que de relâcher les contraintes numériques qu'il a pu apporter.

[Table des matières]

3.2 Vérification de la cohérence

La modification d'un document multimédia par l'insertion ou la suppression d'éléments ou de relations ajoute de nouvelles contraintes dans le graphe. Ces contraintes peuvent conduire à une incohérence car les paramètres temporels des éléments et des relations (durées des éléments et des délais) doivent vérifier certains invariants liés à la progression du temps (causalité entre les différents événements) et à la coïncidence dans le temps des instants de fin des chaînes temporelles concurrentes (aspect quantitatif).

Supposons qu'une partie d'un document soit composée de trois éléments A, B et C (voir. Fig 10 -a), et que ces éléments soient liés par les relations (A meets B) et (B meets C). L'adjonction d'une nouvelle spécification C overlaps A rend le scénario incohérent. Ce cas correspond à une incohérence de type qualitatif car elle ne dépend pas des durées des éléments mais de la sémantique même des relations mises en jeu. En revanche, un scénario qui peut être cohérent du point de vue qualitatif peut être quantitativement incohérent. Par exemple (voir Fig 10 -b), si l'auteur spécifie que (A meets B) et (A starts C), l'adjonction de la relation (C overlaps B) rend le scénario incohérent pour des durées de A, B et C valant respectivement 30, 20 et 20 secondes. Finalement, dans l'exemple de la Fig 10 -c, on reprend le scénario précédent, mais avec un élément C dont l'intervalle de durée est de type incontrôlable de valeur [20, 40]. Ce cas correspond à une incohérence si, à l'exécution, la durée de l'élément C prend une valeur dans l'intervalle [20,30], par contre, le même scénario sera cohérent si la valeur de cette durée est dans l'intervalle [30,40]. Ce cas est considéré comme une incohérence car cette contrainte ne peut pas être garantie dans tous les cas (cf. 3.2.4).

Image consistency.gif
Fig 10. Les trois cas d'incohérences

Dans des scénarios plus complexes, les incohérences sont moins faciles à détecter que pour les trois exemples précédents, à cause des effets indirects des contraintes. Dans l'approche structurée des documents multimédia, la structure logique arborescente du document réduit considérablement la portée de ces contraintes, et par là même celle de la vérification. En effet, les éléments de base se trouvant au niveau des feuilles de l'arbre, une gestion ascendante de la cohérence par propagation des contraintes fournit un mécanisme efficace adapté au processus incrémental de l'édition.

Dans la suite de cette section, nous présentons les solutions mises en oeuvre dans Madeus pour la vérification des quatre types de cohérence suivants :

Les relations causales, prises indépendamment, n'introduisent pas d'incohérences. Par contre, leur insertion dans un scénario comportant des contraintes numériques peut le rendre incohérent. Dans la suite de ce chapitre, nous appelons la vérification de la cohérence causale le processus qui consiste à détecter ce type de situations.

[Table des matières]

3.2.1 Cohérence qualitative

La première phase de vérification qui est réalisée lors de l'insertion d'une relation temporelle est celle qui correspond au cas de la Fig 10 -a. Dans cet exemple, la traduction de la relation d'intervalle en relations d'instants sur la structure du graphe a pour effet l'introduction d'un cycle. Ce cycle est formé par les intervalles A, B et l'intervalle correspondant au délai t de la relation C overlaps A.
Image Qualit_Inconsist.gif
Fig 11. Exemple d'incohérence qualitative

Pour chaque relation d'intervalle introduite dans le document, la vérification de la cohérence qualitative consiste donc à vérifier que l'insertion de délais ainsi que la fusion des sommets qu'elle entraîne sur le graphe, n'introduisent pas de cycles. L'algorithme qui réalise cette fonction est décrit dans la Fig 12 . Notons qu'il n'est pas nécessaire de modifier le graphe pour réaliser cette opération (vérification a priori).

Dans cet algorithme, les instants i et j considérés sont ceux qui interviennent dans la relation RelationId, c'est-à-dire, si RelationId = (A R B), i, j in { A-, A+,B-, B+}. Intervalle(i) est une fonction qui rend l'intervalle auquel appartient l'instant i : Intervalle(i) = A / i = A+ ou i = A-. Sommet_du_graphe(i) est une fonction qui retourne le sommet correspondant à i dans le graphe d'instants.


Boolean <== Cohérence_Qualitative (RelationId)

{

1. Pour chaque relation d'instants (i r j) in RelationId

2. si (Intervalle(i) =/= Intervalle(j)) et (r =/= ?)

3. alors s1 = Sommet_du_graphe(i)

4. s2 = Sommet_du_graphe(j)

5. si (Chemin_existe(s1, s2))

6. alors retourne (Faux) /*Cycle détecté*/

7. sinon retourne (Vrai)

}


Fig 12. Algorithme de vérification de cohérence qualitative

Dans le cas de l'exemple précédent (Fig 11 ), la relation (C overlaps A) induit les relations d'instants : C- < A- < C+ < A+. Pour la relation i r j = C- < A-, s1 et s2 correspondent aux sommets du graphe représentant les instants i et j (fonction Sommet_du_graphe()), on a avec A- < C-, un cycle sur la même chaîne.

Pour empêcher la création de cycles, on vérifie s'il n'existe pas déjà un chemin dans le graphe entre les sommets que l'on doit relier lors de l'adjonction de la nouvelle relation (fonction Chemin_existe appelée dans Fig 12 ). Cet algorithme est basé sur deux aspects du graphe qui permettent d'accélérer la détection de chemin :

  1. Le maintien d'un tri topologique entre les sommets du graphe temporel G (comme sur la Fig 11 ). Ce tri permet d'obtenir une fonction d'ordre partiel rang de I times I ==> aleph tel que : forall s1, s2 in I, s1 < s2 Rightarrow rang(s1) < rang(s2) [LAM 78].
  2. La structuration du graphe sous forme de chaînes temporelles.
L'ordre topologique et l'application de l'algorithme aux chaînes et non pas aux arcs permet de réduire considérablement le temps de recherche de chemins dans le graphe.

Booléen <== Chemin_existe (s1, s2)

{

1. /* les deux sommets sont sur la même chaîne temporelle */

2. si (Chaîne(s1) = Chaîne(s2))

3. retourne Vrai;

4. /* s'ils ne sont pas sur la même chaîne temporelle */

5. si rang(s1) < rang(s2)

6. sA = s1; sB = s2;

7. sinon sA = s2; sB = s1;

8. si (Degré_entrant(s1) = Degré_sortant(s1) = 1)

9. ch1 = Chaîne_du_sommet(s1)

10. sA = Sommet_de_fin_de_la_chaîne(ch1)

11. si (Degré_entrant(s2) = Degré_sortant(s2) = 1)

12. ch2 = Chaîne_de_sommet(s2)

13. sB = Sommet_de_début_de_la_chaîne(ch2)

14. si (sA = sB)

15 retourne Vrai /* cycle trouvé */

16.

sinon si rang(sA) >= rang(sB)

17. retourne Faux /* pas de cycles */

18. sinon

19. retourne Recherche_Chemin(sA, sB);

}


Fig 13. Algorithme de recherche de chemin

L'algorithme vérifie d'abord si les deux sommets se trouvent sur la même chaîne (2-3). Dans ce cas, il retourne immédiatement vrai car un chemin a été trouvé (c'est le chemin détecté entre A- et C- de l'exemple Fig 11 ). Dans le cas contraire, la recherche d'un chemin est appliquée au niveau du graphe tout entier. Pour deux sommets s1 et s2 placés sur deux chaînes chaîne1 et chaîne2, tels que rang(s1) < rang (s2), la recherche consiste d'abord à comparer le rang des sommets extrémités des chaînes chaîne1 et chaîne2 respectivement. Pour la chaîne1, il s'agit du sommet de fin (sA dans l'algorithme) et pour la chaîne2 il s'agit du sommet de début (sB). Dans le cas d'égalité, on vérifie d'abord si les deux sommets ne correspondent pas au même sommet du graphe, auquel cas un chemin existe. Si le rang de sA est supérieur ou égal à celui de sB, il ne peut exister de chemin. Le dernier cas nécessite une recherche exhaustive sur le graphe (fonction Recherche_Chemin). Cette recherche est améliorée dans Madeus par deux mesures :

L'algorithme présenté ici est très bien adapté à la vérification de scénarios multimédia grâce à son exploitation maximale de la localité temporelle des relations [GHA 93]. Dans le cas des documents multimédia, cette localité traduit le fait que les relations introduites par l'auteur concernent, souvent, des éléments qui se situent dans un certain voisinage temporel, en particulier des chaînes adjacentes. Notre algorithme tire ainsi profit de ce voisinage pour vérifier la cohérence qualitative de façon plus efficace.

[Table des matières]

3.2.2 Cohérence causale

Dans cette partie, nous abordons la vérification des contraintes causales du graphe de contraintes. Cette opération est effectuée à chaque fois que l'auteur insère une relation, binaire ou n-aire, de type Parmax, Parmin ou Parmaster. Cela se traduit par l'insertion, dans le graphe de contraintes, d'une relation causale à base d'instants entre deux ou plusieurs extrémités de fin de chaînes (cf. tableau de traduction de la Fig 5 ).

La démarche adoptée dans Madeus consiste à réduire ces chaînes de façon à obtenir une seule chaîne qui représente cette portion du document dans le graphe. L'objectif est de ramener le processus de vérification au cas quantitatif ou indéterministe. Afin d'illustrer notre démarche, nous exposons des exemples de portions de graphes comportant des relations causales. Les graphes présentés sont constitués de trois chaînes (une par intervalle) A, B et C de durée [lA, uA], [lB, uB] et [lC, uC] respectivement. Ces chaînes sont liées selon les cas illustrés dans la Fig 14 par les relations Parmin (A, B, C), Parmaster (Bm, A, C) et Parmax(A, B, C).

Image CausalCase.gif
Fig 14. Vérification de la cohérence causale

L'illustration graphique de la Fig 14 représente une des dispositions temporelles possibles pour chacune des trois relations en fonction des positions relatives des bornes des chaînes A, B et C. Nous avons en plus supposé l'incontrôlabilité de la chaîne A et la contrôlabilité des chaînes B et C (cf. les hachures dans la Fig 14 ). La difficulté de gérer toutes les dispositions possibles est liée aux deux facteurs suivants :

Pour la relation Parmaster, la chaîne résultante correspond toujours à celle de B, qu'elle soit contrôlable ou non. Les chaînes A et C sont, dans ce cas, sous le « contrôle » de l'intervalle A. Par conséquent, A et C n'ont aucun effet sur le graphe de contraintes, nous les appellerons les chaînes « dominées ». Pour les relations Parmin et Parmax, la chaîne résultante est obtenue à partir des formules données dans la Fig 4 . Cet intervalle est considéré incontrôlable si l'intervalle résultant couvre une zone qui contient de l'indéterminisme, il sera contrôlable sinon. Cette solution nous ramène à un graphe ne comportant que des contraintes contrôlables ou incontrôlables. Nous avons ainsi préféré éviter les intervalles mi-contrôlables et mi-incontrôlables en considérant uniquement l'un des deux cas extrêmes. C'est dans un souci de garder un représentation et un traitement homogène du graphe de contraintes que nous avons pris ce choix. La vérification de la causalité est ainsi ramenée à la vérification quantitative et indéterministe.

[Table des matières]

3.2.3 Cohérence quantitative

Dans cette partie, nous développons les aspects liés à la vérification des contraintes numériques du graphe temporel. Cette opération est effectuée à chaque fois que l'auteur insère une nouvelle relation dans le document. Comme nous l'avons montré dans la section 3.1, chacune de ces modifications se traduit par des insertions de délais temporels ou encore par la fusion de sommets existants du graphe. Ces opérations permettent d'identifier l'ensemble des chaînes qu'il faut vérifier du point de vue qualitatif. C'est cette liste de chaînes modifiées qui est passée à l'algorithme de vérification présenté ici. Cet algorithme est basé sur la propagation des contraintes numériques en utilisant les opérations de composition et d'intersection suivantes :

Pour chaque sommet i, j et k du graphe, Dij représente la contrainte de la chaîne de sommets extrémités i et j :

Dij @ Djk = (i : [a, b] : j) @ (j : [c, d] : k) = (i : [a+c, b+d] : k)

Dij intersect D'ij = (i : [a, b] : j) intersect (i : [c, d] : j) = (i : [max(a, c), min(b, d)] : j)

L'algorithme que nous utilisons dans Madeus est fondé sur une version incrémentale [CHL 95] de l'algorithme DPC (Directional Path Consistency)[MEI 92]. Cet algorithme est plus performant que PC-2 [MAC 85]. Grâce au tri topologique du graphe, il permet de détecter toutes les incohérences quantitatives [MEI 92] en renforçant une forme restreinte de cohérence sur le graphe : la DPC-Cohérence :


Définition 3 (DPC-Cohérence) : Soit un graphe G = (I, A, E) un réseau de contraintes numériques trié topologiquement. Le réseau G est DPC-cohérent si la condition suivante est satisfaite :

forall i, j, k in I, (rang(i) < rang(k)) vee (rang(j) < rang(k)) Rightarrow Dij subseteq Dik @ Dkj


Avant d'aborder le déroulement détaillé de cet algorithme, nous commençons d'abord par une illustration graphique de son principe de fonctionnement, en particulier, par le parcours du graphe effectué à chaque insertion ou modification d'une chaîne temporelle.

Image Algo_Fonction.gif
Fig 15. Parcours de l'algorithme DPC-incrémental

Considérons un graphe composé de sept chaînes A, B, D, E, F, X et Y (voir la Fig 15 ), et soit Y la chaîne qui, après l'insertion d'une relation dans le document, a été modifiée resp. créée dans le graphe et qui doit être vérifiée quantitativement. En prenant en compte l'ordre topologique du graphe, le principe de l'algorithme consiste à vérifier ou renforcer la propriété de DPC-Cohérence en examinant ou modifiant, si c'est possible, la chaîne X. Si celle-ci est modifiée, l'algorithme examine la chaîne A et ainsi de suite à l'échelle du graphe tout entier.

L'algorithme permet de prendre en compte une ou plusieurs chaînes à la fois. Il suffit de l'initialiser avec la/les chaînes en question. Pour toute chaîne Ch à vérifier, on désignera par Ch-et Ch+ les sommets de début resp. de fin de Ch. L'algorithme exploite les aspects suivants du graphe temporel afin de détecter rapidement les incohérences quantitatives :


Booléen <== DPC_incrémental (GCh=(ICh,ACh,ECh), Chaînes_modifiées : C)

{

1. Liste = emptyset ;

2. pour chaque Ch in C {

3. Liste = Liste union {Sommet_de_fin_de_la_chaîne(Ch)}

4. Ch.Modifié = Vrai;

5. }

6. /* liste contient tous les sommets de fin des chaînes

7. modifiées */

8. tant que Liste =/= emptyset {

9. k <== Sommet_de_plus_haut_rang(Liste);

10. Liste <== Liste - {k};

11. Pour chaque arc a1 = (i, j) | rang(j) < rang(k) et

12. a2 = (i, k), a3 = (j, k) in ACh

13. si a2.Modifié ou a3.Modifié alors

14. {

15. Temp <== Dij ;

16. Dij <== Dij intersect ( Dik @ Dkj);

17. ACh <== ACh union {(i, j)};

18. si Dij = emptyset alors retourne (Faux)

19. si Dij =/= Temp alors {

20. /* la chaîne X est modifiée, il faut répercuter ses 21. modifications sur les autres chaînes */

22. List <== List union {j};

23. a1.Modifié = Vrai;

24. }

25. }

26.retourne (Vrai);

}


Fig 16. Algorithme de vérification de cohérence quantitative

Cet algorithme utilise une structure de données Liste pour stocker les sommets qui doivent être vérifiés. Ces sommets seront traités selon leur ordre topologique décroissant dans le graphe. Pour cette raison, à chaque fois qu'un nouveau sommet doit être ré-examiné, il est inséré dans la structure Liste en respectant cet ordre. Pour chaque chaîne insérée dans le graphe et qui doit être vérifiée, la Liste est initialisée avec le sommet de fin de cette chaîne. Pour un sommet k, il suffit de considérer des paires de sommets (i, j) tels que l'une des chaînes de i à k ou de j à k a été préalablement modifiée. Les chaînes modifiées sont marquées moyennant un champ (Modifié) qui permettra à l'algorithme d'identifier celles en cours de propagation.

Nous illustrons maintenant le fonctionnement de cet algorithme sur l'exemple de la Fig 15 avec les valeurs de durées suivantes A:[3,15], B:[1,6], F:[2,7], D:[6,12] et E:[4,9]. Nous partons d'une configuration initiale (sans les intervalles X et Y) où ces intervalles sont disposés sur deux chaînes parallèles C1 et C2, où C1 est composée de la séquence {A, B, C} et C2 de la séquence {D, E} (voir Fig 17 ).

Image ExempleQuant1.gif
Fig 17. Algorithme de cohérence quantitative : état initial

Après l'insertion de la relation A before [0,2] E nous obtenons une nouvelle topologie du graphe qui conduit à l'insertion d'un délai. Cette relation se traduit sur le graphe par l'insertion d'un délai X entre le sommet n2 et n3. Cette insertion modifie la configuration des chaînes existantes du graphe en créant une nouvelle chaîne C3 (celle correspondant au délai X), divise la chaîne C1 en deux nouvelles chaînes C1 et C4 (voir Fig 18 ) ainsi que la chaîne C2 en deux nouvelles chaînes C2 et C5. Comme cette relation n'introduit pas d'incohérence qualitative, nous appliquons maintenant l'algorithme de vérification quantitative pour nous assurer de la validité du nouveau scénario.

Après traduction en relations d'instants et insertion dans le graphe, les chaînes touchées par cette modification sont (C1, C2, C3, C4, C5) (Fig 18 ). Il suffit alors d'appliquer l'algorithme en prenant initialement les chaînes en question. Notons qu'étant donné que la structure Liste contient des sommets, il suffit d'insérer une seule fois un sommet de fin qui appartient à plusieurs chaînes modifiées.

Image ExempleQuant2.gif
Fig 18. Deuxième phase de l'algorithme

L'application de l'algorithme à l'exemple précédent se déroule alors de la façon suivante (les différents pas sont préfixés par le numéro de ligne de l'algorithme) :

C = {C1, C2, C3, C4, C5}

(5) Liste = {C1+, C2+, C4+}

(9) k = C4+

(10) Liste = {C1+, C2+}

(11) a1 = C3

(15) Temp = [0, 2]

(16) C3.durée = [0, 2] intersect ([3, 13] @ [-9, -4]) = [0, 2] (non modifié)

(9) k = C2+

(10) Liste = {C1+}

(11) a1=C1

(15) Temp = [3, 15]

(16) C1.durée = [3, 15] intersect ([6, 12] @ [-2, 0]) = [4, 12] (modifié)

(23) C1.Modifié = Vrai

(9) k = C1+

(10) Liste = emptyset

(26) L'insertion de la chaîne est donc quantitativement cohérente.

Image ExempleQuant3.gif
Fig 19. Troisième phase de l'algorithme

Considérons maintenant l'insertion d'une nouvelle relation : D before [7, 10] F dans le scénario temporel de la Fig 19 . Cette relation se traduit sur le graphe par l'insertion d'un délai Y entre le sommet n3 et n4. Cette insertion modifie la configuration des chaînes existantes du graphe en créant une nouvelle chaîne (celle correspondant au délai Y) et en divisant la chaîne C4 de la Fig 18 en deux nouvelles chaînes C4 et C7 (voir Fig 19 ).

Initialement la liste Liste est composée des sommets de fin de chaînes qui viennent d'être modifiées et de la chaîne créée (celle correspondant au délai Y) :

C = {C4, C5, C6, C7}

(5) Liste = {C4+, C5+}

(9) k = C5+

(10) Liste = { C4+}

(11) a1 = C6

(15) Temp = [7, 10]

(16) C6.durée = [7, 10] intersect ([4, 9] @ [-7, -2]) = [7, 7] (modifié)

(23) C6.modifié = Vrai

(9) k = C4+

(10) Liste = emptyset

(11) a1 = C3

(15) Temp = [0, 2]

(16) C3.durée = [0, 2] intersect ([1, 6] @ [-10, -7]) = emptyset

(18) Cette nouvelle modification est donc quantitativement incohérente.

Dans ce dernier cas, dès que l'algorithme détecte une incohérence, Madeus remet à jour l'état du graphe tel qu'il était initialement (avant ces modifications), ce qui revient à la suppression de la nouvelle chaîne et au reétiquetage des chaînes avec les valeurs qu'elles avaient avant la modification.

Nous avons vu à travers ces exemples le fonctionnement de cet algorithme qui permet la gestion des contraintes numériques d'un scénario temporel. Les avantages qu'il offre sont multiples :

Suppression de relations
Le parcours de l'algorithme peut être réutilisé pour la suppression de relations temporelles. Cette opération, dont nous nous limitons à expliquer le principe de fonctionnement, revient à la suppression de chaînes du graphe et au recalcul des valeurs de durée d'une partie du graphe. La suppression de chaînes nécessite donc deux étapes :
  1. Identifier les chaînes temporelles qui ont pu subir, et donc porter de façon directe ou indirecte, des contraintes numériques apportées par la chaîne enlevée/modifiée.
  2. Retrouver un état du graphe où la contrainte numérique subie par chaque chaîne identifiée prenne en compte cette suppression (c'est la réhabilitation de contraintes car celles qu'on cherche à retrouver sont nécessairement moins restrictives).
Comme l'algorithme DPC_incrémental propage les contraintes dans une seule direction, il suffit d'exploiter son parcours pour identifier les chaînes temporelles à réhabiliter, puisque c'est ce même parcours qui a pu leur apporter des restrictions numériques, c'est-à-dire une modification de la valeur de durée initiale. Malheureusement, ce parcours ne permet pas d'identifier avec précision les sources des restrictions numériques [BER 94], car comme le montre l'exemple de la Fig 20 , la suppression de la chaîne Y n'indique pas si les contraintes portées par la chaîne X et par la chaîne A ont été, à l'origine, provoquées par la chaîne Y ou par la chaîne E (voir le parcours possible de l'algorithme DPC_incrémental). Ceci nous oblige à remettre en cause en cascade toutes les sources potentielles de ces restrictions, ce qui a pour effet de supprimer X et A ensuite de les réinsérer avec leurs valeurs de départ ; la suppression revient donc à une opération d'insertion.
Image Supprimr-Contraint.gif
Fig 20. Effet de la suppression d'une chaîne du graphe

Cette solution, qui peut paraître peu performante, n'est en réalité pas critique. Car l'opération de suppression d'une relation ou d'un élément n'intervient qu'à l'édition, et donc de façon interactive et limitée en nombre, contrairement au processus de construction du graphe (l'insertion d'éléments et de relations) pour des fins de présentation, qui porte sur le document tout entier.

En conclusion, l'algorithme proposé, contrairement à PC-2, permet la vérification quantitative sur le graphe, sans maintenir systématiquement le graphe minimal de contraintes. Cela permet de détecter plus rapidement les incohérences quantitatives. De plus l'algorithme peut être appliqué sur la totalité du graphe, au moment de son chargement initial, tout en gardant de bonnes performances [MEI 92]; il est donc aussi bien adapté à l'édition qu'à la présentation.

[Table des matières]

3.2.4 Cohérence indéterministe : contrôlabilité

Ayant considéré le problème de la cohérence pour les intervalles contrôlables, nous abordons maintenant les problèmes liés à la prise en compte des intervalles indéterministes. La spécification temporelle présentée jusqu'ici traite le problème de cohérence pour les instants dont l'occurrence à l'exécution est entièrement sous le contrôle du système de présentation (les dates de présentation des différents éléments multimédia sont modélisés par des intervalles contrôlables). Le principe de vérification quantitative utilisé s'appuie sur la propagation de contraintes qui réduit la durée de ces intervalles afin de garantir l'existence d'une solution. Or pour les éléments modélisés par des intervalles incontrôlables, les durées correspondantes ne peuvent pas être modifiées car elles dépendent de facteurs externes au système de contraintes (interaction de l'utilisateur, exécution de programmes, délais variables dus aux accès réseau, etc). Prendre en compte des intervalles incontrôlables amène donc à considérer des contraintes qui sortent littéralement du cadre formel des STP [VID 95b] [FAR 96].

L'objectif de la vérification de cohérence indéterministe est d'assurer statiquement que le scénario trouvera une solution à l'exécution. Dans ce qui suit, nous allons simplement décrire de façon informelle la nature des vérifications que nous effectuons dans quelques cas bien identifiés. Une solution plus globale à ce problème n'a pas encore été apportée et nécessite des études plus poussées [VID 97].

Notion de point d'observation
Durant la phase de présentation d'un document, les différents événements, ordonnancés à partir du graphe, sont produits dans l'ordre topologique croissant depuis l'instant de début du graphe jusqu'à sa fin. À tout instant, le graphe du document est partitionné en deux sous-graphes (voir Fig 21 ) : le premier représente un passé « connu », car tous les événements ont déjà eu lieu, et le second représente un futur qui demeure, à ce moment, quantitativement « incertain », à cause justement des durées des intervalles incontrôlables.
Image futur_past.gif
Fig 21. Schéma de progression du temps dans un scénario

Alors que les dates de fin des intervalles contrôlable sont prévisibles, celles des intervalles incontrôlables ne le sont pas et la durée de ce type d'intervalles ne peut donc être déterminée qu'à l'instant même où l'événement de fin se produit : ces instants définissent ainsi des points d'observation privilégiés à partir desquels il va falloir mesurer l'impact sur le scénario en cours d'exécution, en particulier sur les contraintes numériques qu'il contient.

Principe de l'algorithme
Notre approche consiste alors à examiner chaque point d'observation pour déterminer statiquement si nous pouvons assurer la cohérence du scénario quelles que soient les valeurs prises par les intervalles incontrôlables qui précèdent ce point (on vérifie donc la contrôlabilité) [LAY 96a]. Cela revient à examiner l'état de la présentation pour identifier les éléments contrôlables futurs sur lesquels nous pouvons agir. La difficulté du problème est principalement due à deux facteurs :
  1. L'irréversibilité du temps : une fois que la valeur effective d'un intervalle incontrôlable a été observée, on ne peut plus revenir sur les durées attribuées aux intervalles contrôlables qui, au moment de cette observation, font déjà partie du passé.
  2. La nature fortement combinatoire du problème : comme nous nous trouvons encore dans la phase d'édition, offrir des garanties sur la contrôlabilité du scénario revient non seulement à prédire toutes les situations d'incertitude (pour la présentation) qui peuvent se cumuler, mais en plus, vérifier s'il est possible de les résoudre.
Pour ce faire, nous nous fondons sur une vérification au cas par cas qui s'appuie sur la structure du graphe. L'objectif est de traiter ces différents cas selon leur ordre de difficulté et de ramener le graphe à une représentation qui comporte uniquement des intervalles contrôlables. Nous avons identifié trois cas que nous pouvons traiter.

Cas 1

Le premier cas correspond aux situations dans lesquelles la présence d'un intervalle incontrôlable n'est pas gênante : cet intervalle n'affecte pas les autres contraintes spécifiées par l'auteur. Un tel cas est illustré dans la Fig 22 .

Image case1.gif
Fig 22. Exemple du Cas1

Dans cet exemple, le graphe peut être subdivisé en deux sous-graphes G1 et G2 qui ne sont reliés que par une chaîne contenant l'intervalle indéterministe (Chaîne d'articulation). Ce genre de cas se présente dans des scénarios où, par exemple, le passage entre deux parties est effectué par l'activation d'un élément de type bouton, de durée incontrôlable. Dans une telle configuration, il est clair que quelle que soit la valeur effective de durée prise par cet intervalle la cohérence du graphe n'est pas remise en question.

Cas 2

Le deuxième cas correspond à des situations dans lesquelles l'intervalle incontrôlable se trouve sur une chaîne dont l'extrémité droite correspond à un point d'articulation. Autrement dit, cet intervalle ne remet pas en cause les autres contraintes spécifiées par l'auteur, à l'exception des contraintes de coïncidence temporelle, telles que celles des chaînes B et D avec la chaîne incontrôlable X dans la Fig 23 .

Image case2.gif
Fig 23. Exemple du Cas 2

Dans cet exemple, le graphe peut être subdivisé en deux sous-graphes G1 et G2 qui ne sont reliés que par l'instant de fin de la chaîne contenant l'intervalle indéterministe X (le point d'articulation est X+). Ce type de situation ne peut être cohérent que si les chaînes B et D sont flexibles par la fin, comme le sont des éléments discrets (image ou texte). Dans ce cas, la terminaison de la chaîne X « provoque » la terminaison des deux autres chaînes contenant B et D. Nous nous ramenons donc au cas 1 moyennant cette simple vérification.

Cas 3

Le dernier cas consiste à vérifier, pour chaque instant permettant d'observer la durée d'un intervalle indéterministe, s'il est possible de le compenser. La compensation est reposée sur l'utilisation de la flexibilité des éléments contrôlables dont les instants de début ou de fin se trouvent dans le futur par rapport à cet instant. Ces instants sont appelés les points de recouvrement. Soit par exemple une chaîne constituée de deux intervalles A et B (voir Fig 24 -a). A est un intervalle incontrôlable A = [lA, uA]i et omega = (uA- lA) représente son montant d'indéterminisme. B est un intervalle contrôlable B = [lB, uB]c et delta = (uB- lB) représente son montant de flexibilité. Si la condition delta >= omega est satisfaite, alors l'indéterminisme peut être compensé dynamiquement de façon à rendre toute la chaîne contrôlable. Il suffit dans ce cas d'utiliser la flexibilité delta de façon à rendre la durée de l'intervalle A constante et égale à uA, ce qui a pour effet d'« éliminer » l'effet de cet indéterminisme. On obtient ainsi une chaîne ayant un comportement contrôlable vis-à-vis du reste du graphe et de durée totale [uA+lB, uA+uB]i. La cohérence quantitative de cette chaîne dans le graphe sera donc équivalente à sa contrôlabilité.

Image scenario_adj.gif
Fig 24. Gestion de la cohérence pour les éléments incontrôlables

Si l'intervalle incontrôlable ne peut être compensé au niveau de sa chaîne [LAY 96a], la démarche proposée dans Madeus consiste à vérifier si une exploitation de la flexibilité dans les chaînes concurrentes peut permettre de réajuster le scénario. Par exemple, dans le scénario de la Fig 24 -b, deux chaînes parallèles {A, X} et {Y, B} doivent être de durées égales. Pour vérifier que cette contrainte peut être satisfaite, il suffit de s'assurer que les instants de début et de fin de chaînes ont lieu à la même date. Là encore, il est facile de voir que si la flexibilité delta de la chaîne concurrente {Y, B} est supérieure à l'indéterminsme omega de la chaîne {A, X} (condition 1), et si la date de l'instant d'observation A+ a lieu avant le point de recouvrement B-, alors la simultanéité des instants B+ et X+ peut être assurée. Cette portion du graphe est donc contrôlable. La méthode proposée entraîne, pour le graphe de contraintes, l'adjonction d'une durée indéterministe omega sur l'élément englobant. Elle entraîne aussi la suppression de la flexibilité utilisée des chaînes concurrentes. Dans l'exemple de la Fig 21 , cela se traduit par un allongement potentiel de toutes les chaînes concurrentes d'une durée omega, ce qui revient à décaler la partie G2 du graphe (c'est le sous graphe qui représente le futur par rapport à l'instant de fin de la chaîne indéterministe).

Le processus de vérification proposé dans cette section ne couvre pas tous les cas. L'approche adoptée dans Madeus se limite à vérifier localement la possibilité de « réparer » le scénario à partir de l'instant de fin des intervalles incontrôlables, puisque les garanties qu'on souhaite offrir à l'auteur au moment de l'édition, en terme de contrôlabilité, correspondent à celles que nous pouvons effectivement tenir au moment de la présentation [LAY 96a].

La vérification de la contrôlabilité est un problème fondamental qui reste encore aujourd'hui un sujet de recherche ouvert. Des méthodes « préventives » ont fait l'objet d'une étude dans le cadre de la planification robotique [VID 95b][VID 95a][DUB 93]. Cette étude s'oriente maintenant vers des méthodes de recherches exhaustives similaires à celles employées dans le domaine du temps réel [VID 97].

[Table des matières]

3.3 Formatage temporel statique ou recherche de solution

La recherche de solution pour un scénario temporel, appelée aussi formatage temporel par analogie avec le formatage spatial, consiste à affecter des valeurs aux différents intervalles du graphe. Cette opération, contrairement aux précédentes, n'est nécessaire que lorsque l'utilisateur lance la présentation du document. Elle consiste à calculer d'abord les contraintes minimales des différentes chaînes, puisque ces dernières représentent les seules valeurs susceptibles de figurer dans la solution finale, ensuite le calcul de cette solution appelée document formaté.

Dans cette section, nous présentons donc deux étapes qui permettent d'aboutir à un document temporellement formaté : l'algorithme qui permet de calculer le réseau de contraintes minimal, et le processus de calcul d'une solution définitive, c'est-à-dire le formatage.

[Table des matières]

3.3.1 Réseau de contraintes minimal

Le calcul du réseau de contraintes minimal consiste à éliminer les valeurs d'intervalles des chaînes du graphe G qui ne figurent dans aucune solution.

L'algorithme du plus court chemin (all pairs shortest paths) présenté dans le Chapitre III permet de calculer le graphe minimal. Cet algorithme, de complexité cubique O(n3) en temps et en espace, est général car il ne tient pas compte de l'existence d'un ordre topologique entre les sommets. Or le graphe utilisé dans Madeus, étant topologiquement trié, admet une solution beaucoup plus efficace. C'est un algorithme basé sur ce tri que nous proposons ici.

Pour pouvoir appliquer cet algorithme, le graphe d'instants G est utilisé comme un graphe de distance Gd . La contrainte minimale entre deux instants i et j, introduite pour le graphe de distance Gd présenté dans la Chapitre III, est définie par l'intervalle [l, u], où -l représente la longueur du plus court chemin entre j et i, et u représente la longueur du plus court chemin de i à j.

L'algorithme présenté dans la Fig 25 est une variante de l'algorithme de Bellman-Ford [MEI 92][KHA 79] basé sur l'ordre topologique du graphe. Pour deux sommets i et j du graphe tels que rang(i) < rang(j), l'ordre topologique permet de limiter la portée du calcul des plus courts chemins en propageant d'abord le calcul du sommet i en direction du sommet j. Cela permet de définir la borne de durée minimale entre i et j. On procède ensuite dans l'ordre inverse pour déterminer la borne de durée maximale.


(Entier, Entier) <== Plus_court_chemin(GCh = (ICh, ACh, ECh), i, j)

{

1. Pour chaque x in ICh {

2. x.Distance = infty

3. }

4. i.Distance = 0;

5. Pour chaque y in ICh | 0 <= rang(i) <= rang(y) pris dans l'ordre topologique croissant

6. Pour chaque chaîne C = (x, y) in ACh et Dxy = [l, u]

7. y.Distance = min(y.Distance, x.Distance +u)

8. Pour chaque x in ICh | 0 <= rang(x) <= rang(j) pris dans l'ordre topologique décroissant

9. Pour chaque chaîne C = (x, y) in ACh et Dxy = [l, u]

10. x.Distance = min(x.Distance, y.Distance - l)

11. retourne (i.Distance, j.Distance)

}


Fig 25. Algorithme de calcul du plus court chemin

Pour calculer le graphe minimal correspondant à un élément composé du document, il suffit d'appliquer l'algorithme deux fois : une fois entre son instant de début (sommet source) et son instant de fin (sommet puit), et une nouvelle fois entre son instant de fin et son instant de début. Cela permet en plus de déterminer les bornes de durée de toutes les chaînes qu'il contient. L'exemple de la Fig 26 reprend un état cohérent du graphe présenté en 3.2.3. et qui correspond dans ce cas à un élément composé X. L'application de l'algorithme sur ce graphe permet d'aboutir au graphe minimal représenté en Fig 26 .

Image Minimal_Graph.gif
Fig 26. Calcul d'un graphe minimal

La complexité de cet algorithme est linéaire par rapport au nombre de sommets n et d'arcs e contenus dans le graphe : O(n+e). Il est donc beaucoup plus rapide que l'algorithme all pairs shortest paths présenté dans le Chapitre III ainsi que ses variantes comme [KHA 79]. Donc, si on considère le coût de la vérification de cohérence quantitative cumulé au coût de calcul du graphe minimal, nous obtenons une complexité totale linéaire en fonction du nombre de sommets n et du nombre d'arcs e : 2 * O(n+e) + O(n k2) cong O(n+e).

[Table des matières]

3.3.2 Formatage temporel

Dans Madeus, l'opération de formatage temporel consiste à appliquer un algorithme à deux phases pour calculer deux solutions pour un document (à partir du début du graphe puis à partir de sa fin). On peut ainsi mieux répartir les contraintes qui pèsent sur les différentes chaînes et éviter que certains éléments multimédia ne subissent des déviations trop importantes par rapport à leurs valeurs optimales.

Chaque phase de l'algorithme consiste à dater les différents sommets du graphe en partant de son sommet source, respectivement puits. Dans la première phase, cette datation est effectuée dans l'ordre topologique croissant (lignes 1-22 de l'algorithme de la Fig 28 ) et permet de définir une valeur de durée (C.durée1) pour chaque chaîne. La deuxième phase est effectuée dans l'ordre décroissant et permet de définir la valeur C.durée2. La Fig 27 représente l'application de cet algorithme à l'exemple de la Fig 26 .

Image Solution_Graph.gif
Fig 27. Formatage temporel d'un scénario

L'algorithme prend en compte les durées préférables des différentes chaînes (lignes 8, 12 et 16). De plus, à chaque étape du calcul de la date d'un sommet du graphe, l'algorithme s'assure que la date retenue respecte bien les contraintes de chacune des chaînes (lignes 13, 14, et 17).

La solution finale est alors obtenue par la valeur moyenne des valeurs issues du calcul de chaque phase. Cette nouvelle moyenne constitue elle-même une solution car les contraintes du graphe forment un système linéaire.


Formater (GCh=(ICh, ACh, ECh))

{

1. Liste = I - { source };

2. Distance(source) = 0;

3. Tant que Liste =/= emptyset {

4. n <== Sommet_de_rang_Minimum(Liste);

5. Liste <== Liste - { n }

6. Si (Degré_Entrant(n) == 1) {

7. Pour la chaîne C | C+ = n

8. Distance(n) = Distance(C-) + C.optimale;

9. } sinon {

10. somme = 0; min_Max = infty ; max_Min = 0 ;

11. Pour chaque chaîne C =[l, u] | C+ = n {

12. somme = somme + Distance(C-) + C.optimale;

13. min_Max = min( min_Max, Distance(C-) + u);

14. max_Min = max( max_Min, Distance(C-) + l);

15. }

16. Moyenne = somme / Degré_Entrant (n);

17 Moyenne = min ( min_Max, max (Max_min, Moyenne));

18. Pour chaque chaîne C | C+ = n {

19. C.durée = Moyenne - Distance(C-);

20. }

21. Distance (n) = Moyenne;

22. }

23. /* calcul de C.durée2 par datation dans l'ordre topologique décroissant */

24. ...

25.. Pour chaque chaîne C {

26. C.effective = (C.durée1 + C.durée2 )/2

27. }

}


Fig 28. Algorithme de formatage temporel

L'algorithme de la Fig 28 permet le formatage d'un document en temps linéaire : O(n).

Les valeurs obtenues sont ensuite propagées à l'échelle des chaînes aux éléments multimédia qu'elles contiennent. Ce calcul de valeurs tient compte du type de média de chaque élément. Par exemple, si on considère une chaîne formée simplement par un élément vidéo suivi d'un délai temporel, on commence en priorité par le calcul de la durée de l'élément vidéo aux dépens de l'élément délai. Dans Madeus, cette notion est étendue à l'ensemble des média en attribuant à chacun un ordre de priorités. Ces priorités sont définies dans l'ordre suivant : Audio, Vidéo, Animations, Texte, Délais. On privilégie ainsi les éléments continus, ensuite les éléments discrets et enfin les éléments vides de contenu : les délais. Après cette phase, le document est sous sa forme exécutable et l'information portée par le graphe peut directement être exploitée dans le processus de présentation.

Image Solution_Graph_2.gif
Fig 29. Document de l'exemple de la Fig 27 formaté

L'établissement d'une politique automatique de répartition des contraintes entre les différents média reste une opération délicate [BUC 93][HAM 93][KIM 95]. Car elle peut engendrer des situations qui ne correspondent pas nécessairement aux souhaits de l'auteur. Ce problème n'est cependant pas nouveau dans le domaine des documents; il peut être comparé au comportement des formateurs spatiaux de texte comme LaTex [LAM 86] et Thot [QUI 86].

Signalons finalement qu'une partie du formatage est effectué dynamiquement, à l'exécution. Car la prise en compte des durées effectives des intervalles incontrôlable nécessite un processus réactif de réajustement du graphe (cf. 3.2.4). Ceci ne remet pas en cause l'opération de formatage, car c'est à partir des durées calculées durant cette phase que le réajustement du graphe pendant la phase de présentation est réalisée (voir le section 3.2).

[Table des matières]

3.4 Évaluation

Nous présentons maintenant quelques mesures de performances du gestionnaire temporel de Madeus (Fig 30 ). Ces mesures sont effectuées à partir d'un ensemble de documents réels qui ont été produits et présentés avec l'outil. Ces mesures montrent que l'outil permet d'obtenir de bonnes performances dans le processus de construction et de vérification du graphe. Pour chaque document, la mesure porte sur le temps CPU pris pour construire la forme exécutable d'un document. Cela correspond, lors de l'utilisation de Madeus en tant qu'outil de présentation, à la succession des opérations de chargement, de vérification et de formatage. C'est ce temps que perçoit l'utilisateur lorsqu'il active un document, d'où l'importance de ces mesures.
Document UR Inria Scène Hubble Ancres
Nombre d'éléments 167 98 42 21 11
Nombre de relations 137 93 36 20 8
Nombre de sommets 189 110 52 33 12
Nombre d'arcs 271 155 80 43 18
Nombre de chaînes 137 70 57 23 13
Niveaux hiérarchiques 6 4 3 2 2
Temp CPU (ms) 114.52 69.54 30.87 15.46 7.6
Fig 30. Temps de traitement des documents Madeus sur Sun Ultra Sparc

Les algorithmes sont écrits en langage C et les mesures sont effectuées sur une machine Sun-Ultra-Sparc (sous le système Unix Solaris 2.5). Chaque mesure a été effectuée 500 fois au cours du fonctionnement normal de l'application et du système. Ces chiffres témoignent d'une dépendance quasi-linéaire entre la taille du document en terme de nombre d'éléments et son temps de traitement. Ces dépendances s'expliquent surtout par le fait que le nombre de chaînes parallèles à un instant donné de la présentation n'excède pas la dizaine.

[Table des matières]

4 Conclusion

Dans ce chapitre, nous avons présenté le modèle temporel mis en oeuvre dans Madeus. Ce modèle fondé sur les contraintes permet de manipuler de façon flexible la dimension temporelle des documents multimédia. De plus, les modifications du scénario sont prises en compte de façon incrémentale, ce qui permet d'avoir à tout instant (au formatage près) une forme cohérente et donc exécutable du document.

Le graphe extrait de la représentation peut ainsi être directement utilisé pour ordonnancer le document. C'est cette phase que nous décrivons dans le chapitre suivant.

Notes :

(1)

Dans les systèmes de documents multimédia l'opértion de recherche de solution est aussi appellé formatage.
(2)

Nous utiliserons dans la suite les termes graphes ou hypergraphe pour désigner la structure du problème de synchronisation temporelle.