• Aucun résultat trouvé

Un réseau de Petri est un graphe orienté composé de Places et de Transitions. Chaque place est

reliée à des transitions et chaque transition est reliée à des places. Une place peut contenir des

jetons. Ils sont consommés et/ou produits lors de l’activation des transitions. Une transition est

dite sensibilisée si chaque place qui la précède immédiatement dans le réseau possède un jeton.

Elle peut alors être déclenchée. Une transition peut être attachée au plus à un senseur et un

effecteur. Elle peut être déclenchée lorsqu’elle est sensibilisée et que la condition de son senseur

est validée. Puisque nous utilisons des réseaux de Petri saufs, chaque place du réseau n’accueille

au plus qu’un jeton. La raison de l’utilisation des réseaux saufs est détaillée dans la Section2.3.

Ceci n’a pas un impact fort sur notre utilisation, car nous ne modélisons qu’un seul processus

: l’évolution des scénarios possibles. La Figure3.6 donne un exemple de réseau de Petri utilisé

comme séquence dans la spécification des scénarios écrite dans le langage #SEVEN (formalisme

graphique). L’Algorithme 3donne son équivalent en formalisme XML.

Figure 3.6 –Équivalent graphique du XML de Algorithm3

Le marquage d’un réseau (nombre de jetons par places) définit son état courant. Les

places peuvent être définies comme “Initiales” ou “Finales”. Les places “initiales” (places 1

et 15, marquées par un I dans la Figure 3.8) possèdent un jeton à l’initialisation du réseau. Les

places “finales” (places 21 et 23, marquées par un F dans la Figure3.8) permettent de décrire

l’ensemble des marquages finaux du réseau. Un marquage du réseau est dit final si au moins

toutes les places indiquées comme finales possèdent un jeton. Un réseau dont le marquage est

final est considéré dans un état final.

La structure du réseau de Petri permet d’exprimer la séquentialité, le parallélisme et la

concurrence [Murata,1989] (c.f. AnnexeA). La structure du réseau est chargée à l’initialisation

du moteur. La Figure 3.7présente des exemples de structures de base qui peuvent être utilisées

pour exprimer des ensembles de scénarios complexes. Les réseaux 1, 2, 3 et 4 sont à la base

d’un réseau #SEVEN. La transition du réseau 1 ne possède ni senseur ni effecteur. Elle est

Algorithm 3 Exemple de spécification de scénarios #SEVEN en XML. La séquence est de la

classe des Réseaux de Petri Saufs.

<?xml version ="1.0" encoding ="UTF -8" standalone =" yes"?>

<scenario xmlns ="http :// www.insa - rennes .fr/# SEVEN ">

<contextInit classname =" ContextMapInit ,␣ SEVEN .Extra ">

<param name=" testValue " value ="12"/>

</ contextInit >

<event id=" Event_2 ">

<sensorCheck classname =" NumberSensor ,␣ SEVEN .Extra ">

<param name=" Operator1 " value ="$( ExternalContext . element .j)"/>

<param name=" Operator " value =" LESS_THAN "/>

<param name=" Operand2 " value ="4"/>

</ sensorCheck >

</ event >

<event id=" Event_1 ">

<sensorCheck classname =" NumberSensor ,␣ SEVEN .Extra ">

<param name=" Operand1 " value ="$( ExternalContext . element .i)"/>

<param name=" Operator " value =" EQUALS "/>

<param name=" Operand2 " value ="$( ScenarioContext . testValue )"/>

</ sensorCheck >

<sensorLabel >i= testValue </ sensorLabel >

<effectorUpdate classname =" NumberEffector ,␣ SEVEN . Extra ">

<param name=" Operand1 " value ="$( ExternalContext . element .T)"/>

<param name=" Operator " value =" INCREASE "/>

<param name=" result " value="$( ScenarioContext .T)"/>

</ effectorUpdate >

</ event >

<sequence xmlns :xsi="http :// www.w3.org /2001/ XMLSchema - instance "

xsi:type=" SafePetriNet " id=" -1">

<place xsi:type=" Place " id=" Place_3 " label =" Place_3 "/>

<place xsi:type=" Place " id=" Place_1 " label =" Place_1 "/>

<place xsi:type=" Place " id=" Place_2 " label =" Place_2 "/>

<transition id=" Transition_4 " label =" Transition_4 ">

<event idref =" Event_1 "/>

<upstreamPlace idref =" Place_1 "/>

<downstreamPlace idref =" Place_2 "/>

</ transition >

<transition id=" Transition_5 " label =" Transition_5 ">

<event idref =" Event_2 "/>

<upstreamPlace idref =" Place_2 "/>

<downstreamPlace idref =" Place_3 "/>

</ transition >

<initialPlace idref =" Place_1 "/>

<finalPlace idref =" Place_3 "/>

</ sequence >

peut être déclenchée dès que la place à laquelle elle est liée possède un jeton et ceci n’a pas

de conséquence autre que de changer l’état du réseau. Une telle transition peut être utilisée

comme élément structurel interne du réseau (par exemple comme proposé dans le réseau 8). Le

réseau 2 présente une transition qui possède une condition A définie par un senseur, mais qui

ne déclenche pas d’actions. À l’inverse, le réseau 3 ne possède pas de condition (tout comme

le réseau 1), mais son déclenchement va également déclencher l’actionX. Le réseau 4 présente

un lien de causalité entre une condition et une action. Ici, il exprime “Si A, alors faire X” ou

A est une condition et X une action. Le réseau Le réseau 5 présente une boucle. Le senseur

associé à la transition est réinitialisé dès que la transition est activée, car sa place amont reçoit

un jeton directement. Le réseau 6 représente un “ou exclusif”. Les conditions B etC sont en

concurrence. Le principe peut être étendu à un grand nombre de conditions. Un cas particulier

existe si C vaut B, alors le réseau 2 signifie “Si B, alors ... Sinon ...”. Le réseau 7 décrit un

parallélisme. D et E peuvent être réalisés, ou pas, et dans n’importe quel ordre. Encore une

fois, ce principe peut être étendu à plus de deux conditions. Le réseau 8 décrit une conjonction.

Pour pouvoir déclencher la transitionH, les conditionsF etGdoivent toutes deux être réalisées,

quel que soit l’ordre. Ce principe peut également être étendu à plus de deux conditions.

La Figure 3.8 donne un exemple de réseau #SEVEN utilisant différents agencements

possibles. La Transition 2 sort sur deux branches parallèles qui se rejoignent à la transition

22. Les Transitions 12 et 13 sont en concurrences sur la place 11 (ou exclusif). Le réseau de

droite (Transitions 16, 17 et 18) est en parallèle du réseau de gauche, car ils sont initialisés au

même moment (places initiales 1 et 15). Ils sont donc équivalents à un unique réseau ou les

places 1 et 15 seraient en aval d’une même transition.

La mise à jourdes réseaux de Petri peut être réalisée par plusieurs algorithmes. Ils diffèrent

dans leurs choix de la prochaine transition à activer. Celui de base propose de déclencher

aléatoirement une transition. Afin de garantir le contrôle sur le comportement du moteur, nous

conseillons d’utiliser un algorithme déterministe dans le choix des transitions. Par exemple,

dans notre implémentation, nous parcourons les transitions dans leur ordre de création jusqu’à

stabilisation de l’état du réseau. Cet algorithme est complété par un système détection des

boucles (par exemple par marquage) pour ne pas rester indéfiniment dans un pas de mise à

jour du réseau. Ainsi, nous assurons la reproductibilité des exécutions lorsque les actions dans

l’environnement ont lieu dans le même ordre. Ceci n’est qu’une possibilité. Il est facile de

remplacer cet algorithme par un autre si nécessaire. Enfin, lors de la spécification des scénarios,

le développeur ne doit pas tenir compte de cet algorithme pour éviter qu’une spécification ne

soit spécialisée à une implémentation du modèle et donc difficilement réutilisable.

Puisque le moteur de scénarios est en attente de la réalisation de conditions, des situations

d’interblocage peuvent avoir lieu. Par exemple, une entité E de l’environnement attend que la

représentation des scénarios arrive à un état A. De son côté le moteur de scénarios attend que

la conditionC ait lieu dans l’environnement pour atteindreA. SiE est la seule entité à pouvoir

réaliser C alors E et le moteur de scénarios sont en interblocage. Le calcul d’accessibilité (p.

ex. [Mayr,1984], voir AnnexeA) permets de savoir s’il existe une séquence de marquages d’un

réseau permettant d’atteindre un marquage cible à partir du marquage courant. En supposant

Figure 3.7 –Exemples de structures de base pour réaliser des ensembles de scénarios complexes

que les conditions des senseurs puissent être validées, il est donc possible de savoir si, pour le

marquage courant, le réseau peut atteindre au moins un des marquages finaux du réseau et

donc de prévoir les blocages au niveau du moteur #SEVEN. Le calcul d’accessibilité permet

aux entités autonomes dans l’environnement de raisonner sur les marquages à emprunter pour

prévenir les interblocages par exemple en utilisant des méthodes d’action planning.