Cours environnement VLE 0.6 Gauthier Quesnel INRA (Institut National de la Recherche Agronomique) G. Quesnel (INRA) Cours VLE 1 / 73
Description de VLE 1 Environnement M&S complet Environnement / Framework Cycle de M&S 2 Caractéristiques techniques Composants : VFL Les greffons ou plug-ins 3 Fonctionnement Exécution d une simulation Développement de modèles G. Quesnel (INRA) Cours VLE 2 / 73
Le passage de DEVS à VLE 4 Liens entre DEVS et VLE Comment développer un modèle atomique? 5 Comportement par défaut 6 Description de l API Description de l API du modèle atomique Description de l API des données 7 Spécificités VLE : Conditions & Observations G. Quesnel (INRA) Cours VLE 3 / 73
L interface graphique de VLE 8 Introduction 9 Description des boîtes de dialogues 10 Vidéos 11 Remarques G. Quesnel (INRA) Cours VLE 4 / 73
Exemple complet 12 Exerice 1 TP0 13 Générateur et compteur G. Quesnel (INRA) Cours VLE 5 / 73
Première partie I VLE G. Quesnel (INRA) Cours VLE 6 / 73
Plan 1 Environnement M&S complet Environnement / Framework Cycle de M&S 2 Caractéristiques techniques Composants : VFL Les greffons ou plug-ins 3 Fonctionnement Exécution d une simulation Développement de modèles G. Quesnel (INRA) Cours VLE 7 / 73
VLE : un environnement complet Environnement / Framework Qu est ce que l environnement VLE : Une bibliothèque de modélisation et de simulation DEVS C++ : VFL extensions équations différentielles : QSS et DESS extension équations aux différences extension réseaux de Petri : High Level PetriNet extension automates cellulaires, 1, 2 ou 3 dimensions extension équations différentielles spatialisées Un simulateur DEVS : vle Une interface graphique de modélisation : gvle Une interface graphique de visualisation : eov Un paquet R : rvle Un paquet Python : pyvle Définition VLE est un environnement de M&S qui consiste en un ensemble de logiciels permettant de modéliser, simuler et d analyser des systèmes. G. Quesnel (INRA) Cours VLE 8 / 73
VLE : un environnement complet Environnement / Framework Qu est ce que l environnement VLE : Une bibliothèque de modélisation et de simulation DEVS C++ : VFL extensions équations différentielles : QSS et DESS extension équations aux différences extension réseaux de Petri : High Level PetriNet extension automates cellulaires, 1, 2 ou 3 dimensions extension équations différentielles spatialisées Un simulateur DEVS : vle Une interface graphique de modélisation : gvle Une interface graphique de visualisation : eov Un paquet R : rvle Un paquet Python : pyvle Définition VLE est un environnement de M&S qui consiste en un ensemble de logiciels permettant de modéliser, simuler et d analyser des systèmes. G. Quesnel (INRA) Cours VLE 8 / 73
VLE : un environnement complet Le cycle de modélisation modélisation modèle formel implémentation modèle vle plan expérience analyses résultat simulation instances du plan G. Quesnel (INRA) Cours VLE 9 / 73
VLE : un environnement complet Le cycle de modélisation modélisation modèle formel implémentation modèle vle plan expérience analyses résultat simulation instances du plan G. Quesnel (INRA) Cours VLE 9 / 73
VLE : un environnement complet Le cycle de modélisation modélisation modèle formel implémentation modèle vle plan expérience analyses résultat simulation instances du plan Environnement VLE : notre but Offrir aux modélisateurs l accès à DEVS, pour la modélisation (de modèles hétérogènes), la simulation (sur grille de calculs), et l analyse des sorties, et si possible en proposant une intégration dans leurs outils. G. Quesnel (INRA) Cours VLE 9 / 73
Plan 1 Environnement M&S complet Environnement / Framework Cycle de M&S 2 Caractéristiques techniques Composants : VFL Les greffons ou plug-ins 3 Fonctionnement Exécution d une simulation Développement de modèles G. Quesnel (INRA) Cours VLE 10 / 73
Les composants VLE : Virtual Laboratory Environment Composants une bibliothèque de codes informatiques : fonctions, types, classes, etc. Plugins ou greffons est un composant dit léger, permet d étendre un autre composant. Remarques VLE est basé sur les composants : les VFL, VLE Foundation Libraries sont un ensemble de bibliothèques Certaines bibliothèques de VLE peuvent être étendues par des greffons Les bibliothèques, en C/C++, ont pour extension.so sous GNU/Linux et.dll sous Windows. G. Quesnel (INRA) Cours VLE 11 / 73
Les composants importants devs extension oov vle value vpz graph FIG.: VFL : Virtual Laboratory Environment Foundation Libraries G. Quesnel (INRA) Cours VLE 12 / 73
Les composants importants VFL : Virtual Laboratory Environment Foundation Libraries value données transportables sur les événements graph représentation du graphe de modèles hiérarchiques DEVS vpz représentation objet du format de fichiers VPZ devs noyau de simulation DEVS (temps, événements, simulator etc). extension extensions DEVS proposées (QSS, DESS, PetriNet etc.) manager simulation, multi-simulation, plan d expériences Règles À chaque bibliothèque est associée un namespace C++, par exemple, vle::devs::dynamics ou vle::graph::atomicmodel G. Quesnel (INRA) Cours VLE 13 / 73
Les composants VFL : Virtual Laboratory Environment Foundation Libraries data objet de connexion aux bases de données, fichiers csv etc. oov les sorties de simulation, fichiers, base de donnée, etc. utils ensemble de code portable geometry des classes pour la manipulation de données dans l espace translator outils de construction de graphe Remarques Un développeur de... modèles DEVS n a besoin que des bibliothèques vle::value, vle::devs modèles à base d équations aux différences, n a besoin que de la bibliothèques vle::extension::differenceequation de plate-forme pourrait avoir besoin de toutes les bibliothèques G. Quesnel (INRA) Cours VLE 14 / 73
Les composants Les greffons ou plug-ins modèles modèles modèles extensions csv outputs simulateur vle devs rdata modèles modèles texte modèles FIG.: Les greffons ou plugins du simulateur VLE G. Quesnel (INRA) Cours VLE 15 / 73
Plan 1 Environnement M&S complet Environnement / Framework Cycle de M&S 2 Caractéristiques techniques Composants : VFL Les greffons ou plug-ins 3 Fonctionnement Exécution d une simulation Développement de modèles G. Quesnel (INRA) Cours VLE 16 / 73
Fonctionnement Exécution d une simulation obs. Ordre d exécution 1 charge vpz 2 récupère graph fichier vpz graph 3 récupère init 4 récupère obs init. 5 crée un coordinateur vle coord 6 lance la simulation G. Quesnel (INRA) Cours VLE 17 / 73
Fonctionnement Développement de modèles Découpage entre code informatique / graphes, plan d expérience Code informatique La traduction en code informatique des modèles DEVS dans l API de VLE Graphe de modèle Un fichier XML de description de la hiérarchie de modèles et du plan d expérience Pourquoi cette séparation? Une volonté de séparer le code informatique de la hiérarchie Un même code informatique pour : plusieurs graphes / plusieurs expériences La hiérarchie de modèles sera éditée avec GVLE G. Quesnel (INRA) Cours VLE 18 / 73
Deuxième partie II DEVS vers VLE G. Quesnel (INRA) Cours VLE 19 / 73
Plan 4 Liens entre DEVS et VLE Comment développer un modèle atomique? 5 Comportement par défaut 6 Description de l API Description de l API du modèle atomique Description de l API des données 7 Spécificités VLE : Conditions & Observations G. Quesnel (INRA) Cours VLE 20 / 73
Liens entre DEVS et VLE VLE est un environnement de modélisation et simulation DEVS il implémente les simulateurs abstraits de B. P. Zeigler et un lot d extensions Deux points importants : les modèles atomiques seront des objets C++ le graphe de connexions, les initialisations et les observations des modèles seront dans un fichier XML : VPZ G. Quesnel (INRA) Cours VLE 21 / 73
Description du modèle atomique dans VLE Liens entre DEVS et VLE Définition Un modèle DEVS est représenté dans l environnement VLE comme un objet d une classe qui hérite de devs::dynamics Exemple avec un modèle inactif class ModeleInactif : public devs:: Dynamics // ModeleInactif hérite { // de devs::dynamics public: ModeleInactif(const graph:: AtomicModel& atom, // le constructeur const devs:: InitEventList& inits) : // obligatoire devs:: Dynamics(atom, inits) // à redefinir { } virtual ~ModeleInactif() // le destructeur obligatoire à { } // redéfinir }; G. Quesnel (INRA) Cours VLE 22 / 73
Description du modèle atomique dans VLE Liens entre DEVS et VLE Définition Un modèle DEVS est représenté dans l environnement VLE comme un objet d une classe qui hérite de devs::dynamics Exemple avec un modèle inactif class ModeleInactif : public devs:: Dynamics // ModeleInactif hérite { // de devs::dynamics public: ModeleInactif(const graph:: AtomicModel& atom, // le constructeur const devs:: InitEventList& inits) : // obligatoire devs:: Dynamics(atom, inits) // à redefinir { } virtual ~ModeleInactif() // le destructeur obligatoire à { } // redéfinir }; G. Quesnel (INRA) Cours VLE 22 / 73
Plan 4 Liens entre DEVS et VLE Comment développer un modèle atomique? 5 Comportement par défaut 6 Description de l API Description de l API du modèle atomique Description de l API des données 7 Spécificités VLE : Conditions & Observations G. Quesnel (INRA) Cours VLE 23 / 73
Description du modèle atomique dans VLE Comportement par défaut? idle Le modèle ne possède qu un seul état Résultat Par défaut, le modèle représenté par la classe devs::dynamics propose un comportement sans autonomie et sans réaction. Nous restons dans la philosophie objet, c-à-d. de spécialisation en héritant de cette classe pour l améliorer. G. Quesnel (INRA) Cours VLE 24 / 73
Description du modèle atomique dans VLE Comportement par défaut? idle ta = La durée dans cet unique état est infinie Résultat Par défaut, le modèle représenté par la classe devs::dynamics propose un comportement sans autonomie et sans réaction. Nous restons dans la philosophie objet, c-à-d. de spécialisation en héritant de cette classe pour l améliorer. G. Quesnel (INRA) Cours VLE 24 / 73
Description du modèle atomique dans VLE Comportement par défaut? idle ta = Y = Aucun événement externe n est pris en compte Résultat Par défaut, le modèle représenté par la classe devs::dynamics propose un comportement sans autonomie et sans réaction. Nous restons dans la philosophie objet, c-à-d. de spécialisation en héritant de cette classe pour l améliorer. G. Quesnel (INRA) Cours VLE 24 / 73
Description du modèle atomique dans VLE Comportement par défaut? idle ta = Y = Aucun événement externe n est pris en compte Résultat Par défaut, le modèle représenté par la classe devs::dynamics propose un comportement sans autonomie et sans réaction. Nous restons dans la philosophie objet, c-à-d. de spécialisation en héritant de cette classe pour l améliorer. G. Quesnel (INRA) Cours VLE 24 / 73
Plan 4 Liens entre DEVS et VLE Comment développer un modèle atomique? 5 Comportement par défaut 6 Description de l API Description de l API du modèle atomique Description de l API des données 7 Spécificités VLE : Conditions & Observations G. Quesnel (INRA) Cours VLE 25 / 73
Description de l API Description de l API : vle::dynamics DEVS = X, Y, S, init, δ int, δ ext, δ conf, λ, ta API vle::dynamics // les attributs du modèle private: double x; double y; State state; etc. Remarques Ces attributs ne sont modifiables que dans la fonction init, δ int et δ ext Tous les attributs sont possibles, types, classes etc. G. Quesnel (INRA) Cours VLE 26 / 73
Description de l API Description de l API : vle::dynamics DEVS = X, Y, S, init, δ int, δ ext, δ conf, λ, ta API vle::dynamics::init virtual devs:: Time devs:: Dynamics:: init( const devs:: Time& time); Remarques Appelée au démarrage de la simulation (une fois tous les modèles construits) Retourne la durée pendant laquelle le modèle reste dans l état initiale Par défaut, retourne une durée infinie G. Quesnel (INRA) Cours VLE 26 / 73
Description de l API Description de l API : vle::dynamics DEVS = X, Y, S, init, δ int, δ ext, δ conf, λ, ta API vle::dynamics::internaltransition virtual void devs:: Dynamics:: internaltransition( const devs:: Time& time); Remarques Appelée à l échéance d un ta et après λ Permet de modifier l état du modèle G. Quesnel (INRA) Cours VLE 26 / 73
Description de l API Description de l API : vle::dynamics DEVS = X, Y, S, init, δ int, δ ext, δ conf, λ, ta API vle::dynamics::externaltransition virtual void devs:: Dynamics:: externaltransition( const devs:: ExternalEventList& event, const devs:: Time& time); Remarques Appelée lorsque le modèle reçoit au moins un événement externe Permet de modifier l état du modèle La fonction de sortie λ n est pas appelée G. Quesnel (INRA) Cours VLE 26 / 73
Description de l API Description de l API : vle::dynamics DEVS = X, Y, S, init, δ int, δ ext, δ conf, λ, ta API vle::dynamics::confluenttransitions virtual devs:: EventType devs:: Dynamics:: confluenttransitions( const devs:: Time& time, const devs:: ExternalEventList& events) const; Remarques Appelée lorsqu une δ int et une δ ext ont lieu en même temps Fournit la possibilité de préférence sur la transition à effectuer en premier Retourne un élément d une énumération : INTERNAL ou EXTERNAL G. Quesnel (INRA) Cours VLE 26 / 73
Description de l API Description de l API : vle::dynamics DEVS = X, Y, S, init, δ int, δ ext, δ conf, λ, ta API vle::dynamics::output virtual void devs:: Dynamics:: output( const devs:: Time& time, devs:: ExternalEventList& output) const; Remarques Appelée après l échéance d un ta et avant une δ int Récupère dans le paramètre output des événements externes G. Quesnel (INRA) Cours VLE 26 / 73
Description de l API Description de l API : vle::dynamics DEVS = X, Y, S, init, δ int, δ ext, δ conf, λ, ta API vle::dynamics::timeadvance virtual devs:: Time devs:: Dynamics:: timeadvance() const; Remarques Appelée après les fonctions de transition δ int ou δ ext Retourne la durée pendant laquelle un modèle reste dans l état fourni par l appel à δ int ou δ ext Par défaut, retourne une durée infinie G. Quesnel (INRA) Cours VLE 26 / 73
Description de l API Description de l API : vle::dynamics DEVS = X, Y, S, init, δ int, δ ext, δ conf, λ, ta X et Y // X est disponible dans la fonction de transition interne void devs:: externaltransition( const devs:: Time& time, const devs:: ExternalEventList& events); // Y est disponible dans la fonction de sortie virtual void devs:: Dynamics:: output( const devs:: Time& time, devs:: ExternalEventList& output) const; G. Quesnel (INRA) Cours VLE 26 / 73
Description de l API Description de l API : vle::dynamics La classe vle::devs::dynamics possède une méthode rand() devs:: Time devs:: Dynamics:: init(const devs:: Time& time) { rand().get_bool(); // true, false } rand().get_int(); // [0..4294967296[ rand(). get_int_rage(int begin, int end); // [begin.. end[ rand(). get_int_range_excluded(int begin, int end); // ]begin.. end[ rand().get_double(); // [0..1[ rand(). get_double_range(double begin, double end); // [begin.. end[ rand(). get_double_included (); // [0..1] rand(). get_double_included(double begin, double end); // [begin.. end] rand(). get_double_range_excluded(double begin, double end); rand(). normal(double standarddeviation, double average); rand(). log_normal(double standarddeviation, double average); rand(). von_mises(double kappa, double mu); G. Quesnel (INRA) Cours VLE 27 / 73
Description de l API Description de l API : vle::value VLE s appuie sur un système de données pour échanger des informations entre modèles et entre composants : la fonction λ doit retourner une liste d événements pouvant transporter des données la fonction δ ext reçoit une liste d événements pouvant transporter des données la fonction δ state doit envoyer une liste de données aux observateurs utilisation d une bibliothèque de données simple et souple G. Quesnel (INRA) Cours VLE 28 / 73
Description de l API Description de l API : vle::value map set composition de values table integer boolean tuple types composés value types simples double string xml FIG.: Les différentes values disponibles G. Quesnel (INRA) Cours VLE 29 / 73
Description de l API Description de l API : vle::value Quelques exemples value:: Boolean b = value:: BooleanFactory:: create(true); value:: Integer i = value:: IntegerFactory:: create (123); value:: Double d = value:: DoubleFactory:: create (123.321); value:: String s = value:: StringFactory:: create("hello world!"); value:: Xml x = value:: XmlFactory:: create("hello world!); Toutes les données sont des value value:: Value i1 = value:: BooleanFactory:: create(true); value:: Value i2 = value:: IntegerFactory:: create (123); value:: Value i3 = value:: DoubleFactory:: create (123.321); value:: Value i4 = value:: StringFactory:: create("hello world!"); value:: Value i5 = value:: XmlFactory:: create("hello world!); G. Quesnel (INRA) Cours VLE 30 / 73
Description de l API Description de l API : vle::value Comment traduire une value non typée vers la value typée value:: Boolean b = value:: tobooleanvalue(i1); value:: Integer i = value:: tointegervalue(i2); value:: Double d = value:: todoublevalue(i3); value:: String s = value:: tostringvalue(i4); value:: Xml x = value:: toxmlvalue(i5); Comment récupérer la donnée C++ cachée bool b = value:: toboolean(i1); int i = value:: tointeger(i2); double d = value:: todouble(i3); std:: string = value:: tostring(i4); std:: string = value:: toxml(i5); G. Quesnel (INRA) Cours VLE 31 / 73
Description de l API Description de l API : vle::value Les tableaux de value value:: Set s = value:: SetFactory:: create(); s->addvalue(value:: StringFactory("hello world!")); s->addvalue(value:: DoubleFactory (123.321)); value:: string vle_str = value:: tostringvalue(s->getvalue (0)); std:: string str = value:: tostring(vle_str); // str == "hello world!" value:: Double vle_int = value:: todoubevalue(s->getvalue (1)); double d = value:: todoublevalue(vle_int); // i == 123.321 Il existe d autres méthodes : cf. doc. G. Quesnel (INRA) Cours VLE 32 / 73
Description de l API Description de l API : vle::value Les tableaux associatifs : (nom, value) value:: Map m = value:: MapFactory:: create(); m.addvalue("nom", value:: StringFactory:: create("toto")); m.addvalue("age", value:: IntegerFactory:: create (11)); m.addvalue("taille", value:: DoubleFactory:: create (1.40)); value:: Set s = value:: SetFactory:: create(); s->addvalue(value:: DoubleFactory (07.5)); s->addvalue(value:: DoubleFactory (11.0)); m.addvalue("notes", s); std:: string nom = value:: tostring(m. getvalue("nom")); int age = value:: tointeger(m. getvalue("age")); Il existe d autres méthodes : cf. doc. G. Quesnel (INRA) Cours VLE 33 / 73
Plan 4 Liens entre DEVS et VLE Comment développer un modèle atomique? 5 Comportement par défaut 6 Description de l API Description de l API du modèle atomique Description de l API des données 7 Spécificités VLE : Conditions & Observations G. Quesnel (INRA) Cours VLE 34 / 73
Spécificités VLE : Conditions & Observations Conditions & Observations Conditions un modèle possède des ports d initialisation les ports d initialisation possèdent des données les données sont définies en dehors du code source Observations un modèle possède des ports d observations les ports d observations sont connectés à des vues les vues sont connectées à des sorties fichiers, bd etc. M : disponible dans le constructeur du modèle δ obs : une fonction d observation G. Quesnel (INRA) Cours VLE 35 / 73
Spécificités VLE : Conditions & Observations Conditions expérimentales Définitions Une condition : un ensemble de (ports, valeurs) et un nom Cnd = nom, {(port, valeurs)} Un modèle : un ensemble de condition M = {Cnd} Conclusion Une même condition peut être appliquée à plusieurs modèles, par exemple, les automates cellulaires L ensemble des conditions d un modèle est disponible dans le constructeur de celui-ci G. Quesnel (INRA) Cours VLE 36 / 73
Spécificités VLE : Conditions & Observations Conditions expérimentales : exemples Exemples Une condition définissant une position et un label : Cnd pos = pos, {( x, 123.321), ( y, 23.32), ( label, A )} Une condition définissant un tableau : Cnd array = val, {( val, {1, 2, 3, 4, 5, 6, 7, 8, 9, 0})} G. Quesnel (INRA) Cours VLE 37 / 73
Spécificités VLE : Conditions & Observations Conditions expérimentales : exemples Exemple d utilisation des conditions class Model : public devs:: Dynamics { public: ModeleInactif(const graph:: AtomicModel& atom, // le constructeur const devs:: InitEventList& inits) : // obligatoire devs:: Dynamics(atom, inits) // à redefinir { } }; double x = value:: todouble(inits.get("x")); // 123.321 double y = value:: todouble(inits.get("y")); // 23.32 std:: string label = value:: tostring(inits.get("label")); // "A" Tuple t = value:: totuplevalue(inits.get("val")); // 1, 2, 3,... G. Quesnel (INRA) Cours VLE 38 / 73
Spécificités VLE : Conditions & Observations Observations Comment définir de manière globale qui observer et comment? Définition Utilisation d un système de vues : une vue a un type : timed, event ou finish timed observations à pas de temps, nécessite un paramètre event observations à chaque changement d état du modèle finish observations à la fin de la simulation une vue est connectée à des fichiers de sorties, bases de données etc. les modèles ont des ports d observations un port d observation peut être connectée à une ou plusieurs vues G. Quesnel (INRA) Cours VLE 39 / 73
Spécificités VLE : Conditions & Observations Comment gérer les observations pour les modèles Exemple d observation class Model : public devs:: Dynamics { public:... value:: Value observation(const devs:: ObservationEvent& event) const { if (event.onport("state") { // retourne la donnée contenue dans la variable return value:: DoubleFactory:: create(rh); } return value:: Value(); } }; G. Quesnel (INRA) Cours VLE 40 / 73
Troisième partie III GVLE G. Quesnel (INRA) Cours VLE 41 / 73
Plan 8 Introduction 9 Description des boîtes de dialogues 10 Vidéos 11 Remarques G. Quesnel (INRA) Cours VLE 42 / 73
Introduction Interface graphique de modélisation DEVS GVLE Gui for the VLE Interface graphique de modélisation DEVS : Manipulation de la structures du modèle : ajouts, suppressions de modèles ou de connexions copier coller importation exportation Saisie les conditions expérimentales Saisie les modèles à observer Exécution de simulations Indépendante du noyau de simulation : S appuie sur les VFL Son rôle Cacher la manipulation des fichiers XML VPZ G. Quesnel (INRA) Cours VLE 43 / 73
Introduction Interface graphique de modélisation DEVS FIG.: L interface graphique GVLE - (Linux) G. Quesnel (INRA) Cours VLE 44 / 73
Plan 8 Introduction 9 Description des boîtes de dialogues 10 Vidéos 11 Remarques G. Quesnel (INRA) Cours VLE 45 / 73
Description des boîtes de dialogues Fenêtre principale Rôle de la palette d outils Rôle menu charge, sauve les projets sous forme de fichiers VPZ affiche, cache les fenêtres exécute les simulations Sélection de modèle atomique, ouverture de modèle couplés Ajout de modèles atomiques Ajout de connexions Ajout de modèle couplés Suppression d objets G. Quesnel (INRA) Cours VLE 46 / 73
Description des boîtes de dialogues Vue d un modèle couplé Rôle Montre le contenu d un modèle couplé (verts les modèles couplés) Importe un fichier VPZ Exporte ce modèle couplé dans un fichier VPZ En fonction de l outil sélectionné Sélection de modèle atomique, ouverture de modèle couplés, déplacement Ajout, suppression de modèles atomiques ou couplés, connexions G. Quesnel (INRA) Cours VLE 47 / 73
Description des boîtes de dialogues Hiérarchie de modèles Montre la hiérarchie de modèles Les feuilles : modèles atomiques Les nœuds : les modèles couplés Exporte ce modèle couplé dans un fichier VPZ G. Quesnel (INRA) Cours VLE 48 / 73
Plan 8 Introduction 9 Description des boîtes de dialogues 10 Vidéos 11 Remarques G. Quesnel (INRA) Cours VLE 49 / 73
Vidéos Introduction FIG.: Description rapide de l interface graphique de GVLE G. Quesnel (INRA) Cours VLE 50 / 73
Vidéos Création d un modèle atomique FIG.: Description de l ajout et de la configuration d un modèle atomique : ports d entrée, sortie, comportement, conditions expérimentales et observations G. Quesnel (INRA) Cours VLE 51 / 73
Vidéos Gestion de la hiérarchie de modèle FIG.: Description de la hiérarchie de modèles : création de modèles couplés, copier - coller, importation - exportation G. Quesnel (INRA) Cours VLE 52 / 73
Plan 8 Introduction 9 Description des boîtes de dialogues 10 Vidéos 11 Remarques G. Quesnel (INRA) Cours VLE 53 / 73
Conclusion Rapports de bogues / demandes GVLE est une interface récente qui comporte un lot de bogues et de fonctionnalités manquantes : Mailing lists : vle-users@lists.sourceforge.net Bug tracking system : http://vle.univ-littoral.fr/flyspray Mais aussi : IRC : chat avec les utilisateurs et développeurs de VLE. vle.univ-littoral.fr port 9999 G. Quesnel (INRA) Cours VLE 54 / 73
Quatrième partie IV Exemple complet G. Quesnel (INRA) Cours VLE 55 / 73
Plan 12 Exerice 1 TP0 13 Générateur et compteur G. Quesnel (INRA) Cours VLE 56 / 73
Exemple complet Exemple basé sur l exercice 1 du TP0 Pour rappel, le graphe d états du modèle DEVS : init idle ta = 0 ta = 1 Remarques Deux états : INIT et IDLE INIT : une durée de 0 unité de temps IDLE : une durée de 1 unité de temps Une transition immédiate entre INIT et IDLE Une transition de IDLE à IDLE Pas de sortie Aucune gestion des événements externes G. Quesnel (INRA) Cours VLE 57 / 73
Exemple complet Exemple basé sur l exercice 1 du TP0 Arborescence du dossier tp0 le dossier racine Remarques reserve.cpp le fichier source C++ du modèle réservoir CMakeLists.txt le fichier cmake de compilation (fourni) Le nom de la bibliothèque dynamique sera celle du dossier : libtp0.so ou tp0.dll $ cmake -DCMAKE_INSTALL_PREFIX=$HOME/usr $ make install $ cmake -G "MinGW Makefiles" \ -DCMAKE_INSTALL_PREFIX ="% HOMEDRIVE%% HOMEPATH%\\ vle" $ mingw32 -make install G. Quesnel (INRA) Cours VLE 58 / 73
Exemple complet Constructeur et destructeur S = (RH) Constructeur et destructeur class Reserve : public class devs:: Dynamics { double RH; public: Reserve(const graph:: AtomicModel& atom, const devs:: InitEventList& event) : devs:: Dynamics(atom, event) { } virtual ~Reserve() { } }; G. Quesnel (INRA) Cours VLE 59 / 73
Exemple complet Fonction init δ init () = (100.0) ta(init) = 0.0 Fonction init virtual devs:: Time init(const devs:: Time& time) { RH = 100.0; return 0; } G. Quesnel (INRA) Cours VLE 60 / 73
Exemple complet Fonction d avancement du temps ta(idle) = 1.0; Fonction d avancement du temps virtual devs:: Time timeadvance() const { return 1; } G. Quesnel (INRA) Cours VLE 61 / 73
Exemple complet Fonction de transition interne δ int ((RH + in flow out flow 0)) : S(RH) = (RH + in flow out flow ) δ int ((RH + in flow out flow < 0)) : S(RH) = 0 Fonction de transition interne virtual internaltransition(const devs:: Time& time) { double value = RH + 7-10; if (RH < 0) { RH = 0; } else { RH = value; } } G. Quesnel (INRA) Cours VLE 62 / 73
Exemple complet Observons le modèle Nous autorisons l observation de la variable RH sur les événements posés sur le port d état «state» Observation virtual value:: value observation( const devs:: ObservationEvent& event) const { if (event.onport("state")) { return value:: DoubleFactory:: create(rh); } } // Si le modèle est questionné sur un autre port, nous // ne fournissons aucune information return value:: Value(); G. Quesnel (INRA) Cours VLE 63 / 73
Exemple complet Paramétrons le modèle depuis le VPZ // À la fin du fichier, nous déclarons le modèle via la commande : DECLARE_NAMED_DYNAMICS(nom1, Reserve); Où : nom1 est une chaîne de caractères qui identifie le modèle Reserve Reserve le nom de la classe G. Quesnel (INRA) Cours VLE 64 / 73
Exemple complet Le fichier Vpz G. Quesnel (INRA) Cours VLE 65 / 73
Exemple complet Le fichier Vpz G. Quesnel (INRA) Cours VLE 65 / 73
Exemple complet Le fichier Vpz G. Quesnel (INRA) Cours VLE 65 / 73
Exemple complet Le fichier Vpz G. Quesnel (INRA) Cours VLE 65 / 73
Exemple complet Le fichier Vpz G. Quesnel (INRA) Cours VLE 65 / 73
Exemple complet Le fichier Vpz G. Quesnel (INRA) Cours VLE 65 / 73
Exemple complet Paramétrons le modèle depuis le VPZ Modifions le modèle pour prendre en compte des paramètres extérieurs : RH init : la réserve d eau in flow : l apport à chaque pas de temps out flow : la perte à chaque pas de temps class Reserve : public class devs:: Dynamics { double RH, RHinit, inflow, outflow; public: Reserve(const graph:: AtomicModel& atom, const devs:: InitEventList& events) : devs:: Dynamics(atom, event) { RHinit = utils:: todouble(events.get("rhinit")); inflow = utils:: todouble(events.get("inflow")); outflow = utils:: todouble(events.get("outflow")); } G. Quesnel (INRA) Cours VLE 66 / 73
Exemple complet Paramétrons le modèle depuis le VPZ Modification des fonctions init et transition interne virtual devs:: Time init(const devs:: Time& time) { RH = RHinit; return 0; } virtual internaltransition(const devs:: Time& time) { double value = RH + inflow - outflow; if (RH < 0) { RH = value; } else { RH = 0; } } G. Quesnel (INRA) Cours VLE 67 / 73
Exemple complet Le fichier Vpz G. Quesnel (INRA) Cours VLE 68 / 73
Exemple complet Le fichier Vpz G. Quesnel (INRA) Cours VLE 68 / 73
Exemple complet Compilation et exécution $ cd reservoire $ cmake -DCMAKE_INSTALL_PREFIX=$HOME/usr $ make install $ vle reservoir.vpz JustRun: run 1 simples simulations in one thread [equation.vpz] - Open file...: ok - Coordinator load models...: ok - Clean project file...: ok - Coordinator initializing...: ok - Simulation run...: ok - Coordinator cleaning...: ok Win32 $ cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="%HOMEDRIVE%%HOMEPATH%\vle" $ mingw32-make install G. Quesnel (INRA) Cours VLE 69 / 73
Plan 12 Exerice 1 TP0 13 Générateur et compteur G. Quesnel (INRA) Cours VLE 70 / 73
Exemple complet Fonction de sortie λ : Y beep =, Y x = {( x, 10.1 )}, Y pos = {( x, 10.1), ( y, 10.2)} Fonction de sortie virtual void Generateur::output(const devs::time& time, const ExternalEventList& output) { output.addevent(buildevent("beep")); output.addevent(buildeventwithadouble("portx", "x", 10.1)); devs::externalevent* evt = new devs::externalevent("pos"); evt «attribute("x", 10.1) «attribute("y", 10.2); output.addevent(evt); } G. Quesnel (INRA) Cours VLE 71 / 73
Exemple complet Fonction de sortie λ : Y beep =, Y x = {( x, 10.1 )}, Y pos = {( x, 10.1), ( y, 10.2)} Fonction de sortie virtual void Generateur::output(const devs::time& time, const ExternalEventList& output) { output.addevent(buildevent("beep")); output.addevent(buildeventwithadouble("portx", "x", 10.1)); devs::externalevent* evt = new devs::externalevent("pos"); evt «attribute("x", 10.1) «attribute("y", 10.2); output.addevent(evt); } G. Quesnel (INRA) Cours VLE 71 / 73
Exemple complet Fonction de sortie λ : Y beep =, Y x = {( x, 10.1 )}, Y pos = {( x, 10.1), ( y, 10.2)} Fonction de sortie virtual void Generateur::output(const devs::time& time, const ExternalEventList& output) { output.addevent(buildevent("beep")); output.addevent(buildeventwithadouble("portx", "x", 10.1)); devs::externalevent* evt = new devs::externalevent("pos"); evt «attribute("x", 10.1) «attribute("y", 10.2); output.addevent(evt); } G. Quesnel (INRA) Cours VLE 71 / 73
Exemple complet Fonction de transition externe virtual void Compteur:: externalevent(const devs:: Time& time, const devs:: ExternalEventList& events) { for (const devs:: ExternalEventList:: const_iterator it = events.begin(); it!= events.end(); ++it) { if ((*it)->onport("in")) { // récupère {("x", 10.1), ("y", 10.2)} double x = (*it)->getdoubleattributevalue("x"); double y = (*it)->getdoubleattributevalue("x"); } } // test si l événement vient d un modèle nommé " generateur" if ((* it)->getsourcemodelname() == " generateur") {... } } // events est un tableau d événement externes usigned int sz = events.size(); for (unsigned int i = 0; i < 0; ++i) {... } G. Quesnel (INRA) Cours VLE 72 / 73
Cours environnement VLE 0.6 Auteurs Gauthier Quesnel quesnel@users.sourceforge.net Licence Copyright (C) 2008 - INRA Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". G. Quesnel (INRA) Cours VLE 73 / 73