Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 60 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
60
Dung lượng
1,3 MB
Nội dung
Université Bordeaux I – ENSEIRB - CNRS Institut de la Francophonie pour lʹInformatique Laboratoire Bordelais de Recherche en Informatique Mémoire de fin d'études "Dépliage du modèle en langage AltaRica" Préparé par NGUYEN Duy Tung Sous la direction de M COUVREUR Jean-Michel et M WALUKIEWICZ Igor LaBRI, Octobre 2005 Dépliage du modèle en langage AltaRica Page Table des matières Introduction générale Langage AltaRica 2.1 2.2 2.3 Introduction Définition Transformation de l'AltaRica au réseau de Petri 15 Dépliage de réseau de Petri 16 3.1 3.2 3.3 Notions élémentaires 16 Etat de l'art .18 Dépliage de produits d'automates 21 Réalisation 26 4.1 4.2 Prototype 26 Résultats 27 Amélioration .30 5.1 5.2 5.3 Dépliage basé sur le préfixe local 30 Dépliage basé sur les techniques LCA et RMQ .34 Dépliage basé sur le RMQ dynamique 40 Conclusion 43 Référence 44 Annexe .46 A La syntaxe de langage AltaRica au format BNF 46 B Tests standards en langage AltaRica 49 C Algorithme de dépliage de produits d'automates 51 D Autres exemples de réseaux de Petri et leurs préfixes 58 Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page Liste des figures Figure 2.1 Figure 2.2 Figure 2.3 Figure 2.4 Figure 3.1 Figure 3.2a Figure 3.2b Figure 3.3 Figure 3.4 Figure 3.5a Figure 3.5b Figure 3.5c Figure 3.6a Figure 3.6b Figure 3.6c Figure 3.7 Figure 5.1 Figure 5.2 Figure 5.3 Figure 5.4 Figure 5.5 Figure 5.6 Figure 5.7 Figure 5.8 : : : : : : : : : : : : : : : : : : : : : : : : Réseau de Petri Réseau de Petri de SG(3) Macro-transition et des transitions correspondantes SG(3) en langage AltaRica Réseau d'ocurrence Algorithme de dépliage Génération des transitions Préfixe fini Préfixe du dépliage de SG(3) Composant s0 de SG(3) Composant s1 de SG(3) Composant s2 de SG(3) Processus arborescent dans le composant s0 de SG(3) Processus arborescent dans le composant s1 de SG(3) Processus arborescent dans le composant s2 de SG(3) Processus arborescent global Graphe des sous-préfixes Les sous-préfixes Q, R et P de SG(3) Graphe des sous-préfixes de SG(3) L'arbre Cartsian du composant s1 de SG(3) RMQ rapide La construction du graphe des sous-préfixes Construction de matrice A Arbre AVL dans le RMQ dynamique Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Liste des tableaux Tableau 4.1 Tableau 4.2 Tableau 4.3 Tableau 4.4 Tableau 5.1 : : : : : Résultats de dépliage du SG (avec une blanche) Résultats de dépliage du SG (avec deux blanches) Résultats de dépliage du DP Résultats de dépliage du BUF Comparaison de la complexité des algorithmes de dépliage Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Page Dépliage du modèle en langage AltaRica Page Résumé De nos jours, pour éviter l'explosion combinatoire du nombre d'états d'un système compliqué, la vérification basée sur des préfixes finis est une bonne solution, mais le dépliage n'est développé que sur le réseau de Petri, un langage de modélisation en bas niveau Autrement dit, il ne supporte pas un langage de modélisation en haut niveau comme l'AltaRica Il faut construire un outil de transformation pour résoudre ce problème D'autre part, grâce aux caractéristiques du modèle en AltaRica, on peut utiliser un dépliage plus efficace, le dépliage de produits d'automates De plus, dans leur dépliage local, nous pouvons intégrer la technique basée sur le préfixe local ou les techniques Dernière Ancêtre Commun (LCA) et Requête Minimale du Rang (RMQ) pour diminuer la complexité du problème Nous avons des implémentations expérimentales sur des tests standards pour tester la correctivité et la performance des algorithmes de dépliage ainsi que des améliorations Mots clés: Dépliage, Altarica, réseau de Petri, modélisation, vérification, préfixe, Dernière Ancêtre Commun (LCA), Requête Minimale du Rang (RMQ), RMQ dynamique Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page Abstract Nowadays, for avoiding the combinational explosion of the states number of complex systems, the model-checking based on finite prefix is a good solution but the unfolding is only developed on the Petri net, a language of modelling in low-level In other words, it does not support a modelling language in high-level like AltaRica We must build a tool of transformation in order to resolve this problem On the other hand, because of features of model in AltaRica, we can use a more efficient unfolding, this is a unfolding of products of automats Furthermore, in their local unfolding, we can integrate the technic based on the local prefixe or the technics Least Common Ancestor (LCA), Range Minimum Query (RMQ) for reduce the complexity of the problem We have the experimental implementations on the standard tests in order to test the correctitude and the performance of unfolding algorithms and their improvements Key-words: Unfolding, Altarica, Petri net, modelling, model-checking, prefix, Least Common Ancestor (LCA), Range Minimum Query (RMQ), dynamic RMQ Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page Remerciement Je tiens remercier mes responsables, en particulier M Jean-Michel COUVREUR qui m'a aidé maîtriser le sujet du stage, a corrigé mes fautes au début et m'a favorisé enfin de trouver de nouvelles solutions pour le dépliage Je remercie M André ARNOLD, M Gérald POINT et M Alaine GRIFFAULT qui me donnent des documents intéressants concernant l'AltaRica Particulièrement M André ARNOLD pour l'idée du LCA, et M Gérald POINT pour sa bibliothèque altatool pour que je puisse économiser le temps Je suis heureux d'avoir rencontré et de m'être intégré dans le groupe MVTsi (Modélisation, Vérification et Test des systèmes informatisés), en particulier M The Quang TRAN qui m'a aidé surmonter des difficultés dans un nouvel environnement Je remercie M Victor KHOMENKO qui m'a donné des tests standards pour tester mes implémentations expérimentales et les comparer avec les autres Je tiens remercier les professeurs l'IFI en particulier M Thanh Thuy NGUYEN qui m'ont contribué des meilleures conditions pour mon stage au LaBRI, Université Bordeaux Enfin, je veux envoyer un grand merci pour ma famille, mes amis qui ont partagé mes obstacles, m'ont favorisé durant mon stage Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page Introduction générale Né de la volonté d'industriels et de chercheurs, le langage de modélisation en haut niveau AltaRica [Arnold03] a beaucoup d'avantages tels qu'il est utilisé plus facilement que des langages de modélisation en bas niveau comme le réseau de Petri ou il est naturel de pouvoir décrire par de nombreuses façons différentes un système donné La vérification basée sur des préfixes finis [Esparza01, Couvreur04] est une nouvelle approche pour éviter l'explosion combinatoire de nombre d'états du système compliqué, mais ces techniques ne sont développées que sur le réseau de Petri, un langage de modélisation en bas niveau L'objectif de mon stage est de réaliser un dépliage sur le langage AltaRica: pas seulement de construire un outil de tranformation de l'AltaRica au réseau de Petri, mais aussi de chercher des algorithmes plus efficaces pour déplier un modèle en AltaRica Grâce aux caractéristiques du modèle en AltaRica, on peut utiliser un dépliage supplémentaire, c'est le dépliage de produits d'automates [Esparza et al, 99, Couvreur04] De plus, dans leur dépliage local, pour améliorer la complexité du test de conflit, du test de la configuration ou la complexité du problème en général, nous pouvons intégrer la technique basée sur le préfixe local, les techniques Dernière Ancêtre Commun (LCA) ou Requête Minimale du Rang (RMQ) [Demaine03, Bender00] et la technique basée sur le RMQ dynamique [Shibuya03] L'introduction de langage AltaRica est donnée dans la section Nous allons présenter l'état de l'art du dépliage et le dépliage de produits d'automates dans la section En suite, on peut trouver aussi les implémentations expérimentales et les comparaisons entre le dépliage normal et le dépliage de produits d'automates dans la section En fin, on discute sur les inconvénients et les améliorations du dépliage de produits d'automates dans la section Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page Langage AltaRica Langage AltaRica est un langage de modélisation en haut niveau ayant des avantages tels que la construction des systèmes complexes plus facile que des langages de modélisation en bas niveau comme le réseau de Petri Plus en détail dans [Arnold03] 2.1 Introduction Le projet AltaRica est né de la volonté d'industriels et de chercheurs pour établir divers ponts entre : • la sûreté de fonctionnement et les méthodes formelles, • les analyses quantitatives des dysfonctionnements et les analyses qualitatives des comportements fonctionnels, • les divers outils et méthodes d'aide la modélisation, afin de fournir aux ingénieurs concepteurs de systèmes complexes où critiques un atelier outillé Dans ce contexte, un outil de la vérification d'AltaRica basé sur le préfixe est attentatif Ce projet commence depuis 1996 et se compose de trois phases AltaRica : phase I (de Novembre 1996 Octobre 1997) Objectifs : Etude de la faisabilité de couplages de différents outils en précisant si nécessaire la sémantique de certains d'entre eux Résultats : Définition d'un langage de description l'expérimentation sur des cas tests de systèmes complexes, validé par Les partenaires : Les sociétés IXI et ELF Aquitaine Production d'une part; les laboratoires LaBRI et LADS d'autre part AltaRica : phase II (de Novembre 1997 Octobre 1999) Objectifs : Stabilisation du langage AltaRica, réalisation d'un prototype et méthodologie d'utilisation Résultats : La sémantique du langage a été fixée Des prototypes d'outils nécessaires la simulation d'un modèle AltaRica ont été développés Des prototypes de compilateurs Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page vers les outils Aralia et Mec ont été développés et un premier manuel méthodologique a été écrit Les partenaires : La société d'ingénierie IXI, les industriels Dassault Aviation, ELF EP, Schneider Electric, Renault, IPSN et Thomson Detexis, et enfin les laboratoires LaBRI et LADS AltaRica : phase III (de Juin 2001 Mai 2003) Objectifs : Réalisation d'un atelier AltaRica Les partenaires : La société d'ingénierie IXI, les industriels Dassault Aviation, TotalFinaElf, Schneider Electric, France Telecom, Thales systèmes aéroportés, et enfin les laboratoires LaBRI, IRCCyN et ONERA Jusqu'à maintenant, on continue développer des outils dans ce langage Et un outil de vérification basée sur le préfixe dans ce mémoire est un exemple 2.2 Définition Tout d'abord, on concerne le réseau de Petri, étant un des langages de modélisation en bas niveau Il est défini dans [Couvreur04] comme le suivant: Définition 2.1 (Réseau de Petri) Un réseau de Petri R est une structure où • • P et T sont des ensembles (finis ou infinis) disjoints, Pre et Post sont de fonctions de T dans IN|P| \ {0} Les éléments de P et T sont appelés des places et des transitions, et Pre et Post sont les fonctions de pré- et post-conditions des transitions Un marquage m de R est un multi-ensembles de P (m ∈ IN|P|) Un réseau marqué est la donnée d'un réseau de Petri R et d'un marquage initial m0 Un réseau étiqueté est la donnée d'un réseau de Petri R, d'un alphabet fini Σ et d'une fonction d'étiquetage sur les transitions λ: T → Σ L'ensemble des prédécesseurs (resp des successeurs) d'une place p est défini par : •p = { t ∈ T| Post (t) (p) ≠ 0} (resp p• = { t ∈ T| Pre (t) (p) ≠ 0}) L'ensemble des prédécesseurs (resp des successeurs) d'une transition t est défini par : •t = { p ∈ P| Pre (t) (p) ≠ 0} (resp t• = { p ∈ P| Post (t) (p) ≠ 0}) Si S est un ensemble de P ∪ T, alors *s (resp s*) désigne l'ensemble de ses prédécesseurs (resp successeurs) directs et indirects *s et s* sont défini par induction de la façon suivante: s∈ *s ∧ ∀r ∈ P ∪ T , r• ∩ *s ≠ → r ∈ *s s∈ s* ∧ ∀r ∈ P ∪ T , •r ∩ s* ≠ → r ∈ s* Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 45 [Heljanko02] K Heljanko,V Khomenko, and M Koutny Parallelisation of the Petri net unfolding algorithm In Joost-Pieter Katoen and Perdita Stevens, editors, Proceedings of the 8th International Conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS'2002), volume 2280 of Lecture Notes in Computer Science, pages 371–385, Grenoble, France, April 2002 Springer-Verlag [McMillan95] K L McMillan, A technique of state space search on unfoldings, Formal Methods in System Design, 6:45-65, 1995 [Pagetti04] Pagetti, Extension temps réel d'AltaRica , Mémoire de thèse, Ecole centrale de Nantes et Université de Nantes, 2004 [Point00] Point, AltaRica: Contribution l’unification des méthodes formelles et de la sûreté de fonctionnement AltaRica , Mémoire de thèse, Université Bordeaux 1, 2000 [Shibuya03] T Shibuya, I Kurochkin, Match chaining algorithms for cDNA mapping, WABI 2003, LNBI 2812, pp 462-475, 2003 [Vincent03] A Vincent, Conception et réalisation d'un vérificateur de modèles AltaRica, Mémoire de thèse, Université Bordeaux 1, 2003 Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 46 Annexe A La syntaxe de langage AltaRica au format BNF Cette annexe présente la syntaxe concrète du langage AltaRica La grammaire est exprimée en BNF Nous utilisons les abbréviations (resp ) pour désigner des constructions de listes contenant zéro, un ou plusieurs (resp un ou plusieurs) éléments séparés par sep La notation [ construction ] désigne une construction optionnelle Les objets de base manipulés par le langage sont les booléens, les entiers et les constantes symboliques Les booléens sont représentés par les mots-clés true et false Les entiers sont reconnus par l'expression régulière : [-+]? [0-9]+ Les constantes symboliques sont reconnues par l'expression régulière : [a-zA-Z][a-zA-Z0-9_]* Les mots-clés du langage sont les suivants : const, domain, node, edon, bool, integer, flow, event, sub, state, assert, trans, sync, extern, main, priority, symbol, true et false Les mots-clés peuvent être écrits en utilisant des minuscules et/ou des majuscules ::= ::= ::= ::= ::= ::= const = ; ::= domain = ; ::= node Main edon ::= node edon ::= ::= ::= ::= ::= ::= '[',']' { } integer bool symbol ::= ::= ::= ::= ::= ::= Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica ::= ::= ::= ::= ::= ::= ::= ::= Page 47 ::= ; ::= flow ::= state ::= : ::= ::= event ; ::= [] ::= ::= ! ::= priority ::= sub ; ::= : ::= ::= assert ::= ::= sync ::= '' [Cardinalité] ::= [?] ::= [?] ::= > ::= >= ::= = ::= ::= trans ::= |- ; ::= -> ::= := ::= or Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 48 ::= | ::= ::= and ::= & ::= ::= = ::= != ::= ::= ::= ::= ::= ::= < >= ::= + ::= - ::= ::= * ::= / ::= ::= ~ ::= not ::= ( ) ::= - ::= + ::= ite(,,) ::= if () then () else () ::= @(, ) ::= @(,, ) ::= ::= ::= ::= ::= extern ::= ::= ::= ::= true false ::= toute chaîne de caractères alphanumériques ou le caractère '_' commençant par une lettre (c-à-d [a-zA-Z][a-zA-Z0-9_]*) ::= toute chaîne de caractères numériques reconnue par l'expression régulière [-+]?[0-9]+ Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 49 B Tests standards en langage AltaRica Buffer Buf(n) | Buffer de capacité n (avec 2n états accessibles) domain TypeComposant = {High, Low}; node Composant flow s : TypeComposant state s_ : TypeComposant event up, down; trans s_ = High s_ = Low |- down |- up -> s_ -> s_ := Low; := High; assert s = s_; edon node Main sub c00, c01, c02, c03, c04, c05, c06, c07, c08, c09 : Composant; event t0, t01, t12, t23, t34, t45, t56, t67, t78, t89, t9; trans true |- t0, t01, t12, t23, t34, t45, t56, t67, t78, t89, t9 -> ; sync ; extern initial_state = c00.s_ = High, c01.s_ = High, c02.s_ = High, c03.s_ = High, c04.s_ = High, c05.s_ = High, c06.s_ = High, c07.s_ = High, c08.s_ = High, c09.s_ = High ; edon Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 50 Dining Philosophers DP(n) | Avec n nombre de philosopheurs domain TypePhilosopher = {A, B, C, D}; node Philosopher state s_ : TypePhilosopher event getL, getR, putL, putR; trans s_ = A s_ = B s_ = C s_ = D edon ||||- node Chopstick state used_ : [0,1] event get, put; trans used_ = used_ = edon getL getR putL putR -> -> -> -> |- get -> used_ |- put -> used_ s_ s_ s_ s_ := := := := := 1; := 0; node Main sub p1, p2, p3: Philosopher; sub c12, c23, c31 : Chopstick; event t1a, t1b, t1c, t1d, t2a, t2b, t2c, t2d, t3a, t3b, t3c, t3d; t1a, t1b, t1c, t1d, -> ; t2a, t2b, t2c, t2d, t3a, t3b, t3c, t3d trans true |- sync ; extern initial_state = p1.s_ = A, p2.s_ = A, p3.s_ = A, c12.used_ c23.used_ c31.used_ ; = 0, = 0, = edon Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX B; C; D; A; Dépliage du modèle en langage AltaRica Page 51 C Algorithme de dépliage de produits d'automates Dépliage local void Composant::unfold_init() Entrées : La liste des transitions, des places du réseau de Petri Sorties : Les premiers événements a partir du marquage initial La raison de mon choix : On crée cette fonction pour préparer un dépliage local d'un composant void Composant::unfold_init () { for each Place p ∈ lPlacesList { if ( ( p->getValue() = 1) && ( p->getComposantName() = this->getName()) { Condition b = Condition( p, NULL ); b->setDepth(0); b->setIndexComposant(this->getIndex()); generateTransition ( b); } } } ) Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica void Composant::unfold_gen (Event e) Entrées La liste des transitions, des places du réseau de Petri, l’événement e Les conditions ayant e comme l’événement précédent Déplier un dépliage local d'un composant de e : Sorties : Le but de cette fonction : La raison de mon choix : On crée cette fonction pour déplier un dépliage local d'un composant void Composant::unfold_gen (Event e ) { Transition t = lTransitionsList->getObjectInList( e); unsigned int nPostSize = t->getPostSize(); for each Place p ∈ t->getPostPlacesList() { if ( p->getComposantName() = this->getName()) { Condition b = Condition( p, e); _lB->insert(b); b->setDepth(e->getDepth()+1); b->setIndexComposant( this->getIndex() ); generateTransition ( b); } } e->setGen(1); } void Composant::generateTransition( Condition *b) Entrées : La condition actuelle b Sorties : L'événement local actuel e dans _lE Le but de cette fonction : Générer les événements locaux correspondants des transitions appartenant la condition locale actuelle b La raison de mon choix : On crée cette fonction pour générer les événements locaux correspondants des transitions appartenant la condition locale actuelle b void Composant::generateTransition( Condition b ) { string sName = b->getName(); unsigned int nIndex = b->getIndex(); for each Transition t ∈ lTransitionsList { if ( t->isPrePlace(sName) = 1) { Event e = Event (t, b ); _lE->insertFirst(e); // ajouter ce pointer de e a l’ensemble E e->setDepth(b->getDepth()+1); e->setIndexComposant(this->getIndex()); } } } Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Page 52 Dépliage du modèle en langage AltaRica Page 53 Dépliage global void Unfolding::unfold() Entrées : La liste des transitions, des places du réseau de Petri Sorties : Le préfix de dépliage du réseau de Petri Le but de cette fonction : Déplier un réseau de Petri La raison de mon choix : On crée cette fonction pour déplier un réseau de Petri en utilisant des connaissances des composants pour économiser le mémoire et pour que le programme fonctionne très vite void Unfolding::unfold() { for each Composant c ∈ _lComposantsList { c->unfold_init( ); Condition b = (c->getB())->getObject(0); GlobalCondition gb = GlobalCondition ( b, NULL ); _lB->insert ( gb ); generateTransition ( gb ); } while ( _lToDo->getSize() != 0) { unsigned int bCutOff = 0; GlobalEvent ge = _lToDo->pop(); ObjectsList lEventsList = ge->getEventsList(); ObjectsList lGlobalConditionsList = ge->getGlobalConditionsList(); Mask mask0 = Mask(); generateConfiguration ( configuration, lEventsList ); Mask mask = Mask(configuration); if ( mask = mask0) bCutOff = 1; if (bCutOff != 1) { for each GlobalEvent ge1 ∈ _lE { ObjectsList lEventsList1 = ge1->getEventsList(); generateConfiguration ( configuration1, lEventsList1); Mask mask1 = Mask(configuration1); if ( ( mask = mask1) && ( (configuration->getSize()>configuration1->getSize()) || Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 54 ((configuration->getSize()=configuration1->getSize()) && isAdequat( configuration, configuration1) ) ) ) bCutOff = 1; } } if (bCutOff == 1) _lCut->insert(ge); else { _lE->insert(ge); for each (Event e ∈ lEventsList ) && (GlobalCondition gb ∈ lGlobalConditionsList ) && (Composant c ∈ _lComposantsList) { if ( (e!=NULL) && (e->getGen() = 0) ) c->unfold_gen( e); ObjectsList lB = c->getB(); for each Condition b ∈ lB { if ( (b->getEvent())->getIndex() = e->getIndex() ) { GlobalCondition gb = GlobalCondition ( b, ge ); _lB->insert(gb); generateTransition ( gb ); } } } } } } Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 55 void Unfolding::generateTransition( GlobalCondition *gb) Entrées : La condition globale actuelle gb Sorties : L'événement global actuel ge dans _lToDo Le but de cette fonction : Générer les événements correspondants des transitions appartenant la condition globale actuelle gb La raison de mon choix : On crée cette fonction pour générer les événements correspondants des transitions appartenant la condition globale actuelle gb void Unfolding::generateTransition ( GlobalCondition gb ) { for each Transition t ∈ _lTransitionsList { if ( t->isPrePlace(sName) = 1) { ObjectsList lCoSetsList = findCoSetIterator ( t, gb); testCoSet(lCoSetsList,0); if ( isExist( lCoSetsList )) { for each CoSet c ∈ lCoSetsList { GlobalEvent ge = GlobalEvent( t ); lGlobalConditionsList= ge->getGlobalConditionsList(); lEventsList = ge->getEventsList(); for each GlobalCondition gb && Composant c { lGlobalConditionsList->insert( gb); ObjectsList lLocalE = c->getE(); for each Event e ∈ lLocalE { if ( (e->getCondition())->getIndex() = (gb->getCondition())->getIndex() ) && (e->getName() = ge->getName()) ) lEventsList->insert((Event *) e); } } } } _lToDo->insert(ge); // ajouter ce pointer de e au ToDo } } } Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 56 ObjectsList Unfolding::findCoSetIterator( Transition *t, Object* gb) Entrées : Transition t Sorties : Liste des CoSets de la transition t Le but de cette fonction : Générer exhaustivement de tous les combinaisons des cosets acceptées de t La raison de mon choix : On crée cette fonction pour générer exhaustivement de tous les combinaisons des cosets acceptées de t ObjectsList Unfolding::findCoSetIterator ( Transition t, Object gb) { ObjectsList lCoSetsList = ObjectsList(); for each Composant c ∈ _lComposantsList { CoSet coSet = CoSet( c); // get liste Entree de t for each Place p ∈ lPlacesList { if ( p->getComposantName() = c->getName()) { coSet->setPlaceName(((Object *) p)->getName()); if ( p->getName() = gb->getName() ) // Seulement gb coSet->insert(gb); else for each GlobalCondition gb { if ( gb->getName() = ( p->getName()) coSet->insert( gb); } } } lCoSetsList->insert (coSet); } return lCoSetsList; } void Unfolding::testCoSet(ObjectsList *l, unsigned int i) Entrées : La liste CoSets , unsigned int i Sorties : Toutes les combinaisons des cosets acceptées Le but de cette fonction : Générer exhaustivement tous les combinaisons des cosets pour tester La raison de mon choix : On crée cette fonction pour générer exhaustivement tous les combinaisons des cosets pour tester On crée cette fonction pour tester résultats de génération exhaustive de toutes les combinaisons des cosets acceptées et supprimer tous les cosets inutiles Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica void Unfolding::generateConfiguration(ObjectsList* configuration, Event *e) Entrées : La configuration et l'événement e Sorties : La configuration a partir de l'événement e Le but de cette fonction : Générer une configuration a partir de événement e La raison de mon choix : On crée cette fonction pour générer une configuration a partir de l'événement e void Unfolding::generateConfiguration(ObjectsList configuration, Event e) { configuration->insertFirst(e); Condition b = e->getCondition(); if (b->getEvent()!= NULL) generateConfiguration(configuration, b->getEvent() ); } unsigned int Unfolding::isAdequat (ObjectsList *configuration, ObjectsList *configuration1) Entrées : Deux configurations Sorties : si la configuration > la configuration si non Le but de cette fonction : Tester si la configuration est adéquat la configuration La raison de mon choix : On crée cette fonction pour tester si la configuration est adéquate la configuration unsigned int Unfolding::isAdequat ( ObjectsList configuration, ObjectsList configuration1) { for each (Event e ∈configuration) && (Event e1 ∈ configuration1) if (e->getName() > e1->getName() ) return 1; return 0; } Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Page 57 Dépliage du modèle en langage AltaRica D Autres exemples de réseaux de Petri et leurs préfixes Réseau de Petri et son préfixe de SG(5) Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Page 58 Dépliage du modèle en langage AltaRica Réseau de Petri et son préfixe de SG(7) Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Page 59 [...]... arborescent global Enfin, le résultat final du dépliage global de l'exemple 3.5 est comme dans la figure 3.4 L’algorithme supplémentaire en tenant compte des connaissances des composants est comme dans l'annexe Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 26 4 Réalisation Dans cette section, j'implémente deux programmes: Un dépliage normal; Un dépliage. .. Il y a encore des autres ordres adéquats qui sont analysés et testés dans [Grivet01] Exemple 3.3 Le préfixe du dépliage de SG(3) Figure 3.4: Préfixe du dépliage de SG(3) Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 21 3.3 Dépliage de produits d'automates Dans quelques cas spéciaux, on a des algorithmes plus efficaces tels que le cas de dépliage. .. precedent ( e1 ) et e2 sont en conflit • depth ( e1 ) < depth ( e2 ) et precedent(e2) et e1 sont en conflit Autrement dit, dans la même profondeur, test du conflit si deux événements sont différents Si les événements sont dans les différentes profondeurs, il faut sauter à l'événement précédent On trouve que dans le dépliage de produits d'automate, le test du conflit entre deux événements a une complexité... [Pagetti04] L 'AltaRica est un langage de modélisation en haut niveau Il regroupe des variables (des états du réseau de Petri) aux macro-états et des transitions aux macro-trasitions Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 12 La description d'un modèle AltaRica comprend les points suivants [Arnold03]: 1 La description de la hiérarchie du système... programme en utilisant la technique RMQ (présentée dans la section suivante) et j'ai obtenu des bons résultats en premier temps Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 30 5 Amélioration Dans la dernière section, c'est confirmé que le test du conflit entre deux événements a une complexité O(h) On peut diminuer cette complexité à O(h1/2) (avec le dépliage. .. de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 32 Exemple 5.1 Soit le problème SG(3), on a 3 sous-préfixes P, Q et R comme suivants : W t4_w0 t3_w W’ E B t2_b0 t6_b B’ E E t5_w1 W t1_b4 B Figure 5.2: Les sous-préfixes Q (2), R (1) et P (0) de SG(3) Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 33 Graphe... calculs en utilisant des configurations locales → On ne peut pas comparer la performance du ce programme avec des implémentations des autres car on a testé dans les différents systèmes Le temps de réalisation du test standard est plus grand que les autres mais la taille du problème qu'on peut résoudre est équivalente Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica. .. prêt) plus grand (au sens de ⊆) processus arborescent de Ce processus arborescent est appelé le dépliage de Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 17 Exemple 3.1 Le réseau d'ocurrence correspondant du réseau de Petri dans l'exemple 2.1 Conflit p1 Causalité t1 t2 p2 p3 p4 p5 t3 t4 t5 t6 p6 p7 p6 p7 t7 t7 Concurence p1 p1 t1 t2... Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 15 2.3 Transformation de l 'AltaRica au réseau de Petri On transforme le système modélisé en langage AltaRica au système représenté par le réseau de Petri Dans cette étape, on utilise la bibliothèque altatools de [Point00] pour analyser la structure d’un programme AltaRica entré et pour créer un outil... ) > depth ( r2 ) et precedent ( r1 ) et r2 sont en conflit • depth ( r1 ) < depth ( r2 ) et precedent(r2) et r1 sont en conflit Mémoire de fin d'études de NGUYEN Duy Tung, Promotion IX Dépliage du modèle en langage AltaRica Page 34 En général, on a un arbre où la complexité est O(H.µ) On trouve qu’on ne doit que déterminer le conflit entre r1 et r2 quand r1 ≠ r2 (On a O(H)) En cas dans le même préfixe,