Modélisation et Simulation d`un système robotisé avec des réseaux
Transcription
Modélisation et Simulation d`un système robotisé avec des réseaux
Modélisation et Simulation d'un système robotisé avec des réseaux de Pétri POHU Thomas superviseur : Bruno VILHENA ADORNO 27/07/2012 Table des matières 1 Introduction 2 1.1 Motivations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Présentation de la situation . . . . . . . . . . . . . . . . . . . . . 2 1.3 Objectifs à réaliser . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Modélisation du système avec les réseaux de Pétri 4 2.1 Présentation des réseaux de Pétri . . . . . . . . . . . . . . . . . . 4 2.2 Réseau de Pétri du robot A . . . . . . . . . . . . . . . . . . . . . 5 2.3 Réseau de Pétri du robot B . . . . . . . . . . . . . . . . . . . . . 6 2.4 Réseau de Pétri global . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4.1 Cas sans arrêt du robot B après b passages . . . . . . . . 7 2.4.2 Cas sans arrêt du robot B après b passages . . . . . . . . 8 Simulation graphique des réseaux de Pétri . . . . . . . . . . . . . 9 2.5 3 Réalisation de la simulation sous Matlab 10 3.1 Simuler les réseaux de Pétri sous Matlab . . . . . . . . . . . . . . 10 3.2 Gestion de l'achage . . . . . . . . . . . . . . . . . . . . . . . . . 11 4 Conclusion 12 1 Chapitre 1 Introduction 1.1 Motivations Dans le cadre d'étude sur l'automatisme il est intéressant de travailler sur l'interaction entre diérents systèmes robotisés indépendants. Ces travaux peuvent avoir des applications dans le monde de l'industrie avec à terme un partage et un enchainement des tâches ne nécessitant plus d'intervention humaine. Ce projet est aussi l'occasion de découvrir de nouvelles méthodes de travail notamment avec les réseaux de Pétri. 1.2 Présentation de la situation On considère deux robots mobiles A et B et un robot manipulateur. Chaque robot ne peut suivre que les mouvement indiqués par les èches (Figure 1.1). L'objectif est de synchroniser les robots dans le but de produire un produit X, X est composé de a unitées d'un élément b unitées d'un élément Xb Xa délivrées par le robot A et de délivrées par le robot B. Une fois que X est construite, soit après a passages de A et b passages de B au point de construction (marqué 'x' sur la Figure 1.1), le manipulateur baisse son bras pour prendre le produit X et se relève. Les robots mobiles sont soumis aux conditions suivantes : Quand les robots arrivent aux limites de l'aire de fabrication, ils heurtent le mur et retournent sur leurs pas. Le robot A ne s'arrête jamais, il va et vient sans arrêt, le robot B peut s'arrêter quand il heurte le mur. La vitesse vb du robot B est deux fois plus grande que celle A. 2 va du robot CHAPITRE 1. 3 INTRODUCTION Figure 1.1 Schéma de fonctionnement du système 1.3 Objectifs à réaliser 1. Le premier objectif est de réaliser le réseau de Pétri permettant de modéliser le système en fonction des variables suivantes : a et b, nombres d'éléments composant X ; vb et v a , vitesses des robots ; Dx et Dy , dimensions de l'aire de fabrication ; xd et y d , coordonnées du point de construction x. 2. Il s'agit ensuite de simuler le système sous Matlab, les diérentes variables, a, b, vb , v a , (Dx ; Dy ), (xd ;y d ), peuvent être dénies en fonction des besoins. 3. Pour terminer, implémenter le programme dans les robots. Chapitre 2 Modélisation du système avec les réseaux de Pétri 2.1 Présentation des réseaux de Pétri Un réseau de Pétri est un graphe avec : des places des transitions reliés par des arcs orientés Tout arc doit être relié à ses sommets par une place/transition et deux places ou deux transitions ne peuvent se suivre. Chaque place peut contenir une ou plusieurs marques ou jetons indiquant dans quel état se trouve le système. Une transition ne peut être franchie que si toutes les places en amont sont marquées avec le poids de l'arc correspondant (poids de 1 par défaut). Lors du franchissement des places celles placées en amont se voient retirer le nombre de marques indiquées par le poids de l'arc de même que celles en aval se voient ajouter des marques selon la même règle[1]. Quelques exemples de réseaux de Pétri peuvent êtres trouvés sur le site de Pétri Nets World[2]. 4 CHAPITRE 2. MODÉLISATION DU SYSTÈME AVEC LES RÉSEAUX DE PÉTRI5 2.2 Réseau de Pétri du robot A Le robot A ne peut se trouver que dans deux états d'avance dans un sens ou dans l'autre, on appelle Avance quand il est dans le sens aller et Recul dans le sens retour. Comme on doit également connaitre sa position pour interagir avec le robot B on va utiliser 4 places : AvanceA1 et ReculA1 avant le passage sur le point de construction x ; AvanceA2 et ReculA2 après le passage sur le point de construction x. Le robot a une vitesse la coordonnée yd va , les dimensions Dx et Dy de l'espace de fabrication et du point x servant à déterminer les transitions : Le passage de AvanceA1 à AvanceA2 se fait au bout d'une durée va · yd . Le passage de AvanceA2 à ReculA1 se fait au bout d'une durée va · (Dy − y d ). Le passage de ReculA1 à ReculA2 se fait au bout d'une durée v a ·(Dy − y d ). Le passage de ReculA2 à AvanceA1 se fait au bout d'une durée . Figure 2.1 Réseau de Pétri du robot A va · yd CHAPITRE 2. MODÉLISATION DU SYSTÈME AVEC LES RÉSEAUX DE PÉTRI6 2.3 Réseau de Pétri du robot B Le robot B peut se trouver dans trois états diérents ; deux d'avance dans un sens ou dans l'autre, on appelle Avance quand il est dans le sens aller et Recul dans le sens retour et également un état d'arrêt. Comme on doit également connaitre sa position pour interagir avec le robot A on va utiliser 6 places : AvanceB1 et ReculB1 avant le passage sur le point de construction x ; AvanceB2 et ReculB2 après le passage sur le point de construction x ; ArrêtB2 et ArrêtB2 dans le cas où le robot s'arrête contre le mur avant de repartir quand il en a le temps avant le prochain passage du robot A. On va également utiliser deux places vides P19 et P20 après chaque arrêt, elles permettent l'interaction avec le robot A (cf point 2.4). Le robot a une vitesse et la coordonnée xd vb , les dimensions Dx et Dy de l'espace de fabrication du point x servant à déterminer les transitions : Le passage de ArrêtB1 à AvanceB1 se fait immédiatement après la mise en place du marquage sur P19. Le passage de AvanceB1 à AvanceB2 se fait au bout d'une durée vb · (Dx − xd ). Le passage de AvanceB2 à ArrêtB2 se fait au bout d'une durée v b · xd . Le passage de ArrêtB2 à ReculB1 se fait immédiatement après la mise en place du marquage sur P20. vb · xd . v b ·(Dx − Le passage de ReculB1 à ReculB2 se fait au bout d'une durée Le passage de ReculB2 à ArrêtB1 se fait au bout d'une durée xd ). Figure 2.2 Réseau de Pétri du robot B CHAPITRE 2. MODÉLISATION DU SYSTÈME AVEC LES RÉSEAUX DE PÉTRI7 2.4 Réseau de Pétri global On considère un état initial où chaque robot se trouve contre le mur et le manipulateur est en position haute. Les places AvanceA1 et ArrêtB1 sont les seules à être marquées. L'interaction entre les réseaux de Pétri des deux robots mobile se fait au moyen d'une place P11. Pour que le robot B puisse passer de l'état d'arrêt à l'état d'avance(resp. recul) il faut que P11 soit marquée ce qui permet le passage à la place P19 (resp. P20) puis vers la place permettant le mouvement. La place P11 est marquée après le passage de la place AvanceA1 vers AvanceA2 et de ReculA1 vers ReculA2. Le passage de ReculA2 vers AvanceA1 et de AvanceA2 vers ReculA1 supprime ce marquage puisque dans cette situation le robot B n'a plus le temps de passer avant le robot A. 2.4.1 Cas sans arrêt du robot B après b passages Dans cette situation on suppose que le robot B ne s'arrête contre le mur que s'il n'a pas le temps de retraverser avant le passage du robot A. Pour compter le nombre de passages du robot A (resp. B) on utilise une place compteurA (resp. compteurB). Lors du passage de la première place Avance vers la deuxième (de même avec les places de Recul) on vient ajouter une marque dans la place de compteur. Quand le nombre de marque dans compteurA est égale à a et celui de compteurB à b on vient agir sur le bras. Pour ce faire on utilise des arc pondérés de a et b pour aller des places de comptage vers la place BaisserBras, puis quand le bras est en position basse on évolue vers la place MonterBras. Pour arrêter le manipulateur, une fois rendu en position haute, on utilise une transition puits ce qui permet de démarquer la place MonterBras sans rien marquer ensuite. Cette transition n'arrête pas totalement le système puisque les deux réseau de Pétri des robots mobiles ne s'interrompent jamais. CHAPITRE 2. MODÉLISATION DU SYSTÈME AVEC LES RÉSEAUX DE PÉTRI8 Figure 2.3 Réseau de Pétri global 2.4.2 Cas sans arrêt du robot B après b passages La situation précédente pose un problème ; si la valeur de b est petite on va très rapidement se retrouver avec un excédent très important de pièces délivrées par le robot B. On peut pallier à ce problème en réalisant quelques modications sur le réseau de pétri précédent (Figure 2.3). Deux nouvelles places P21 et P22 sont créées pour y parvenir. P22 est marqué à l'état initial, cette place va servir à autoriser ou non le départ du robot B, elle est donc incluse comme entrées dans les transition de l'état d'arrêt vers l'état d'avance ou de recul. Quand compteurB contient b marques on eace ces b marques ainsi que la marque de P22 et on vient en ajouter une dans P21. C'est donc P21 et compteurA qui vont permettre de franchir la transition T13 pour marquer la place BaisserBras et marquer de nouveau P22 pour ré-autoriser le robot B à se déplacer. CHAPITRE 2. MODÉLISATION DU SYSTÈME AVEC LES RÉSEAUX DE PÉTRI9 Figure 2.4 Réseau de Pétri global avec arrêt de B après b passages 2.5 Simulation graphique des réseaux de Pétri Deux logiciels ont permis de simuler les réseaux de Pétri pour vérier leur bon fonctionnement avant de simuler sous Matlab SimHPN (pmeditor)[3] ; Permet de tracer graphiquement des réseaux de Pétri et de les simuler en mode pas à pas. Si deux transitions peuvent être franchies il demande laquelle on souhaite franchir ce qui permet de bien voir ce qui se passe. Pour y arriver il faut, dans les paramètres de chaque transition, remplir le champs signal comme suit : en où n est un nombre. PetriParc ; Moins bien pour simuler puisqu'il ne propose pas de mode pas à pas (il fait tout automatiquement et en cas de conit franchi une transition au hasard parmi les choix possibles), il a l'avantage de fournir les matrices complètes du système. Ces matrices servent à réaliser la simulation sous Matlab. Chapitre 3 Réalisation de la simulation sous Matlab 3.1 Simuler les réseaux de Pétri sous Matlab Pour pouvoir simuler un réseau de Pétri sous Matlab on utilise la représentation matricielle de celui-ci. La matrice M représente l'état présent du système ; La matrice PRE est la matrice d'incidence avant (le marquage existant avant une transition pour autoriser son passage) ; La matrice POST est la matrice d'incidence arrière (le marquage existant après le passage de la transition) ; La matrice T des transitions. La condition permettent une transition est la suivante : M (Pi ) > P RE(Pi , Tj ) Cela signie que, pour toute place Pi en entrée de la transition Tj , la transitionTj sera franchissable si le nombre de jetons présent dans chaque place Pi est supérieur ou égal au poids de l'arc reliant la place Pi à la transition Tj . Si la transition est franchissable on applique cette formule pour passer de l'état actuel à l'état suivant : M 0 (Pi ) = M (Pi ) − P RE(Pi , Tj ) + P OST (Pi , Tj ) M étant l'état actuel et M' l'état suivant. Cela signie que, pour toute place chissement de la transition Tj Pi en entrée de la transition consiste à enlever dans la place de jetons égal au poids de l'arc reliant la place toute place Tj Pi en sortie de la transition consiste à ajouter dans la place reliant la place Pi à la transition Tj Pi Pi à la transition Tj , le fran- un nombre Tj et pour , le franchissement de la transition P i un nombre de jetons égal au poids de l'arc Tj . 10 CHAPITRE 3. RÉALISATION DE LA SIMULATION SOUS MATLAB 11 Pour pouvoir gérer les temporisations dues aux temps de traversée qui sont très importantes dans la gestion du système et ne peuvent être négligée on va utiliser une deuxième matrice (Mt) décrivant l'état du système. Au moment de franchir la transition on va appliquer la formule suivante : M t(Pi ) = M (Pi ) − P RE(Pi , Tj ) + P OST (Pi , Tj ) Si une place P i temporisée devient active on déclenche le chronomètre, quand la durée programmée est passée on applique cette règle : M 0 (Pi ) = M t(Pi ) et M t(Pi ) = 0 Il devient donc possible de franchir la transition suivante si les conditions sont réunies. 3.2 Gestion de l'achage Le système programmé tourne en boucle, si une place correspondant à un déplacement est active on vient déplacer de une unité la coordonnée (abscisse ou ordonnée suivant le robot considéré) et réacher les robots sur le graphique. L'achage des robots est géré par la toolbox rvctools de Matlab[4]. Grâce à cet outil il sut d'entrer la matrice des coordonnées (x,y et angle) et la couleur souhaitée du robot pour générer son achage. Cette manipulation se fait au moyen de l'instruction suivante : plot_vehicle(A, 'r') ; Dans ce cas A est la matrice de coordonnées et 'r ' correspond à la couleur rouge. Chapitre 4 Conclusion Les trois mois qu'on duré le projet m'ont permis de réaliser un réseau de Pétri et une simulation sous Matlab fonctionnels et correspondant au cahier des charges. Le projet aura malheureusement été trop court pour avoir le temps de passer à l'étape suivante, à savoir l'implémentation du programme sur les robots pour simuler le système en conditions réelles. Ce stage m'aura permis de découvrir et d'apprendre à me servir des réseaux de Pétri et de Matlab ce qui devrait me resservir à l'avenir. 12 Bibliographie [1] SCORLETTI G. et BINET G. Réseaux de Pétri. [document électro- nique]. Caen, Université de Caen/Basse Normandie U.F.R. Sciences Caen, 2006, http ://www.metz.supelec.fr/metz/personnel/vialle/course/CNAMACCOV-NFP103/extern-doc/RdP/Cours_Petri_etudiant_GS_2006.pdf [2] Université d'Hambourg. Welcome to the Petri Nets World. [en ligne]. http ://www.informatik.uni-hamburg.de/TGI/PetriNets/ [10/05/2012] [3] GISED(Group of Discrete Event Systems Engineering). SinHPN. [en ligne]. http ://webdiis.unizar.es/GISED/ ?q=tool/simhpn [05/06/2012] [4] CORKE Peter. Robotics Toolbox. [en corke.com/Robotics_Toolbox.html [15/06/2012] 13 ligne]. http ://peter- Annexe : Code Matlab du système 14 %Efface les données en mémoire clear; %initialisation grille affichage xg = [5 5 3.14/2]; clf axis([0 100 0 100]); hold on xyzlabel grid on xa = 25; ya = 75; xb = 5; yb = 40; xc = 50; yc =60; radius = 4; %initialisation PRE = [1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 POST = [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 2; 0; 0; 0; 0; 0; 0; 1]; 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1; 0]; TEXT = ['AvanceB2 '; 'ArretB1 '; 'ReculB2 '; 'ReculB1 '; 'ArretB2 '; 'ReculA1 '; 'AvanceA2 '; 'AvanceA1 '; 'ReculA2 '; 'P11 '; 'CompteurA '; 'CompteurB '; 'BaisserBras'; 'MonterBras '; 'AvanceB1 '; 'P19 '; 'P20 '; 'P21 '; 'P22 ']; T = [2; 0; 3; 2; 0; 5; 5; 6; 6; 0; 0; 0; 3; 3; 3; 0; 0; 0; 0]; %situation initiale M0 = [0; 1; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1]; M = [0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0]; pause on; tour = 1; Incidence = -PRE+POST; PMt = M; %démarrage du cyale t0=clock; Mt = M0; %démarrage des tempo sur la situation initiale for i=1:19 switch(i) case(1) if Mt(i,1)>PMt(i,1) t1 = clock; PMt(i,1) = Mt(i,1); end case(3) if Mt(i,1)>PMt(i,1) t3 = clock; PMt(i,1) = Mt(i,1); end case(4) if Mt(i,1)>PMt(i,1) t4 = clock; PMt(i,1) = Mt(i,1); end case(6) if Mt(i,1)>PMt(i,1) t6 = clock; PMt(i,1) = Mt(i,1); end case(7) if Mt(i,1)>PMt(i,1) t7 = clock; PMt(i,1) = Mt(i,1); end case(8) if Mt(i,1)>PMt(i,1) t8 = clock; PMt(i,1) = Mt(i,1); end case(9) if Mt(i,1)>PMt(i,1) t9 = clock; PMt(i,1) = Mt(i,1); end case(13) if Mt(i,1)>PMt(i,1) t13 = clock; PMt(i,1) = Mt(i,1); end case(14) if Mt(i,1)>PMt(i,1) t14 = clock; PMt(i,1) = Mt(i,1); end case(15) if Mt(i,1)>PMt(i,1) t15 = clock; PMt(i,1) = Mt(i,1); end otherwise PMt(i,1) = Mt(i,1); end end while tour<=1000 %affichage robot %avance A = [xa ya -pi/2]; B = [xb yb 0]; C = [xc yc -pi/2]; if (M(7,1)==1 || Mt(7,1)==1 || M(8,1)==1 || Mt(8,1)==1) A = [xa ya -pi/2]; ya = ya-1 ; end if (M(1,1)==1 || Mt(1,1)==1 || M(15,1)==1 || Mt(15,1)==1) B = [xb yb 0]; xb = xb+1 ; end %recul if (M(9,1)==1 || Mt(9,1)==1 || M(6,1)==1 || Mt(6,1)==1) A = [xa ya pi/2]; ya = ya+1 ; end if (M(3,1)==1 || Mt(3,1)==1 || M(4,1)==1 || Mt(4,1)==1) B = [xb yb -pi]; xb = xb-1 ; end %bras if (M(13,1)==1 || Mt(13,1)==1) C = [xc yc -pi/2]; yc = yc-1 ; end if (M(14,1)==1 || Mt(14,1)==1) C = [xc yc -pi/2]; yc = yc+1 ; end %comptage des passages du robot B if M(12,1) == 1 valeurB = 1; else if M(18,1) == 1 valeurB = 2; else valeurB = 0; end end clf axis([0 100 0 100]); hold on xyzlabel grid on %affichage des véhicules plot_vehicle(A, 'r'); plot_vehicle(B, 'g'); plot_vehicle(C, 'b'); plot(25,40,'co'); %affichage des légendes et nombre de passages des robots uicontrol('style','text','position',[155 357 15 15],'string',num2str(M(11,1))); uicontrol('style','text','position',[285 357 15 15],'string',num2str(valeurB)); text(3,95,'rouge A'); text(3,92,'compteur'); text(33,95,'vert B'); text(33,92,'compteur'); text(63,92,'manipulateur'); text(63,95,'bleu'); %test des chronos et passage de matrice temporaire Mt à la matrice M for i=1:19 switch(i) case(1) if ((Mt(i,1) == 1)&&(etime(clock,t1)>=T(i,1)))||(Mt(i,1) == 0) M(i,1) = Mt(i,1); end case(3) if ((Mt(i,1) == 1)&&(etime(clock,t3)>=T(i,1)))||(Mt(i,1) == 0) M(i,1) = Mt(i,1); end case(4) if ((Mt(i,1) M(i,1) = end case(6) if ((Mt(i,1) M(i,1) = end case(7) if ((Mt(i,1) M(i,1) = end case(8) if ((Mt(i,1) M(i,1) = end case(9) if ((Mt(i,1) M(i,1) = end case(13) if ((Mt(i,1) == 1)&&(etime(clock,t4)>=T(i,1)))||(Mt(i,1) == 0) Mt(i,1); == 1)&&(etime(clock,t6)>=T(i,1)))||(Mt(i,1) == 0) Mt(i,1); == 1)&&(etime(clock,t7)>=T(i,1)))||(Mt(i,1) == 0) Mt(i,1); == 1)&&(etime(clock,t8)>=T(i,1)))||(Mt(i,1) == 0) Mt(i,1); == 1)&&(etime(clock,t9)>=T(i,1)))||(Mt(i,1) == 0) Mt(i,1); == 1)&&(etime(clock,t13)>=T(i,1)))||(Mt(i,1) == 0) M(i,1) = Mt(i,1); end case(14) if ((Mt(i,1) == 1)&&(etime(clock,t14)>=T(i,1)))||(Mt(i,1) == 0) M(i,1) = Mt(i,1); end case(15) if ((Mt(i,1) == 1)&&(etime(clock,t15)>=T(i,1)))||(Mt(i,1) == 0) M(i,1) = Mt(i,1); end otherwise M(i,1) = Mt(i,1); end end %test et passage à l'état suivant dans matrice temporaire Mt avec déclenchement des chronos for j=1:16 if all(M >= PRE(:,j)) for i=1:19 Mt(i,1) = Mt(i,1)+Incidence(i,j); switch(i) case(1) if Mt(i,1)>PMt(i,1) t1 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(3) if Mt(i,1)>PMt(i,1) t3 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(4) if Mt(i,1)>PMt(i,1) t4 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(6) if Mt(i,1)>PMt(i,1) t6 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(7) if Mt(i,1)>PMt(i,1) t7 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(8) if Mt(i,1)>PMt(i,1) t8 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(9) if Mt(i,1)>PMt(i,1) t9 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(13) if Mt(i,1)>PMt(i,1) t13 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(14) if Mt(i,1)>PMt(i,1) t14 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end case(15) if Mt(i,1)>PMt(i,1) t15 = clock; PMt(i,1) = Mt(i,1); end if Mt(i,1)== 0 M(i,1) = Mt(i,1); PMt(i,1) = Mt(i,1); end otherwise PMt(i,1) = Mt(i,1); M(i,1) = Mt (i,1); end end end end tour = tour+1; pause(0.1); end