WinGineer
Esiea In'tech Info
 
Mon espace candidat
Nom d'Utilisateur
Mot de passe

Mot de Passe oublié ?
 
Les inscriptions sont terminées
 
A gagner avec Wingineer

1er prix
100% des frais de 5 ans de
scolarité !


2ème prix
Une bourse couvrant 50% des frais !


3ème prix
Une bourse couvrant 25% des frais !

Stratégies générales

L'environnement est constitué d'agents, ils peuvent être de plusieurs types (appellés breed dans le langage Netlogo), le type général étant turtles. Ainsi tous les agents sont des turtles à la base, mais ont aussi un type plus spécifique.

Comme vous l'avez vu dans les parties concernant le pilotage des tanks et des buldozers, les seules commandes que vous pouvez donner à vos agents sont :

  1. Avancer : la commande est " move ".
  2. Tirer (pour les tanks) : la commande est " fire ".
  3. Construire (pour les buldozers) : la commande est " build ".

Vous devez donc analyser au mieux l'environnement qui entoure votre agent (enemis aux alentours, obstacles, drapeaux...) ainsi que votre état actuel (bouclier et barre de chauffe pour les tanks) pour savoir quelle stratégie adopter.

 

Les agents et les variables à connaitre

 

Voici la liste des agents que vous aurez surement besoin d'utiliser :

  1. enemy-flag désigne le drapeau enemi et friend-flag désigne le drapeau de son équipe.
  2. tanks désigne les tanks.
  3. bulldozers désigne les bulldozers.
  4. rockets désigne les missiles.
  5. bunkers désigne les murs qui ont pour rôle de bloquer les missiles.
  6. bonus désigne les bonus.

Vous pouvez donc interagir avec ces différents agents pour faire évoluer votre stratégie.

 

Voici maintenant les principales variables concernant vos agents :

  1. shield vous indique l'état du bouclier de votre agent (compris entre 0 et 100).
  2. heat vous indique l'état de la barre de chauffe de votre tank (compris entre 0 et 50, vous ne pouvez plus tirer au dela de 50).
  3. id vous indique le numéro de votre agent.
  4. memory qui est une variable que vous pouvez modifier à votre guise pour enregistrer votre cible par exemple !!!

 

Exemples :

 

Pour compter le nombre de tanks sur la carte : 

let nbTank count tanks

 

Pour compter le nombre de tanks enemis dans un rayon de 5 autour de vous : 

let nbTankProche count tanks in-radius 5 with [enemy? = true]

 

Pour compter les tanks allié, il suffit de remplacer "true" par "false".   Pour obtenir l'état du bouclier de l'enemi le plus proche de vous:  

let etat [shield] of min-one-of enemies [distance myself]

 

Avoir le choix !

 

Le mot clé if (qui se traduit par "si") vous permet d'effectuer une action seulement si un test est vérifié, vous pouvez par exemple tirer si votre barre de chauffe est inférieure à 20.

 

Exemple : Vous pouvez choisir de vous raprocher de votre drapeau si vous êtes trop loin :

 

if distance friend-flag > 15

[

face friend-flag

move

]


Le mot clé ifelse permet quand à lui d'effectuer une action si la condition est vérifiée et une autre dans le cas contraire.

 

Exemple : Vous tirer 1 missile si votre barre de chauffe est inférieur à 20 sinon vous vous déplacer vers le drapeau enemi.

 

ifelse heat < 20

[                        ;si

    fire 1

]

[                        ;sinon

    face enemy-flag

    move

]


 

Se repérer

 

Il est important de bien se repérer dans la map pour savoir quels sont les agents les plus proches et pour réagir en conséquence.

 

Le mot clé in-radius permet d'analyser le périmètre autour de l'agent, vous pouvez par exemple rechercher la présence de missile enemis autour de votre agent pour savoir s'il est en danger ou non.

 

Exemple :

let danger one-of rockets in-radius 10

if danger != nobody 
[
   face danger
   right 180
   move
]

 

Explications :

Ce code crée une variable "danger" qui contient un des missiles se trouvant dans un rayon de 10. Si il n'y a aucun missile ce rayon, la variable "danger" sera égale à nobody. C'est pour cela que l'on utilise un if, car vous ne pouvez pas faire face à "personne" ! Si vous ne faite pas de if, Netlogo vous affichera un message d'erreur en vous indiquant que vous ne pouvez pas faire face à "nobody".

 

Vous pouvez également utiliser le mot clé in-cone qui permet d'analyser un cône se situant devant l'agent.

Vous devez cependant spécifier deux paramètres pour utiliser in-cone :

1. la distance dans laquelle vous voulez regarder

2. l'angle dans lequel vous voulez regarder

 

Reprenons le code précédent mais regardons cette fois dans un cône de 10 et dans un angle de 90 degrés si il y a un enemi pour lui tirer un missile: 

let danger one-of tanks in-cone 10 90 with[enemy? = true]

if danger != nobody 
[
   face danger
   right 180
   move
]

 

Exemples complet de code

Codes de tanks :

 

tank kamikaze :

face enemy-flag
fire 1
ifelse safe-move?

[move]

[

face safer-place

move

]

 

Explication : Ce tank fait face au drapeau enemi et ne tire jamais plus de un missile. Ensuite si il n'y a pas d'explosion devant lui il avance sinon il fait face à un endroit moins dangereux et avance.

 

tank nettoyeur de bunkers :

face enemy-flag
 

if one-of bunkers in-cone 20 30 != nobody [ fire 1 ]

ifelse safe-move?

[move]

[

face safer-place

move

]

 

Explication : Ce tank fait face au drapeau enemi. Puis si il y a des bunkers en face de lui à une distance de 20 et dans un angle de 30 degrés, il tire dessus. Sinon si il peut bouger sans risque, il avance et sinon il va vers un endroit plus sur.

 

tank prudent :

face enemy-flag
let danger enemies in-cone 25 45


if any? danger

[
  face one-of danger
  if safe-fire? [ fire 2 ]
  right 45
]


if safe-fire?

[  fire 1]

 

ifelse safe-move?

[  move]

[

   face safer-place

   move

]

 

Explications : Ce tank fuit les ennemis qui sont devant lui (cône de 25 cases de rayon et 45 degrés d'angle), ...non sans leur avoir envoyer une rocket avant de changer de direction. Par défaut il tire devant lui un missile (pour s'ouvrir la voie).

 

Note : ce tank est assez lent (car il fait un détour dès qu'il croise un ennemi), et n'ouvre pas vraiment de voies pour les autres, mais, sur la durée , il a plus de chances d'arriver au but !

 

tank de défense fixe :

face friend-flag
right 180


let d enemies in-cone 20 200
let r rockets in-cone 20 200 with [enemy?]


if safe-fire?

[
if any? r [ face one-of r fire-all]
if any? d [ face one-of d fire-all]
]

 

Explications : Ce tank ne bouge pas, il faut le positionner assez près du drapeau, dès qu'il y a un danger devant lui ou sur ses cotés (200 degrés), que ce soit un ennemi ou une rocket (ennemies), il tire dessus. Le fait qu'il ne bouge pas et ne s'occupe que de ce qui est devant lui et sur les coté lui évite de tirer sur son propre drapeau... Son coté statique le rend par contre assez vulnérable...

 

 

Codes de bulldozer :

 

bulldozer constructeur de remparts :

face friend-flag
right 90
build
move

 

Explication : Ce bulldozer construit un cercle de bunkers autour de son drapeau afin de le protéger.

 

bulldozer destructeur de remparts :

ifelse distance enemy-flag < 20

[

  face min-one-of bunkers [distance myself]

  move

]

[

  face enemy-flag

  move

]

 

 

Explication : Ce bulldozer se dirige vers le drapeau enemi puis il détruit les bunkers aux alentour. Il permet de supprimer les bunkers que construit le code précédent.

 

 

Conclusion

Vous avez là déjà quelques bases pour élaborer des stratégies intéressantes même si ces codes restent trés basique, à vous de les combiner et de les améliorer .

 

Vous trouverez encore bien d'autres aides et conseils sur le forum du site Wingineer. Vous pourrez trouver un dictionnaire des fonctions disponible en Netlogo en explorant le menu « help » de l'interface ou à cette adresse :http://ccl.northwestern.edu/netlogo/docs/


 

Attention bien sûr à bien respecter la règle du jeu :

Vous êtes autorisé à lire toute information provenant de la simulation, vous êtes autorisé à agir sur la simulation mais uniquement avec les instructions : move, fire, right, left, face, appliquées à vos robots. Bien sûr vous avez le droit d'utiliser toutes les instructions de Netlogo vous aidant à produire les décisions de votre robot. Vous ne devez par contre en aucun cas agir directement sur le jeux (en essayant de modifier directement votre score, par exemple), cela serait considéré comme de la triche, votre code serait alors supprimé et votre score mis à 0 jusqu'à soumission d'un nouveau code respectant les règles.