Notre implémentation utilise un mélange des langages C++ et
Scheme.
La motivation du choix du langage C++ pour le corps
du programme est un compromis entre rapidité d'exécution (le programme
doit être capable de se comporter en temps réel) et confort de
programmation. Le langage C++ offre des possibilités objet
intéressantes, utiles dans l'implémentation d'un système multi-agents
[#!stroustrup-1999!#]: les fonctionnalités objet standard (héritage,
surclassage, encapsulation, etc.), une bibliothèque de manipulation
de données de haut niveau (STL), un symbolisme de niveau
intermédiaire, etc. La nature intrinsèquement modulaire de
l'architecture d'un agent impose de fait l'utilisation d'un langage
objet, une partie de la méthodologie objet étant pratiquement
identique à celle de la méthodologie agent [#!wooldridge-1998!#].
Par ailleurs, malgré des déficiences connues dans l'implémentation de
certaines composantes de la norme C++, le compilateur g++
de GNU fournit un bon environnement de développement
multi-plates-formes. De plus et ce n'est pas une mince motivation,
l'utilisation du langage C++ nous permet de réutiliser plus étroitement
les composants définis par l'équipe CMU-2000.
La motivation de l'utilisation du langage Scheme est l'ajout de fonctionnalités de script, d'évaluation à la volée d'instructions symboliques de haut niveau et de manipulation de structures de données complexes par les agents composant l'équipe de football simulée. Cette fonctionnalité est déjà utilisée lors du démarrage du programme (lecture d'un fichier d'initialisation), où elle permet de faire exécuter des opérations initiales à chacun des agents (se placer sur le terrain en fonction de la stratégie d'équipe par exemple) et en cours de jeu à la lecture de l'entrée standard. Nous envisageons de plus l'utilisation de ce langage de script pour symboliser des actes de langage des agents de notre système, tout comme pour formaliser les arbres décisionnels des organes de décision. Le choix de Scheme en tant que langage d'extension interprété a été effectué sur la base de notre expérience avec ce langage, sur les possibilités offertes (aspect fonctionnel, représentation de structures de données complexes, etc.) mais aussi sur l'implémentation Scheme de GNU (guile), dont la qualité est un argument déterminant. Guile est composé d'une bibliothèque de primitives permettant d'inclure un interpréteur Scheme dans un programme compilé (C, C++, etc.). Cette inclusion permet d'accéder réciproquement aux données de l'interpréteur Scheme et du programme et de définir des méthodes Scheme exécutant du code compilé. Une problématique reste cependant soulevée: une correspondance fine entre la structure objet de notre programme et le paradigme fonctionnel du langage Scheme reste à implémenter.