ContextAA
Architecture d'Agents Autonomes guidée par le ContexteUne plateforme multi-agents répartie pour l'espace intelligent ouvert — où des agents autonomes migrent entre nœuds, se coordonnent par le Contexte, et maintiennent leur service même face à l'instabilité réseau, aux contraintes de ressources et à la mobilité des appareils.
Les environnements intelligents sont répartis, mobiles et à ressources contraintes.
ContextAA est conçu exactement pour cela.
L'intergiciel traditionnel suppose des réseaux stables, des nœuds fixes et des développeurs capables de gérer la concurrence. Dans l'espace intelligent ouvert — où les appareils sont hétérogènes, la connectivité intermittente et l'expertise souvent non-informatique — ces hypothèses s'effondrent. ContextAA les remplace par une architecture agents-Contexte où le Contexte est à la fois le modèle de données et l'interface de programmation.
« L'architecture, c'est une tournure d'esprit et non un métier. » ContextAA étend cette idée au logiciel : une tournure d'esprit architecturale pour les espaces intelligents, où le Contexte guide tout — déploiement, coordination et cognition.
— Le Corbusier / Lettre · adapté pour ContextAA · AMI-Lab · Université de SherbrookeToute information — lectures de capteurs, état d'agent, requêtes, réponses — est représentée comme Contexte. Une seule abstraction pour tout gérer.
Les Agents migrent d'Hôte en Hôte au gré des ressources disponibles, en emportant leur état contextuel. La continuité de service est un objectif de conception de premier plan.
Les Agents du domaine ne gèrent jamais de fils ni de verrous. L'isolation face au réseau et à la concurrence leur permet de raisonner sur la seule logique métier.
Un Hôte complet avec tous ses Agents standards et une dizaine d'Agents du domaine consomme moins de 1 Mo de RAM — moins qu'un « Hello World » dans la plupart des langages courants.
Les quatre composants fondateurs de ContextAA
L'architecture répartie de ContextAA repose sur quatre éléments principaux qui assurent ensemble le déploiement, l'exécution, la communication et la gestion du Contexte sur des nœuds fixes ou mobiles d'un réseau ouvert.
CYCLE D'EXÉCUTION — HÔTE · GESTIONNAIRE D'AGENTS · AGENTS
Processus déployé sur un nœud fixe ou mobile. L'Hôte joue le rôle d'unité de déploiement, de conteneur d'Agents, de gestionnaire du cycle de vie, et de strate isolante entre les Agents, le réseau et la concurrence. Comparable à un Bundle OSGi, mais entièrement guidé par le Contexte.
Deux catégories : les Agents standards (privilégiés, spécifiques à la plateforme, gèrent les services de l'Hôte) et les Agents du domaine (contextifiés, portables, expriment la logique métier). Tous partagent la même interface de cycle de vie.
Satellites concurrents d'un Hôte prenant en charge les opérations bloquantes ou asynchrones : le Communicateur, les Découvreurs (topologie réseau), les Émetteurs (Contexte sortant) et les Récepteurs (Contexte entrant). Ils interagissent avec les Agents exclusivement par des canaux de Contexte.
Le Contexte est l'unité fondamentale de données — une structure nommée, hiérarchique et auto-descriptive. Les canaux de Contexte sont des liens synchronisés et unidirectionnels entre objets autonomes et Agents standards, garantissant des échanges non bloquants et sans condition de course en périphérie de l'Hôte.
Chaque agent a dispose d'un espace contextuel Sa ; chaque Hôte h possède Sh ⊃ ∪Sa. Les Agents du domaine n'interagissent qu'avec leur propre Sa. Cette stratification assure à la fois l'isolement (confidentialité par Agent) et la coordination (partage au niveau de l'Hôte).
Chaque Hôte maintient Nh — une description contextifiée de ses Hôtes voisins. Les Découvreurs mettent à jour Nh de façon asynchrone ; les Agents opèrent sur cet instantané quasi-courant, ce qui leur assure un fonctionnement robuste sans exiger de cohérence globale ni d'horloges synchronisées.
Le Contexte est à la fois donnée et programme
Dans ContextAA, le Contexte n'est pas simplement un format de données — c'est l'interface de programmation. Requêtes, réponses, comportements d'agents et transformations sont tous exprimés en Contexte. Cette « contextification » rend les agents entièrement sérialisables, migrables et raisonnables sans nécessiter aucun environnement d'exécution propre à un langage.
La mise en correspondance de Contextes opère à trois niveaux : l'équivalence par nom (comparaison de surface, rapide), la mise en correspondance par modèle (fondée sur des critères et des transformations), et les fournisseurs d'équivalences (pont sémantique pour les différences de vocabulaire ou d'unité de mesure). Ensemble, ils permettent aux Agents de trouver et de consommer du Contexte même lorsque les vocabulaires divergent.
La qualification d'accès — public, local, private — régit la portée de chaque Contexte publié : visible par tous, visible sur l'Hôte, ou réservé à l'Agent. Les Agents standards appliquent cette qualification lors de la résolution des requêtes.
Chaque Agent opère dans son propre présent discret
ContextAA ne cherche pas la cohérence globale. Chaque Agent opère sur un instantané localement cohérent et stable du monde pendant son cycle. Ce choix de conception — à la fois pragmatique et philosophique — rend les Agents robustes face à la connectivité partielle, aux dérives d'horloge et au non-déterminisme des systèmes répartis.
Le cycle en trois étapes
Chaque Agent exécute un cycle déterministe et isolé géré par le gestionnaire d'Agents : Consommer → Agir → Publier. Pendant l'étape Agir, l'espace contextuel Sa de l'Agent est figé — aucun événement asynchrone ne peut le modifier en cours d'exécution. Cela élimine tout besoin de verrous, moniteurs ou synchronisation explicite dans le code des Agents du domaine.
Les requêtes pour du Contexte publiées par un Agent sont satisfaites entre deux cycles — ce sont des actions différées. Un Agent doit toujours être rédigé en supposant que ses requêtes pourraient ne pas être desservies avant un ou plusieurs cycles supplémentaires, voire jamais (en cas de voisinage déconnecté).
Le temps sans horloges globales
ContextAA contextifie le temps lui-même. Aucune horloge globale synchronisée n'est présupposée. Le « moment » d'un Agent est une itération de son propre cycle d'exécution — discret, monotone et local. Deux moments consécutifs ti, tj ne sont ordonnés qu'à l'intérieur de l'histoire d'un même Agent.
Entre Hôtes, seul un ordre partiel est possible : l'envoi d'un Contexte c précède sa réception, et le début d'une migration précède l'arrivée de l'Agent. Au-delà, ContextAA favorise la cohérence interne de chaque Agent plutôt que la cohérence globale — une posture philosophiquement et pragmatiquement alignée avec la réalité des systèmes répartis ouverts.
L'Agent lit depuis son espace contextuel Sa — toutes les réponses reçues aux requêtes précédentes, ainsi que tout Contexte qu'il a lui-même produit. Le monde est stable durant cette étape.
L'Agent applique sa logique de mission — évalue les conditions, produit de nouveaux Contextes, commande des actuateurs — strictement sur la base de Sa courant. Aucune E/S, aucun blocage, aucune concurrence. Exécution bornée par cycle.
L'Agent écrit de nouveaux Contextes et des requêtes sortantes dans Sa. Les Agents standards propagent ensuite les Contextes publics vers les voisins et satisfont les requêtes locales — entre ce cycle et le suivant.
Les requêtes pour des Hôtes distants peuvent nécessiter plusieurs cycles pour être satisfaites — ou ne jamais l'être. Les Agents sont conçus pour planifier en fonction du futur mais agir sur le présent : toujours fonctionnels sur un Contexte potentiellement désuet.
Lorsque deux Agents publient des demandes antagonistes (p. ex. thermostat à 20 °C contre 23 °C), ContextAA fournit le cadre structurel — mais la stratégie de résolution relève de la responsabilité de l'expert du domaine, encodée dans le cadre ontique de l'Agent actuateur.
Les Agents se déplacent. Le Contexte les suit.
La migration des Agents est une fonctionnalité de premier plan dans ContextAA. Lorsque les ressources d'un Hôte deviennent insuffisantes au regard des besoins déclarés d'un Agent (Ra), celui-ci amorce sa migration vers un Hôte voisin capable de soutenir sa mission — en emportant avec lui son état contextuel complet.
SÉQUENCE DE MIGRATION D'UN AGENT — ha→h'
Chaque Agent déclare Ra : les ressources minimales qu'un Hôte doit offrir pour soutenir sa mission. Ra est exprimé de façon pessimiste afin de déclencher la migration avant toute dégradation de service. Le voisin le mieux soutenu dans Ξa ⊆ Nh est sélectionné comme destination.
Les Agents du domaine exprimés entièrement en Contexte sont indépendants de la plateforme par nature — leur migration est aussi légère que la transmission d'un objet de données structuré. Le déploiement en format binaire est également supporté, avec les contraintes de plateforme déclarées dans Ra.
Un Agent du domaine ne peut distinguer un Hôte bien connecté d'un Hôte isolé. Il opère sur le Contexte dans Sa, qui peut ne pas refléter la réalité physique immédiate. C'est intentionnel : l'Agent reste opérationnel en tout temps, au prix d'une possible désuétude du Contexte — mais sans interruption de service.
ContextAA dans l'écosystème de la plateforme
Que vous soyez chercheur, expert du domaine ou étudiant — ContextAA est ouvert à la collaboration. Contactez-nous ou explorez la documentation complète de la plateforme AMI-Lab.
Équipe impliquée
Bessam Abdulrazak
Professeur au département d’informatique, Université de Sherbrooke
Directeur du laboratoire AMI-Lab
Patrice Roy
Doctorante (Ph. D.)
Superviseur: Pr. Bessam Abdulrazak
Période : jusqu’à juillet 2019
Publications
Coming Soon
Nous travaillons sur cette section. Revenez bientôt !