Programmation – AI Controller

7 10 2007

Rentrons un peu dans les détails (mais pas trop) du bloc “Artificial Intelligence” et “Main” présenté brièvement dans l’article précédent. L’architecture ci-dessous résume le fonctionnement, les flèches bleus du sommet correspondant aux accès avec la librobot (actions traduites par des fonctions haut-niveaux et les événements en retour sous forme de callback).

Architecture Logicielle - AI Controller

Mais commençons par le début. Les tactiques sont écrites dans des fichiers XML. Ainsi plusieurs tactiques peuvent être préparées et même combinées. Il n’est pas nécessaire d’effectuer la moindre manipulation dans le code pour changer le comportement du robot. Puis le (ou les) fichier XML est traduit par un “parser” allégé (cf. xmlparser & xmllexer de la libxine). Et le bloc “Rules loader” se charge de traiter les données pour les rendre compréhensibles par le contrôleur de l’AI “AI Controller”.

Le contrôleur a accès à deux types d’actions pour agir sur le comportement du robot. Tout d’abord il a accès aux actions de haut-niveaux directement compréhensibles par la librobot. Et deuxièmement il a accès à des fonctions que je nommerais de très-haut-niveaux qui utilisent les fonctions de haut-niveaux. Cette séparation entre les deux types de fonctions se fait au niveau du gros bloc “Thread for send actions”. Celui-ci demande une analyse poussée et nous y reviendrons dans un autre article.

Concernant le second gros bloc, il représente le callback pour tous les événements retournés par la librobot.

FIFO & LIFO

Trois piles “stacks” cohabitent dans ce système. Il y a un premier stack dans lequel les actions à exécuter sont stockées à la manière d’un FIFO lorsque l’AI Controller donne un ordre et sous forme de LIFO lorsque le Thread donne également un ordre. La raison est triviale car le thread lit le FIFO et exécute le premier ordre, mais en fonction du niveau de l’ordre celui-ci aura besoin d’actions et donc d’une réponse relativement rapidement. Il est peut-être plus judicieux de séparer ce mécanisme en plusieurs stacks (au moins deux). Si nécessaire cela sera fait en temps voulu.

Concernant les deux stacks rattachés au callback, ici il y a une séparation entre les réponses pour l’AI Controller et celles pour le Thread.

Boucle

La boucle représentée dans le bloc du contrôleur est en fait la boucle principale du programme et surtout celle qui enverra les actions principales au robot. Concernant la boucle du bloc Thread, elle est également principale mais par rapport au thread. Tant que le robot est sous tension, ces deux boucle sont considérées comme infinies même si le robot doit se stopper après les 90 secondes de jeu.

Team programmation


Actions

Information

Laisser un commentaire