Decision/frFrom VLE< Decision
Développement de la base de connaissanceLa base de connaissance peut-être manipulée via les fonctions prédicats, les fonctions de sorties ou sur les changements d'états des activités. Pour définir la base de connaissance d'un agent, la syntaxe C++ est la suivante : #include <vle/extension/Decision.hpp> namespace vmd = vle::extension::decision; class Agent : public vmd::Agent { public: Agent(const vle::devs::DynamicsInit& mdl, const vle::devs::InitEventList& evts) : vmd::Agent(mdl, evts) { addFacts(this) += F("fact 1", &Agent::update), F("fact 2", &Agent::update); addPredicates(this) += P("pred 1", &Agent::isAlwaysTrue), P("pred 2", &Agent::isAlwaysTrue), P("pred 3", &Agent::isAlwaysTrue), P("pred 4", &Agent::isAlwaysTrue); addOutputFunctions(this) += O("output function 1", &Agent::out), O("output function 2", &Agent::out); addAcknowledgeFunctions(this) += A("ack function 1", &Agent::ack), A("ack function 2", &Agent::ack); } virtual ~Agent() {} void update(const value::Value&) { /* manipulation de l'état de l'objet */ } bool isAlwaysTrue() const { /* retourne vrai ou faux en fonction de l'état de l'objet */ } void ack(const std::string&, const Activity&) { /* réagit au changement d'état de l'activité */ } void out(const std::string&, const Activity&, vle::devs::ExternalEventList&) { /* création d'un message personnalisé pour le modèle connecté à l'activité */ } }; Langage de définition de plans d'activités# le caractère `#' est le symbole de commentaire. Tout le reste de la ligne est ignoré. rules { rule { id = "identifiant" ; predicates = "", "", "", "" ; } ... # liste de règles. } activities { activity { id = "identifiant" ; rules = "", "", "", "" ; # optionnel, nom de règle au dessus temporal { # optionnel, par défaut start = -infinity et finish = infinity. start = 1; # 1 finish = 7; # 2 minstart = 2; # 3 maxstart = 3; # 4 minfinish = 5; # 5 maxfinish = 6; # 6 # une configuration : (1, 2) ou (1, 5, 6), ouo (2, 3, 4) ou (3, 4, 5, 6). # un réel ou -infinity ou infinity } ack = ""; # optionnel (lien avec le C++). output = ""; # optionnel (lien avec le C++). } ... # liste d'activités } precedences { precedence { type = SS | FF | FS; # start start, finish finish ou finish to start. first = "activity source"; second = "activity destination"; mintimelag = 0; # un réel positif ou égal à 0 ou infinity. maxtimelag = infinity; # un réel positif ou infinity. } ... # liste de contraintes de précédence. } |