13 — Visualiser avec agentview
agentview est le serveur de visualisation web intégré à gAgent. Il
affiche en temps réel la carte de l’environnement et les agents qui s’y
déplacent, directement dans votre navigateur.
Lancer agentview
./bin/agentview
Par défaut, agentview écoute sur le port 8080. Ouvrez votre
navigateur à l’adresse :
http://localhost:8080
Vous verrez une carte vide. Dès que vous lancez une simulation avec un environnement, les agents apparaissent et se déplacent en temps réel.
Ordre de lancement recommandé
# Terminal 1 — plateforme FIPA (optionnel, pour AMS/DF)
./bin/agentplatform
# Terminal 2 — visualisation
./bin/agentview
# Terminal 3 — votre simulation
./build/ma_simulation
Personnaliser l’apparence des agents
Tout se passe dans les attributs que l’agent publie via setAttribut()
et attributUpdated().
Changer la forme :
setAttribut("shape", "star"); // étoile violette
setAttribut("shape", "diamond"); // losange orange
setAttribut("shape", "triangle"); // triangle vert
Changer la couleur :
setAttribut("color", "#e94560"); // rouge vif
setAttribut("color", "rgba(76,175,80,0.8)"); // vert semi-transparent
Afficher une valeur textuelle :
setAttribut("val", "42°C"); // affiché sous l'agent
setAttribut("val", "danger"); // étiquette d'état
Changer la taille en cours de simulation :
void onTick() override {
// L'agent grossit progressivement
taille_ += 0.5f;
char buf[16];
snprintf(buf, sizeof(buf), "%.0f", taille_);
this_agent->setAttribut("size_x", buf);
this_agent->setAttribut("size_y", buf);
set_pos(this_agent, x_, y_);
}
Exemple — agent qui change de couleur selon son état
class AgentAlerte : public Agent {
int energie_ = 100;
public:
void setup() override {
addAttribut("id"); addAttribut("name");
addAttribut("x"); addAttribut("y");
addAttribut("shape"); addAttribut("color");
addAttribut("size_x");addAttribut("size_y");
addAttribut("val");
setAttribut("id", "alerte");
setAttribut("name", "Alerte");
setAttribut("shape", "circle");
setAttribut("size_x", "20");
setAttribut("size_y", "20");
setAttribut("x", "300");
setAttribut("y", "150");
attributUpdated();
addBehaviour(new AlerteBehaviour(this));
}
};
class AlerteBehaviour : public TickerBehaviour {
int& energie_;
public:
AlerteBehaviour(Agent* ag, int& e)
: TickerBehaviour(ag, 500), energie_(e) {}
void onTick() override {
energie_--;
// Couleur selon le niveau d'énergie
if (energie_ > 66) this_agent->setAttribut("color", "#4caf50"); // vert
else if (energie_ > 33) this_agent->setAttribut("color", "#ff9800"); // orange
else this_agent->setAttribut("color", "#e94560"); // rouge
char buf[16];
snprintf(buf, sizeof(buf), "%d%%", energie_);
this_agent->setAttribut("val", buf);
this_agent->attributUpdated();
if (energie_ <= 0) done_ = true;
}
};
Dans agentview, vous verrez l’agent passer du vert à l’orange puis
au rouge, avec le pourcentage affiché en direct.
Ce qu’affiche agentview
Élément affiché |
Source |
|---|---|
Forme de l’agent |
attribut |
Couleur |
attribut |
Position |
attributs |
Taille |
attributs |
Étiquette texte |
attribut |
Nom au survol |
attribut |
Dimensions de la carte |
|
Comment ça fonctionne
agentviewinterroge l’environnement toutes les 100 ms via un socket Unix en envoyant la commandeGET_AGENTS. L’environnement répond avec un JSON décrivant tous les agents visuels :agentviewdessine ensuite chaque agent sur le canvas HTML5 en utilisant les attributsshape,color,x,y, etsize.