Projets / Infrastructure / ContextAA
Infrastructure · AMI-Lab

ContextAA

Architecture d'Agents Autonomes guidée par le Contexte

Une 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.

Multi-agents réparti Guidé par le Contexte Migration d'Agents 17 000+ lignes · C++17 IdO · Maison · Ville intelligente
Voir AmI-DEU sur ContextAA ↗
Portrait de la plateforme
VoletInfrastructure
Abstraction centraleContexte
Langage principalC++17 (portable)
Base de code17 000+ lignes · 275+ fichiers
Bibliothèques tiercesAucune
Mémoire (Hôte complet)< 1 Mo RAM
Validé dansMaison · Ville intelligente
01 / Ce que ContextAA résout

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 Sherbrooke
🧩 Le Contexte comme interface universelle

Toute information — lectures de capteurs, état d'agent, requêtes, réponses — est représentée comme Contexte. Une seule abstraction pour tout gérer.

📡 Conçu pour la mobilité

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.

🔒 Concurrence — abstraction totale

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.

Empreinte ultraléger

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.


02 / Architecture principale

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

INIT 01 🏗️ Charger les Agents standards Services essentiels initialisés avant les Agents du domaine
INIT 02 📦 Charger les Agents du domaine Logique applicative déployée depuis du Contexte ou du binaire
EXÉCUTION 🔄 Cycle normal d'opération Chaque agent : Consommer → Agir → Publier, en séquence
ASYNC 🛰️ Objets autonomes Communicateur, Découvreur, Émetteur, Récepteur en parallèle
FINALISATION 💾 Persister et suspendre Agents contextifiés et sérialisés pour migration ou redémarrage
ÉLÉMENT 01 Hôte

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.

ÉLÉMENT 02 Agents

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.

ÉLÉMENT 03 Objets autonomes

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.

ÉLÉMENT 04 Contexte et 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.

ÉLÉMENT 05 Espaces contextuels

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).

ÉLÉMENT 06 Voisinage réseau Nh

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.


03 / Le langage Contexte

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.

Arbre hiérarchique Mise en correspondance Critères de Contexte Transformations Ponts XML / JSON

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.

ContextAA — Espace contextuel d'un Agent (Sa) · Exemple
// Agent « abcd » — espace contextuel S_a (représentation textuelle + arborescente) abcd { public { 388 { query:388 { // requête pour du Contexte sortant local { ** { celsius } // joker : tout chemin menant à « celsius » } } } } local { agent-info { id { abcd } name { "tiny agent" } } } } // Requête par modèle — récupérer la branche locale de l'agent « abcd » : abcd { local } // Opération compose — vérifier si la branche locale contient « tiny agent » : compose { #1{abcd{local}} #2{has{**{"tiny agent"}}} } // → [true] // Fournisseur d'équivalences : pression en hPa demandée, kPa disponible — pont automatique 431{public{pression{unite{kPa} valeur{101.325} precision{0.001}}}}

04 / Fonctionnement des Agents et temps

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 : ConsommerAgirPublier. 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.

Consommer

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.

Agir

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.

Publier

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.

Action différée

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.

Gestion des conflits

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.


05 / Mobilité des Agents

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'

ÉTAPE 01 ⏸️ Suspendre l'Agent Agent suspendu sur l'Hôte source h
ÉTAPE 02 🗜️ Contextifier et persister Agent sérialisé sous forme de Contexte ; persisté localement en cas de problème
ÉTAPE 03 📤 Transmettre vers h' Agent contextifié envoyé à l'Hôte cible h' via l'Émetteur
ÉTAPE 04 💾 Persister sur h' Agent reçu persisté sur h' par précaution ; accusé de réception envoyé à h
ÉTAPE 05 🔁 Réifier et activer Agent reconstruit depuis son Contexte et activé sur h'
MODÈLE DE RESSOURCES 📊 Ra — Ressources minimales Minimum · Pessimiste · Aligné sur la mission

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.

CPUMémoireConnectivitéPlateforme
PORTABILITÉ CONTEXTUELLE 🌍 Agents purs-Contexte Contextifié · Indépendant de la plateforme · Sérialisable

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.

IaaCBinaire (repli)DLL / .so
ISOLATION RÉSEAU 🛡️ Transparence réseau Agents du domaine · Sans conscience du réseau · Dégradation gracieuse

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.

IsolementContinuitéDégradation gracieuse

Envie de bâtir sur ContextAA ?

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 !