Master Informatique 1ère année:

Programmation orientée agents (FMIN207)

Resp: Jacques Ferber,

TP 7 - Warbot - Actions collectives

 

proposé par Jacques Ferber - Decembre 2011

 

 

Récupérez le dernier code de Warlogo ici....

1. Actions collectives

Définir un mécanisme d'actions collectives, dans lequel les explorateurs envoient des messages soit à la base soit aux lanceurs de missiles, pour leur dire d'attaquer la base. Vous pouvez imaginer toutes les solutions possibles..

Voici comment utiliser les messages dans Warlogo (on en trouvera un exemple

to action-si-message 
	let msg [] 
	let performatif [] 
	let contenu []
	let emetteur []
	while [not empty? incoming-queue] 
		[set msg get-message
   	set performatif get-performative msg 
		set contenu get-content msg
		set emetteur get-sender msg
;; faire l'action que l'on désire à partir du performatif du message et son contenu
;; attention le "sender" est codé dans le message comme un nombre correspondant à la tortue... d'où le "turtle" devant le msg..
       ]
end

Comme vous le verrez dans le code du lanceur de missile de l'équipe T2, les explorateurs envoient un message aux lanceurs de missile d'aller vers l'endroit où ils se trouvent dès qu'ils voient la base.. Mais cela n'est pas efficace:

  1. Les explorateurs sont trop loin de la base pour que l'endroit qu'ils proposent soit utilisé comme point de référence par les lanceurs de missiles.
  2. Les messages sont pris en compte à un moment donné, mais les lanceurs de missiles ne s'engagent pas dans leur tâche!! Ils avancent tant qu'ils reçoivent des messages et reprennent leur comportement initiale..

2. Tactique de défense de la base

Développez une tactique de défense de la base... Cela suppose que certains lanceurs de missiles restent près de la base pendant que d'autres vont attaquer.. Pour cela la base va recruter un certain nombre de défenseurs de missiles.. Les n premiers qui répondent à la demande..
Pour cela vous aller implémenter le réseau contractuel qui est présenté dans le cours, et dont voici le diagramme UML:

 

C'est la base qui va initialiser le protocole.. Les lanceurs de missiles recrutés restent près de la base, les autres vont attaquer.

Lorsque vous créez de nouveau lanceurs de missiles ils peuvent devenir soit des défenseurs soit des attaquants.

 

2. Réseau contractuel et attaque collective

Maintenant on désire qu'un explorateur particulier lance une attaque avec p lanceurs de missiles. C'est lui qui va devenir le leader du recrutement de ces lanceurs de missile. Il ne lancera son opération que s'il a recruté au moins p lanceurs de missiles. Pour cela il faut aussi qu'il sache où se trouve la base!!.. Cette information peut lui être apportée par un autre explorateur.

Comme il voit plus loin que les lanceurs de missiles, il peut guider les lanceurs de missiles pour réaliser cette opération (rappelez vous vos cours de trigonométrie :-) )

Eventuellement, on pourrait avoir plusieurs explorateurs qui deviennent leaders de plusieurs groupes créés ainsi..