WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Stratégie de rendez-vous dans les systèmes multi-agents

( Télécharger le fichier original )
par Imane Méziane Tani
Université Abou bekr Belkaid - Ingénieur en informatique 2007
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

3.2.2 Implémentation des algorithmes et tracé des trajectoires sous Matlab

Nous avons implémenté avec Matlab [13] les fonctions des différentes méthodes correspondant aux deux approches dont la poursuite cyclique et le rapetissement de courbe. Dans chacune d'elles, nous avons tracé des graphes affichant les trajectoires, effectuées par un groupe d'agents, pour vérifier leur convergence au point centre de gravité.

Poursuite cyclique

Pour effectuer cette stratégie, les agents évoluent selon le système ci-dessous avec la matrice A qui change suivant la méthode.

z_ =Az (3.1)

Remarque 3.1 Il existe une deuxième méthode pour la résolution du système 3.1, qui consiste à trouver itérativement les positions z telles que :

z = expm(At ).z0

Où expm(A) est la matrice exponentielle de A, et est calculée en utilisant la formule suivante :

expm(A) = V diag(exp(diag(D))) V ~1

Avec D : un vecteur constitué de l'ensemble des valeurs propres, et V: la matrice des vecteurs propres correspondant.

Ceci revient à calculer les valeurs et les vecteurs propres d'une matrice de dimension n, et donc de résoudre une équation et un système d'équation de l'ordre n. Ce dernier pouvant être très grand, il devient très difficile de résoudre le système. En utilisant matlab, ceci fut simple à implémenter car la fonction expm est prédéfinie. Mais pour programmer la classe Java qui le résout, l'exécution de la fonction aura une très forte complexité dans l'utilisation des ressources (temps et espace mémoire). C'est pour cela que nous avons employé une méthode plus simple qui est celle de Runge Kutta d'ordre 4.

Poursuite cyclique traditionnelle Dans cette méthode, la matrice A de la formule 3.1 est une matrice circulante de la forme : A1 = circ(-1 , 1,0,.. . , 0), et l'algorithme est le suivant :

Algorithme 3.2

Début

% n est le nombre d'agents

% z est un tableau contenant les positions des agents % zn est le centre des agents

A1 = zero (n); % une matrice nulle de dimension n

Pour i = 0 à n - 1 % Construire la matrice circulante
j = (i+1) mod n;

A1(i,i) = -1;

A1(i,j) = 1;

fin pour

zn = mean(z) % la moyenne du tableau z

h = 0.1;

FIG. 3-1 - 4 agents dans une poursuite cyclique traditionnelle

Tant que (z =6 zn) % les agents ne sont pas au centre

wi = Al * z;

w2=A1 *(z+ (h/6) *wl); w3=Ai *(z+ (h/6) *w2); w4=Al *(z+h*w3);

z = z +((h/6) * (w1+2*w2+2*w3+w4));

fin tant que

fin.

Implémentant plus formellement cet algorithme sous matlab, et traçant un plot des positions "z", nous obtenons la courbe dans la figure 3-1 pour n = 4:

Poursuite cyclique hiérarchique Dans ce schéma, la matrice AL (L étant le nombre de couches) est circulante à blocs et est obtenue d'une manière récursive à partir de la formule 2.15.

L'algorithme de la poursuite cyclique hiérarchique est le même que celui de la traditionnelle avec une différence dans le calcul de la matrice A.

Algorithme 3.3 Début ...

% L est le nombre de couches.

% ni est le nombre d'agents de la première couche.

nm = L pn;

Am = circulante(L,n,n1,nm); zn = mean(z);

...

fin.

Et voici un pseudo code de la fonction circulante(L,n,n1,nm) :

Code 3.1 Fonction circulante(m,n,n1,nm)

début

si (m = 1) % la matrice A1

A = zero(n1); %la matrice nulle

pour i=0 à n1-1

j = (i+1) mod n;

A1(i,i) = -1;

A1(i,j) = 1;

fin pour

sinon

size = nmm~1 ;

Id = eye(size); % La matrice identité de dimension size mat=circulante(m-1,n,n1,nm) - Id % La récursivité pour calculer Am-1
size = nmm;

A =zeros(size2, size2);

pour cpt=0 à ((size2/size)-1)

pour i=0 à size-1

pour j=0 à size-1

k = i+size*cpt;

l =j+size*cpt;

r = (l + size) mod size2 ;

A(k,l)=mat(i,j); % Am-1 - I

A(k,r)=Id(i,j); % I

fin pour

fin pour

fin pour

FIG. 3-2 - 16 agents dans une poursuite cyclique hiérarchique à 4 couches

fin.

Sous Matlab, nous avons obtenu la courbe dans la figure 3-2 traçant les trajectoires des agents dans une poursuite hiérarchique à L = 4 couches, et n = 16 agents.

Poursuite cyclique à L liens Ce schéma est aussi résolu avec l'équation 3.1, et la matrice correspondante AL est calculée à partir de la formule 2.17. L'algorithme qui implémentera cette méthode sera le même que la méthode précédente, et un pseudo code sous matlab décrivant la fonction de calcul de la matrice AL est la suivant :

Code 3.2

Début

A=zeros(n,n); % Initialisation de la matrice

pour k=0 à n-1

r = (k+1) mod n;

A (k, k) =-L ;

pour cpt=0 à L-1

r = (r+cpt) mod n;

A(k,r2)=1;

fin pour

fin pour

FIG. 3-3 - 8 agents dans une poursuite cyclique à 4 liens

A=(1/L) *A Fin.

Le graphe traçant les trajectoires d'un groupe de 8 agents effectuant une poursuite cyclique à 4 liens est dans la figure 3-3.

Rapetissement de polygone

Dans cette approche, à chaque instant "t", la position d'un agent est calculée à partir des positions précédentes de ses deux agents voisins. L'algorithme suivant trace les trajectoires des agents utilisant la technique de la courbure de Menger-Melnikov ou celle du schéma linéaire. Il est le même pour les deux méthodes, la différence réside dans le calcul de la fonction C de la formule 3.2. La résolution se fait toujours en utilisant la méthode de Runge Kutta.

z_ = C(zi_1,zi,zi+1) (3.2)

Algorithme 3.4

De but

% n est le nombre d'agents

% z est un tableau contenant les positions des agents à l'instant t % zprec est le tableau qui contient les positions à l'instant t-1

% zn est le centre des agents

zn = mean(z) % la moyenne du tableau z

h = 0.1;

Tant que (toutes les positions =6 centre)

pour chaque agent

zprec(i) = z(i);

w1 = Ci( zprec(j), zprec(i), zprec(k));

w = Ci( zprec(j)+(h/ )*w1, zprec(i)+(h/ )*w1, zprec(k)+(h/ )*w1);

w3 = Ci(zprec(j) + (h/ ) *w , zprec(i) + (h/ ) *w ,zprec(k) +(h/ ) *w );

w4 = Ci(zprec(j)+h*w3, zprec(i)+h *w3,zprec(k)+h*w3);

z(i) = zprec(i) + ((h/6) * (w1 + *w + *w3+w4));

finPour

fin tant que

fin.

Rapetissement par Menger-melnikov Pour cette méthode, comme nous avons vu au chapitre précédent la fonction C est calculée comme suit :

(zi_1 - zi - zi+1 - zi ) 1

ci(zi_1, zi, zi+1) = zi_1 - zi zi+1 - zi zi_1 - zi+1

Nous traçons alors le graphe qui décrit le rapetissement du polygone formé par les agents, ainsi que les trajectoires accomplies par les agents lors de leur convergence au centre. Voir la figure 3-4

Schéma linéaire Dans ce cas, la fonction C est définie comme suit, et les trajectoires, tracées par 16 agents mobiles effectuant un rapetissement de polygone, sont dessinées dans la figure 3-5:

1 1

ci(zi_1,zi,zi+1) = 2(zi+1 -zi)+ 2(zi_1 -zi)

Remarque 3.2 Les graphes seront commentés au chapitre suivant, où nous donnerons tous les résultats déduits sous Matlab, en parallèle avec ceux obtenus par la simulation.

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Il faudrait pour le bonheur des états que les philosophes fussent roi ou que les rois fussent philosophes"   Platon