Decision/fr

From VLE

Jump to: navigation, search

Développement de la base de connaissance

La 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.
}
This page was last modified on 4 July 2010, at 15:14. This page has been accessed 187 times.