rapport

advertisement
iut de Blagnac - Toulouse II
Département Informatique
1, place Georges Brassens - BP 73
31703 Blagnac Cedex
INRA de Toulouse Midi-Pyrénées
24 Chemin de Borde Rouge
BP 52627
31326 Castanet Tolosan cedex
Rapport de stage
Conception et réalisation d’une interface graphique pour l’implémentation de
modèles à compartiments dans la plate-forme RECORD
Du mardi 10 avril 2012 au vendredi 29 juin 2012
Auteur
Rémy Phelipot(Promotion 2012)
Destinataires
Patrick Chabrier
Iulian Ober
iut de Blagnac - Toulouse II
Département Informatique
1, place Georges Brassens - BP 73
31703 Blagnac Cedex
INRA de Toulouse Midi-Pyrénées
24 Chemin de Borde Rouge
BP 52627
31326 Castanet Tolosan cedex
Rapport de stage
Conception et réalisation d’une interface graphique pour l’implémentation de
modèles à compartiments dans la plate-forme RECORD
Du mardi 10 avril 2012 au vendredi 29 juin 2012
Auteur
Rémy Phelipot(Promotion 2012)
Destinataires
Patrick Chabrier
Iulian Ober
Remerciements
Je remercie tout d’abord Monsieur Regis Sabbadin de m’avoir accueilli dans son unité, ainsi que mon superviseur de stage, Monsieur Patrick Chabrier, pour son aide et son soutien constant.
Je remercie l’iut de Blagnac, pour la qualité de la formation que j’ai eu la chance de suivre, et pour toutes
les compétences que j’ai pu acquérir grâce à eux.
Je remercie également mon tuteur de stage, Monsieur Iulian Ober, pour sa visite.
Enfin, je tiens à remercier ma famille, pour le soutien qu’elle m’a apporté tout au long de ce stage.
2
Table des matières
Introduction
6
1 Présentation de l’entreprise
1.1 INRA . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Histoire . . . . . . . . . . . . . . . . . .
1.1.2 Objectifs actuels . . . . . . . . . . . . .
1.1.3 Quelques exemples de contributions . .
1.2 Site de Toulouse Auzeville . . . . . . . . . . . .
1.2.1 Historique . . . . . . . . . . . . . . . . .
1.2.2 Axes scientifiques . . . . . . . . . . . . .
1.3 Unité BIA . . . . . . . . . . . . . . . . . . . . .
1.3.1 Objectifs . . . . . . . . . . . . . . . . .
1.3.2 Organisation . . . . . . . . . . . . . . .
1.3.3 Quelques logiciels développés par l’unité
1.4 Plateforme RECORD . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
. 7
. 7
. 7
. 8
. 8
. 8
. 9
. 9
. 9
. 9
. 10
. 10
2 Présentation du projet VLE/GVLE
2.1 Objectifs scientifiques . . . . . . . . . .
2.2 Technologies utilisées . . . . . . . . . . .
2.3 Présentation de VLE / GVLE . . . . . .
2.3.1 Le fichier vpz . . . . . . . . . . .
2.3.2 Notion de paquet . . . . . . . . .
2.3.3 GVLE . . . . . . . . . . . . . . .
2.4 Notion de plugins . . . . . . . . . . . . .
2.4.1 Aspects fonctionnels des plugins
2.4.2 Architecture logicielle des plugins
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
11
11
12
12
13
15
15
16
3 Présentation et état initial du projet de stage
3.1 Présentation du sujet de stage . . . . . . . . . .
3.2 Diagramme de Forrester . . . . . . . . . . . . .
3.2.1 Présentation . . . . . . . . . . . . . . .
3.2.2 Éléments d’un diagramme de Forrester .
3.2.3 Exemple . . . . . . . . . . . . . . . . . .
3.3 Objectifs visés par le stage . . . . . . . . . . . .
3.4 État initial du projet . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
18
18
18
19
20
20
21
4 Réalisation du stage
4.1 Moyens à disposition . . . . . . . . . . .
4.2 Moyens et méthodologies mis en œuvre .
4.2.1 Développement Agile . . . . . . .
4.2.2 Git et le processus d’intégration
4.2.3 Coding style . . . . . . . . . . .
4.2.4 Documentation doxygen . . . . .
4.3 Détail du travail effectué . . . . . . . . .
4.3.1 Commit effectués . . . . . . . . .
4.3.2 Code généré par le plugin . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
22
22
22
26
27
27
27
34
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 État final du projet
36
5.1 Diagramme de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2 Fonctionnalités effectivement implémentées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3 Prolongements envisageables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Conclusion
38
3
TABLE DES MATIÈRES
Sources documentaires
39
Annexes
40
Abstract et résumé
48
4
Table des figures
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
Extraits d’un fichier vpz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Structure d’un paquet VLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fenêtre principale de GVLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Boite de dialogue d’édition d’un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Menu de compilation inclus dans gvle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fenêtre de simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de plugin de modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Boite de dialogue proposant la liste des plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ligne des tags pour le plugin Forrester contenant le nom du package du plugin, le nom d’espace, le
nom de la classe générée, et un compartiment avec sa position et ses dimensions. . . . . . . . . . .
.
.
.
.
.
.
.
.
12
13
14
14
15
15
16
16
. 17
3.1
3.2
Les différents éléments d’un diagramme de Forrester . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Diagramme de Forrester représentant les équations de Lotka-Volterra . . . . . . . . . . . . . . . . . . 20
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.17
4.18
Tableau des commandes principales de git . . . . . . . . . . .
Exemple de message de commit . . . . . . . . . . . . . . . . . .
Étapes du processus d’intégration . . . . . . . . . . . . . . . . .
Coding style pour une classe . . . . . . . . . . . . . . . . . . . .
Coding style pour un nom d’espace . . . . . . . . . . . . . . . .
Coding style pour les accolades . . . . . . . . . . . . . . . . . .
Commit de la phase d’initialisation . . . . . . . . . . . . . . . .
Boites de dialogue crées lors du premier commit . . . . . . . . .
Commit d’ajout de la zone de dessin et des classes de modèles .
Boites de dialogue crées ou modifiées lors du deuxième commit
Commit d’ajout des schémas d’intégration . . . . . . . . . . . .
Boites de dialogue crées ou modifiées lors du troisième commit
Commit d’ajout de la gestion des conditions expérimentales . .
Commit d’ajout de la gestion des observations . . . . . . . . . .
Commit de mise à jour de la forme d’un compartiment . . . . .
Commit de changements dans la gestion de la zone graphique .
Fenêtre principale du plugin au commit du 23 mai . . . . . . .
Code généré par le plugin . . . . . . . . . . . . . . . . . . . . .
5.1
Diagramme de classes du projet en fin de stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
25
26
26
27
28
28
29
29
30
30
31
31
32
32
33
34
Introduction
Dans le cadre de ma seconde année de DUT informatique, j’ai effectué un stage à l’Institut National de Recherche
en Agronomie de Toulouse du 10 avril 2012 au 29 juin 2012, et qui s’est déroulé au centre de Toulouse-Auzeville, dans
l’unité BIA (Biométrie et Intelligence Artificielle). Le sujet du stage concernait la conception et le développement
d’un plugin graphique pour un environnement de développement permettant la modélisation et la simulation de
systèmes dynamiques : gvle. Ce plugin doit permettre d’ouvrir gvle à une nouvelle communauté d’utilisateurs
en implémentant un nouveau type de formalisme : les diagrammes de Forrester, qui représentent graphiquement
des équations différentielles. L’objectif du stage était de créer un plugin développé en langage c++ possédant une
zone de dessin permettant d’éditer graphiquement ces diagrammes, et qui configurait de manière automatique
l’environnement de simulation, afin que la tâche de l’utilisateur soit au maximum simplifiée. Le formalisme de
Forrester comprenant de nombreux éléments, le but du stage était avant tout d’initier la conception du plugin
le plus loin possible, afin que d’autres développeurs prennent le relais pour améliorer et ajouter les éléments
manquants.
Afin de vous présenter le travail que j’ai effectué à l’inra durant ce stage, je présenterai dans un premier temps
l’inra et le projet vle/gvle, puis je présenterai dans un deuxième temps le projet de stage. Dans un troisième
temps, je présenterai les différents moyens et méthodes que j’ai utilisés et appliqués durant ce stage, pour enfin
détailler le travail que j’ai effectué.
6
1 Présentation de l’entreprise
Sommaire
1.1
INRA . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Histoire . . . . . . . . . . . . . . . . . . . . .
1.1.2 Objectifs actuels . . . . . . . . . . . . . . . .
1.1.3 Quelques exemples de contributions . . . . .
1.2 Site de Toulouse Auzeville . . . . . . . . . . .
1.2.1 Historique . . . . . . . . . . . . . . . . . . . .
1.2.2 Axes scientifiques . . . . . . . . . . . . . . . .
1.3 Unité BIA . . . . . . . . . . . . . . . . . . . . .
1.3.1 Objectifs . . . . . . . . . . . . . . . . . . . .
1.3.2 Organisation . . . . . . . . . . . . . . . . . .
1.3.3 Quelques logiciels développés par l’unité . . .
1.4 Plateforme RECORD . . . . . . . . . . . . . .
1.1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
7
8
8
8
9
9
9
9
10
10
INRA
1.1.1
Histoire
Mon stage s’est déroulé au sein de l’institut national de recherche agronomique, qui fût créé en 1946 dans le
contexte d’après-guerre afin de moderniser l’agriculture française. Depuis il accompagne les changements du monde
agricole, mais aussi des filières alimentaires afin de répondre aux attentes de la société, par exemple dans le domaine
de la suffisance alimentaire. L’institut se trouve sous la double tutelle du ministère chargé de la Recherche et du
ministère chargé de l’Agriculture. Avec la mondialisation, les prérogatives de l’INRA ont changé. Les changements
d’alimentation de la population, le développement de maladies émergentes 1 , l’érosion de la biodiversité, ainsi que
les progrès que la chimie verte 2 , ont fait prendre aux travaux de l’INRA une dimension mondiale, et les approches
qui permettent de répondre à ces problématiques ne sont plus les mêmes que par le passé.
L’institut possède actuellement un dispositif de recherche décentralisé, et mutualisé comptant prés de 2800
chercheurs, ingénieurs, techniciens et administratifs, ainsi que 2000 doctorants. Ces effectifs sont répartis en 19
centres régionaux et 14 départements scientifiques. L’INRA occupe le deuxième rang mondial et le premier en
Europe pour le nombre de publications en sciences agricoles et en sciences de la plante et de l’animal.
1.1.2
Objectifs actuels
Les objectifs principaux de l’INRA sont les suivants :
– produire et diffuser des connaissances scientifiques dans de nombreux domaines comme les sciences de la
vie, mais aussi dans les sciences économiques et sociales, les mathématiques et l’informatique appliquée, les
sciences de l’environnement, ou les sciences de l’aliment ;
– concevoir des innovations et des savoir-faire pour la société qui permettent le développement d’entreprises
agricoles, industrielles ou de services. De manière générale, l’INRA permet donc de favoriser l’emploi, en
partageant ses découvertes au plus grand nombre ;
– éclairer, par son expertise, les décisions des acteurs publics et privés ;
– développer la culture scientifique et technique et participer au débat science/société ;
– former à la recherche et par la recherche, grâce à l’accueil de doctorant et à des partenariats établis avec de
nombreux établissements de l’enseignement supérieur.
En outre, au terme d’analyses prospectives et de nombreuses consultations auprès de la communauté scientifique
et d’industriels, des chantiers de recherche ont été mis en place pour la période 2010-2020 sur des domaines très
variés :
1. infections nouvelles, causées par l’évolution ou la modification d’un agent pathogène ou d’un parasite existant
2. produits et procédés chimiques permettant de réduire ou d’éliminer l’utilisation et la synthèse de substances dangereuses ou
toxiques.
7
1.Présentation de l’entreprise
– Améliorer toutes les composantes de l’agriculture en conjuguant la performance économique, sociale et la
préservation de l’environnement ;
– Assurer des systèmes alimentaires sains et durables en étudiant les relations de causalités entre l’alimentation
et la santé ;
– Atténuer le réchauffement climatique et s’y adapter ;
– Valoriser la biomasse en synthétisant de nouveaux produits via les biotechnologies, et en analysant les méthodes de production.
1.1.3
Quelques exemples de contributions
Depuis plus de 60 ans, l’INRA a énormément contribué dans le domaine de la recherche sur de nombreux
domaines. Voici quelques-unes de ces contributions :
L’étoile de Choisy
Inscrite au catalogue officiel français en 1950, l’étoile de Choisy 1 est une variété de blé issu de plusieurs croisements entre différentes variétés de blé. Elle allie à la fois une très grande précocité, une forte productivité, une
assez bonne résistance au froid, ce qui a permis un renouveau agricole dans le sud-ouest de la France.
L’ultrafiltration du lait
L’ultrafiltration du lait 2 est un procédé industriel qui permet d’éliminer partiellement les petites molécules
présentes dans le lait. Breveté en 1969, après 14 ans de mise au point, ce procédé est aujourd’hui très utilisé afin
de fabriquer des fromages. L’ultrafiltration est un exemple de coopération entre des scientifiques de l’INRA et
des industriels, puisque ce procédé a été développé avec des chercheurs, mais aussi avec Jean-Claude Guilloteau,
fromager, qui créera quelques années plus tard la société « Fromagerie Guilloteau » qui fabrique encore aujourd’hui
le pavé d’Affinois en utilisant ce procédé.
1.2
Site de Toulouse Auzeville
1.2.1
Historique
Le centre de Toulouse-Auzeville est l’un des 19 centres Inra répartis sur l’ensemble de la métropole. Le centre
compte 950 agents, dont 300 chercheurs, et bénéficie d’une croissance forte depuis sa création en 1970. Il est
actuellement dirigé par Michèle Marin. Le site d’Auzeville est composé de 15 unités de recherches, dont 12 d’entre
elles sont associées avec des universités ou des établissements de l’enseignement supérieur :
AGIR : Agrosystèmes et agriculture, gestion des ressources, innovation et ruralité, en association avec l’inpt 3 ,
l’ensat 4 et eip 5 ;
BIA : Biométrie et intelligence artificielle ;
CEFS : Comportement et écologie de la faune sauvage ;
DYNAFOR : Dynamique et écologie des paysages agroforestiers avec l’inpt, l’ensat, et l’eip ;
GBF : Génomique et biotechnologie des fruits avec l’inpt, et l’ensat ;
GREMAQ : Groupe de recherche en économie mathématique et quantitative avec l’ut1 et le cnrs 6 ;
IHAP : Interaction hôtes agents pathogènes avec l’inpt et l’envt 7 ;
LCA : Laboratoire de chimie agro-industrielle avec inpt et ensiacet 8 ;
LERNA : Laboratoire d’économie des ressources naturelles avec l’ut1 et le cnrs ;
LGC : Laboratoire de génétique cellulaire en association avec l’inpt et l’envt
LIPM : Laboratoire des interactions plantes micro-organismes avec le cnrs ;
LISBP : Laboratoire d’ingénierie des systèmes biologiques et des procédés avec le cnrs et l’insa de Toulouse ;
SAGA : Station d’amélioration génétique des animaux ;
TANDEM : Tissus animaux, nutrition, digestion écosystème et métabolisme avec l’inpt et l’ensat ;
TOXALIM : Toxicité alimentaire avec l’inpt, l’envt, l’eip et l’ut3 ;
1.
2.
3.
4.
5.
6.
7.
8.
http://www.inra.fr/60ans/60_ans_de_resultats/etoile_de_choisy
http://www.inra.fr/60ans/60_ans_de_resultats/l_ultra_filtration_du_lait
Institut National Polytechnique de Toulouse
École Nationale Supérieure d’Agronomie de Toulouse
École d’ingénieur de Purpan
Centre national de la recherche scientifique
École nationale vétérinaire de Toulouse
École nationale supérieure des ingénieurs en arts chimiques et technologiques
8
1.Présentation de l’entreprise
1.2.2
Axes scientifiques
Cinq domaines de recherches principaux sont représentés sur le site de Toulouse Auzeville :
Le génome et l’amélioration des productions
Cet axe de recherche permet de comprendre l’organisation et le fonctionnement de l’ensemble des gènes d’un
organisme, pour ensuite sélectionner ceux qui ont un grand intérêt (au niveau de la qualité, de la résistance, etc.).
Plus d’un tiers des effectifs du centre sont associés à cette mission. Le but de ces recherches est de proposer aux
éleveurs de nouvelles connaissances permettant l’adaptation de leurs produits aux contraintes environnementales.
La sécurité sanitaire des aliments
L’objectif de cet axe de recherche est de développer des connaissances pour comprendre les effets et les mécanismes d’action des produits toxiques sur chaque étape du processus de production alimentaire. Ces travaux
permettent de mettre au point des outils de détection, de connaître les risques des produits, et donc de formuler
des recommandations à l’échelle de l’Union européenne pour obtenir des produits alimentaires toujours plus sains.
La transformation des produits agricoles
Dans une optique de développement durable, cet axe de recherche vise à concevoir des produits (énergie, produits
chimiques, et matériaux) issus de la biomasse 1 . L’optimisation de ces procédés permet des partenariats avec des
industriels afin de mettre au point des technologies nouvelles, saines pour l’environnement et économe en énergie.
L’économie de l’environnement et des marchés
Le but de cet axe de recherche est de créer des outils afin d’aider les pouvoirs économique et financier à anticiper
les attentes de la société sur les sujets environnementaux. Les économistes de l’inra construisent donc des modèles mathématiques afin de simuler des scénarios prospectifs sur les sujets sensibles (changement climatique, taxe
carbone, crise sanitaire) mais aussi dans de nombreux autres domaines (marchés agricoles, filière agroalimentaire).
L’environnement, le territoire et la société
Cet axe de recherche consiste à travailler sur les relations qui existent entre les ressources agricoles et environnementales et les processus de décision humains. Le but de ces travaux est de fournir des outils afin d’améliorer
la gestion de ces ressources et des structures agronomiques tant sur le plan de l’efficacité que du développement
durable.
1.3
Unité BIA
Ayant effectué mon stage dans l’unité bia de l’inra de Toulouse, je vais maintenant vous présenter les objectifs
de cette unité, son organisation et quelques exemples de logiciels développés par leurs soins.
1.3.1
Objectifs
Les objectifs de l’unité bia sont de développer et d’appliquer des méthodes statistiques et d’intelligence artificielle
dans deux domaines principaux :
– l’analyse et la gestion des systèmes de production et des ressources physiques.
– l’analyse de la structure et de la fonction des génomes.
Les recherches concernent la prévision à différentes échelles du comportement d’un système, l’aide à la décision
dans la conduite des systèmes et la bio-informatique. Ces recherches s’accompagnent d’une activité de production
de logiciels et d’une activité de formation pour leur diffusion.
1.3.2
Organisation
L’unité est dirigée par Régis Sabbadin, et est divisée en 2 équipes de recherches : MAD (Modélisation des
Agro-écosystèmes et Décision) et SaAb (Statistiques et Algorithmique pour la Biologie). Elle fait également partie
de 2 plate-formes : GENOTOUL ainsi que RECORD, dans laquelle j’ai effectué mon stage. (voir annexe I)
1. Ensemble des matières organiques d’origine végétale (algues incluses), animale ou fongique pouvant devenir source d’énergie par
combustion
9
1.Présentation de l’entreprise
1.3.3
Quelques logiciels développés par l’unité
Les logiciels produits par l’unité sont à destination des chercheurs de l’inra et de la communauté scientifique,
des biologistes ou bien des agronomes. Citons par exemple :
– Toulbar : outil de résolution pour des réseaux de contraintes pondérées ;
– RNAspace : plateforme d’annotation d’ARN non codant ;
– Eugène et FrameD : logiciels de prédiction de gène ;
– Cathagène : cartographie génétique et carte hybrides irradiées ;
– Milpat : localisation de motifs structurés ;
– MCQTL : détection de QTL
– MDP Toolbox : fonctions MATLAB pour modéliser et résoudre un problème décisionnel de Markov ;
– RECORD : plateforme de modélisation et simulation pour l’aide à la conception et à l’évaluation de système
de culture ;
– DIESE : bibliothèque c++ de développement de simulateurs de systèmes pilotés à l’événement discret.
1.4
Plateforme RECORD
Pour les agronomes, les expérimentations aux champs sont indispensables, mais très coûteuses, longues à mettre
en place et limitées dans leur généricité. Voilà pourquoi depuis plusieurs décennies, l’expérimentation virtuelle à pris
un grand essor dans leur profession, ce qui leur permet de concevoir des systèmes de culture répondant aux enjeux
actuels comme le réchauffement climatique, aux problèmes environnementaux, mais aussi à la sécurité sanitaire.
Afin de faciliter le travail des chercheurs, la plateforme record fut créée en 2006. Son objectif est de répondre
aux besoins des chercheurs dans les domaines de la modélisation et de la simulation de système de culture, en
fournissant des outils permettant l’utilisation de modèles hétérogènes tels que les modèles de plante, les modèles
de sol, les modèles de bioagresseur ou les modèles de décision.
La plateforme s’articule à ce jour autour de 3 axes clés :
– un logiciel de modélisation et de simulation : vle
– des fonctionnalités permettant la connexion dynamique avec des outils tels que R 1 ou le langage de programmation python ;
– une bibliothèque de modèles partagée sur un dépôt web ainsi qu’une documentation de tous ces éléments.
La maintenance, le développement et le fonctionnement de record sont assurés par 3 entités distinctes. L’équipe
record basée à l’unité bia de l’inra de Toulouse s’occupe du développement, de la maintenance et de la formation
des utilisateurs. Le « réseau utilisateurs » de record est chargé des animations de la plateforme. Enfin, le « comité
stratégique » est chargé, comme son nom l’indique, de piloter le projet et de prendre les décisions stratégiques pour
la plateforme.
Chaque année, deux sessions de formation sont organisées pour familiariser les utilisateurs à la plateforme
record et à ses nouveautés.
1. Langage de programmation et environnement mathématique utilisé pour le traitement de données et l’analyse statistique
10
2 Présentation du projet VLE/GVLE
Sommaire
2.1
2.2
2.3
Objectifs scientifiques . . . . . . . . . . . . . .
Technologies utilisées . . . . . . . . . . . . . .
Présentation de VLE / GVLE . . . . . . . . .
2.3.1 Le fichier vpz . . . . . . . . . . . . . . . . . .
2.3.2 Notion de paquet . . . . . . . . . . . . . . . .
2.3.3 GVLE . . . . . . . . . . . . . . . . . . . . . .
2.4 Notion de plugins . . . . . . . . . . . . . . . .
2.4.1 Aspects fonctionnels des plugins . . . . . . .
2.4.2 Architecture logicielle des plugins . . . . . . .
2.1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
11
12
12
13
15
15
16
Objectifs scientifiques
vle (Virtual Laboratory Environment) est un environnement de développement permettant la modélisation et
la simulation de systèmes complexes dynamiques. Développé dans le cadre de la plateforme record (voir partie
1.4), vle propose un ensemble d’outils et de bibliothèques pour modéliser et simuler des modèles hétérogènes
spécifiés dans des formalismes différents.
Le projet est basé sur le formalisme mathématique devs : Discrete Event System Specification, qui décrit les
modèles atomiques comme un ensemble d’états, un ensemble d’entrées et de sorties et une dynamique. Les états
sont pilotés par des fonctions de transitions internes et externes. Les modèles atomiques se connectent entre eux
via les entrées et sorties pour former des modèles couplés, qui peuvent eux-mêmes être couplés à d’autres modèles.
Au sein de l’inra, vle est utilisé afin de modéliser et de simuler des agroécosystèmes qui couvrent différents
niveaux d’organisation spatio-temporelle. En outre, ces systèmes incluent une composante humaine assurant une
fonction de gestion qui influence le système naturel ou artificiel et qui est soumise à des changements plus ou moins
aléatoires (variations de climat, variations de prix, changement de réglementation).
2.2
Technologies utilisées
vle et gvle ont été développés dans le langage de programmation orienté objet c++ en utilisant les bibliothèques standards et multi-plateforme stl. Ils utilisent également la bibliothèque boost 1 qui est libre, multiplateforme et gratuite afin de faciliter le développement en ajoutant, par exemple, de nouveaux outils pour effectuer
des calculs complexes. L’interface graphique a été développée en gtkmm 2 , avec l’aide de l’éditeur graphique glade 3 .
glade permet de concevoir graphiquement des interfaces graphiques gtk en enregistrant ou éditant un fichier xml.
Grâce à l’utilisation de ces différents éléments libre et multi-plateforme, Le logiciel vle est exécutable sur de
nombreux systèmes d’exploitation différents et possède des paquets pour les distributions linux les plus courantes
comme Debian, Ubuntu, RedHat, Fedora, Mandriva et Suse, ainsi qu’un installateur windows.
Enfin, vle utilise le moteur de production 4 cmake, qui permet d’automatiser la génération de l’exécutable et
l’installation du logiciel sur toutes les plateformes, mais aussi de compiler des paquets vle, comme nous allons le
voir dans la partie suivante.
2.3
Présentation de VLE / GVLE
vle est un logiciel en ligne de commande permettant d’effectuer des simulations de modèles dynamiques. La
conception des modèles s’effectue notamment par la création de classes c++ qui permettent de définir pour chaque
modèle une dynamique temporelle, mais aussi en configurant le fichier vpz(fichier xml) du projet. Afin d’aider au
1. http://www.boost.org/
2. http://www.gtkmm.org/en/
3. http://glade.gnome.org/
4. Logiciel dont la fonction principale consiste à automatiser l’ensemble des actions permettant d’obtenir un ensemble logiciel à
partir du code source.
11
2.Présentation du projet VLE/GVLE
maximum les utilisateurs, le projet gvle vise à cacher la configuration du fichier vpz et les étapes de configurations
et de compilation, grâce à une interface graphique, ce qui permet d’ouvrir la plateforme à un plus grand nombre
d’utilisateurs. L’utilisation de vle est donc complètement indépendante de gvle.
2.3.1
Le fichier vpz
Le fichier vpz est un fichier xml permettant de décrire les éléments d’une expérience. Il permet de définir la
structure des modèles, les conditions expérimentales, ainsi que les éléments observés et la méthode d’observation.
1
2
3
4
5
<model name="a" type="atomic" dynamics="dynamicA"
conditions="conditionA" observables="obsA">
<in> <port name="..." /> </in>
<out> <port name="..." /> </out>
</model>
6
7
8
9
<dynamics>
<dynamic name="dynamicA" library="big" model="tutu" />
</dynamics>
10
11
12
13
14
15
<conditions>
<condition name="conditionA">
<port name="..."> <double>34.23</double> </port>
</condition>
</conditions>
16
17
18
19
20
21
22
23
24
25
26
<views>
<outputs>
<output name="outputa" format="distant|local" location="host:port"
plugin="text|rdata|csv|cairo..." />
</output>
</outputs>
<observables>
<observable name="obsA"> <port name="x"> <attachedview name="viewA" /> </port>
</observable>
</observables>
27
28
29
<view name="viewA" type="timed|event|finish" output="outputa" timestep="0.5" />
</views>
Figure 2.1 – Extraits d’un fichier vpz
Comme on peut le voir dans la figure 2.1, les balises « <model> », « <conditions> », « <observables> » permettent de décrire les principales informations qui concernent un modèle. Toutefois, l’utilisation de ce fichier vpz
par les utilisateurs n’est pas aisée, voilà pourquoi gvle permet de gérer ce fichier de manière automatisée.
2.3.2
Notion de paquet
Pour faciliter la gestion des projets de modélisation de l’utilisateur, vle utilise un système de paquet (aussi
appelé projet) qui permet de séparer les différents travaux. Les paquets sont enregistrés dans un dossier particulier,
qui diffère selon le système d’exploitation de l’utilisateur (’/home/username/.vle/pkgs’ pour les systèmes Linux).
En outre, chaque projet possède une structure commune que nous allons détailler.
12
2.Présentation du projet VLE/GVLE
Figure 2.2 – Structure d’un paquet VLE
Les différents dossiers permettent d’organiser le contenu du paquet de façon rationnelle, en voici leur signification :
build : Dossier contenant les fichiers intermédiaires issus de la compilation du paquet ;
cmake : Ce dossier contient les différents éléments nécessaires à la compilation du paquet sous forme de bibliothèque ;
doc : Répertoire contenant la documentation du paquet, et notamment une documentation html générée lors de
la compilation du paquet(documentation doxygen) ;
exp : Ce répertoire contient les différentes expériences du projet, ce qui correspond à un fichier vpz par expérience.
lib : Ce dossier contient les bibliothèques dynamiques générées lors de la compilation du paquet, il s’agit de fichier
« .so » sous linux et « .dll » sous windows ;
output : Répertoire contenant les fichiers de sortie des expériences ;
plugins : Dossier présent uniquement dans le cas où le paquet contient un plugin de modélisation (voir partie 2.4),
il contient les librairies et les fichiers d’execution propre au plugin ;
src : Contient les fichiers sources des différents modèles (code c++) ;
test : Dossier contenant des classes c++ de tests, qui sont exécutées à la fin de la chaîne de compilation afin de
déterminer si le comportement des modèles est correct.
Afin de faciliter la compilation des paquets, vle propose une ligne de commande permettant d’automatiser ce
processus :
vle -P nom_du_paquet configure build
2.3.3
GVLE
gvle est une interface graphique pour vle. Elle permet de simplifier la création, l’édition et la simulation de
modèles.
Fenêtre principale
La fenêtre principale (voir figure 2.3) est composée d’une zone graphique qui permet de créer des modèles,
d’ajouter des ports d’entrée ou de sortie, et de relier les modèles entre eux. Pour accéder à ce diagramme, il suffit
de créer ou de charger un paquet, et d’ouvrir une expérience (fichier vpz). Pour l’éditer , les boutons présents dans
la barre d’outils permettent d’ajouter (bouton « Add models ») et de supprimer des modèles(bouton « Delete »),
mais aussi de relier les modèles entre eux(bouton « Add links »). Enfin, La liste présente dans la partie droite de la
fenêtre principale permet de visualiser l’ensemble des modèles du diagramme, et de les modifier ou de les renommer.
13
2.Présentation du projet VLE/GVLE
Figure 2.3 – Fenêtre principale de GVLE
La fenêtre principale permet également de visualiser le contenu du paquet grâce à l’arbre présent dans sa partie
gauche, ce qui permet de connaître l’état exact du projet sans quitter l’environnement de développement. En outre,
gvle permet d’éditer les fichiers textes en appliquant si cela est nécessaire une coloration syntaxique, notamment
pour les fichiers c++.
Fenêtre d’édition d’un modèle
En double cliquant sur un modèle dans la zone de dessin ou la liste des modèles, une boite de dialogue apparaît
et permet d’éditer ses différentes caractéristiques DEVS (voir figure 2.4).
Figure 2.4 – Boite de dialogue d’édition d’un modèle
L’onglet « Ports » permet d’ajouter ou de modifier les ports d’entrées et de sortie du modèle, qui seront utilisés
par la suite pour le connecter à d’autres modèles dans la fenêtre principale. L’onglet « Conditions » contient les
conditions expérimentales du modèle, ce qui peut correspondre par exemple à des valeurs initiales de variables, ou à
la spécification d’un pas de temps pour les calculs. L’onglet « Dynamics » contient la dynamique propre au modèle,
ce qui correspond à son comportement et décrit les changements d’état qui seront opérés lors de la simulation.
Cette dynamique correspond à une classe c++ que l’utilisateur doit écrire. Toutefois, les plugin de modélisation
visent à faciliter cette étape en générant la classe. Enfin, l’onglet « Observables » permet de choisir les éléments
qui seront dans le fichier de sortie après simulation, ce qui correspond au résultat de l’expérience.
14
2.Présentation du projet VLE/GVLE
Compilation du paquet
gvle permet aux utilisateurs de compiler leur paquet de manière graphique via un menu de la fenêtre principale
(figure 2.5). Il permet de configurer, de compiler et d’installer les bibliothèques dynamique dans le paquet, et
génère automatique la documentation doxygen. Il permet également de nettoyer le paquet, c’est à dire du supprimer
tout les fichiers intermédiaires de la compilation.
Figure 2.5 – Menu de compilation inclus dans gvle
Simulation
Après avoir compilé le paquet, l’utilisateur à la possibilité de lancer la simulation grâce à une boite de dialogue
(figure 2.6). Elle permet de choisir différent façon de simuler, par exemple en proposant le choix d’effectuer la
simulation en local sur le poste de travail de l’utilisateur, ou bien en ligne.
Figure 2.6 – Fenêtre de simulation
2.4
Notion de plugins
Le but de vle est de simuler des systèmes complexes, l’utilisateur doit donc être en mesure de manipuler des
modèles atomiques ou non atomiques permettant de représenter de façon précise un problème. Afin de répondre à
ce besoin, vle permet soit d’utiliser des modèles existants, soit de créer son propre modèle. Il existe deux moyens
dans gvle pour créer un modèle : développer une classe C++ utilisant le formalisme devs, ou alors utiliser un
plugin de modélisation permettant de générer une classe c++ d’un certain formalisme.
2.4.1
Aspects fonctionnels des plugins
Les plugin de modélisation sont des paquets de gvle qui permettent à l’utilisateur de générer, avec l’aide d’une
interface graphique, le code C++ d’un modèle utilisant un formalisme particulier. En effet il suffit de manipuler
une interface graphique qui peut se présenter comme une série de champs de saisie (voir figure 2.7(a)), ou un espace
de dessin (voir figure 2.7(b)), pour générer le code source correspondant.
15
2.Présentation du projet VLE/GVLE
(a) Plugin d’équation aux différences
(b) Plugin de diagramme d’état
Figure 2.7 – Exemple de plugin de modélisation
Les plugins permettent donc à l’utilisateur :
– d’éviter de programmer en C++
– de générer le code C++ d’un modèle
– de générer les ports d’entrées et de sorties
– de générer les ports des conditions expérimentales (valeurs initiales des variables par exemple) et d’observations
– de fournir une logique spécifique à un formalisme en particulier
La classe C++ générée par le plugin hérite d’une classe générique propre au formalisme utilisé, et qui permet
d’effectuer les calculs.
2.4.2
Architecture logicielle des plugins
Point d’entrée dans gvle
Le plugin de modélisation est lancé à partir du menu « dynamics » de la fenêtre d’édition d’un modèle (voir
figure 2.4). En choisissant ce plugin parmi la liste disponible (voir figure 2.8)ou bien en double cliquant sur un
modèle existant l’utilisant, la fenêtre principale du plugin sera lancée, et permettra d’éditer la dynamique. Lors
de la fermeture du plugin, celui-ci générera la classe c++ correspondant au modèle, et configurera les conditions
expérimentales et les éléments observables (manipulation du fichier vpz).
Figure 2.8 – Boite de dialogue proposant la liste des plugins
16
2.Présentation du projet VLE/GVLE
Patron de conception MVC
Les plugins de modélisations ont été conçus en utilisant le patron de conception (ou design pattern) modèlevue-contrôleur. L’architecture mvc permet de diviser le plugin en 3 parties :
1. la vue : qui correspond à l’interface avec laquelle l’utilisateur interagit ;
2. le modèle : qui correspond à la gestion des données et de leur intégrité ;
3. le contrôleur : qui permet de gérer la vue et les données.
Dans un plugin de gvle, la vue est gérée grâce à une ou plusieurs classes c++, mais aussi par un fichier xml. En
effet, le projet utilise gtkmm, une bibliothèque permettant de créer des interfaces graphiques, et qui permet leurs
conceptions grâce à un logiciel graphique : « Glade 1 ». Après avoir conçu l’interface via « glade », un fichier xml
est sauvegardé. Ce fichier xml sera utilisé par le plugin pour dessiner les différentes interfaces graphiques.
Le modèle est géré dans gvle grâce à une ou plusieurs classe c++, et parmi celles-ci une classe permet de garder
en mémoire l’ensemble des informations du formalisme utilisé (Statechart pour le plugin de diagramme d’état par
exemple).
Enfin, il n’existe pas dans les plugin de gvle une classe contrôleur à proprement parler, celui-ci est en effet distribué
dans les classes d’interface graphique.
Classe générique ModelingPlugin
La classe « ModelingPlugin » est une classe abstraite permettant de créer un plugin pour gvle. Elle définit un
socle de méthodes virtuelles pures 2 qui permet à gvle d’exécuter le plugin. Ces méthodes sont :
– create : Appelée dans le but de créer un nouveau modèle atomique ;
– modify : Appelée dans le but d’éditer un modèle atomique existant ;
– start : Permet de lancer les interfaces graphiques.
Génération du code C++
Les plugins utilisent un « template » afin de générer le code C++ correspondant à un modèle. Ce « template »
contient la structure commune à toutes les classes C++ générées par le plugin. Le « template » est composé de
plusieurs parties, la première est la ligne des « tags » (voir figure 2.9) . Cette ligne permet de sauvegarder des
informations essentielles pour l’édition du modèle, elle permet par exemple de sauvegarder le nom de la classe,
les positions et caractéristiques des éléments graphiques du plugin (largeur, hauteur, position pour un état d’un
diagramme d’état par exemple). La ligne des « tags » est chargée automatiquement à chaque édition d’un modèle
existant, et est sauvegardée lorsque tous les changements faits par l’utilisateur sont achevés.
@@tag Forrester@vle.extension.differentialEquation
@@namespace :nomEspace ;class :classe ;634|400 ;c :comp1,275,151,71,25|
Figure 2.9 – Ligne des tags pour le plugin Forrester contenant le nom du package du plugin, le nom d’espace, le
nom de la classe générée, et un compartiment avec sa position et ses dimensions.
1. http ://glade.gnome.org/
2. à redéfinir obligatoirement dans les classes dérivées
17
3 Présentation et état initial du projet
de stage
Sommaire
3.1
3.2
Présentation du sujet de stage . . . . . . . .
Diagramme de Forrester . . . . . . . . . . . .
3.2.1 Présentation . . . . . . . . . . . . . . . . . .
3.2.2 Éléments d’un diagramme de Forrester . . . .
3.2.3 Exemple . . . . . . . . . . . . . . . . . . . . .
3.3 Objectifs visés par le stage . . . . . . . . . . .
3.4 État initial du projet . . . . . . . . . . . . . .
3.1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
18
18
19
20
20
21
Présentation du sujet de stage
Le sujet du stage concernait la conception et la réalisation d’une interface graphique pour l’implémentation
de modèles à compartiments dans la plateforme RECORD (voir annexe II). Il s’agissait donc de développer
un plugin pour gvle qui implémentait les diagrammes de Forrester, un formalisme particulier permettant de
représenter graphiquement des équations différentielles. Cette implémentation devait être effectuée en c++, avec
le support des bibliothèques graphiques gtkmm et cairo, ainsi que de la bibliothèque boost.
Le stage devait se dérouler sous un mode de développement agile, c’est à dire avec un développement de type
itératif, chaque itération ayant ses étapes de conception, de développement, de test et de documentation. Le projet
de stage était très fortement ancré dans le monde du logiciel libre, puisque d’une part vle est un logiciel sous
licence gnu gpl 1 mais aussi car le processus de développement utilise de nombreux logiciels libres, citons par
exemple :
– le système d’exploitation des postes de travail : ubuntu, qui est un système linux libre et gratuit ;
– l’utilisation de git, logiciel de gestion de version très répandu dans les projets libres ;
– gtkmm et cairo, qui sont des bibliothèques libres et gratuites sous licence lgpl ;
– la bibliothèque boost qui est également libre et gratuite.
3.2
Diagramme de Forrester
3.2.1
Présentation
Les diagrammes de Forrester 2 permettent de représenter graphiquement des modèles à base d’équations différentielles, ce qui facilite la compréhension de systèmes complexes grâce à une approche visuelle. De façon plus
concrète, ces diagrammes font apparaître la façon dont des éléments affectent des flux et par quelles relations ces
éléments sont reliés. Ainsi, il est possible par exemple de modéliser dans le cadre d’un diagramme de Forrester, un
modèle représentant les naissances et les décès de prédateurs et de proies. De manière générale, les diagrammes de
Forrester sont utilisés pour étudier comment des écosystèmes fonctionnent.
Les diagrammes de Forrester sont composés de différents éléments que nous allons détailler (figure 3.1), puis
nous illustrerons ces diagrammes avec un exemple.
1. Cette licence permet à tout utilisateur d’exécuter le logiciel pour n’importe quel usage, d’étudier son fonctionnement et de
l’adapter à ses besoin en modifiant le code source fourni par le développeur, de redistribuer des copies, de diffuser les versions modifiées
à la communauté.
2. Jay Wright Forrester, né en 1918, il est un pionnier américain en informatique et un théoricien des systèmes.
18
3.Présentation et état initial du projet de stage
3.2.2
Éléments d’un diagramme de Forrester
Représentation
graphique
Nom
Description
Niveau ou compartiment
Représente une accumulation de flux : une variable
d’état
Flux
Variation d’un niveau, il représente un changement
de l’état du système
Canal matériel
Canal d’information
Canal de transmission d’une grandeur physique qui
se conserve
Canal de transmission d’une certaine information
qu’il n’est pas nécessaire de conserver
Nuage
Représente une source ou un puit, il correspond à un
niveau inépuisable ou insaturable
Variable auxiliaire
Une quantité d’une certaine signification du monde
physique dans le monde réel et avec un temps de
réponse instantané
Constante
Un élément du modèle qui ne change pas de valeur
Variable exogène
Variable dont l’évolution est indépendante de celle
du système, elle représente une influence de l’environnement sur le système.
Retard
Un élément qui simule des retards dans la transmission de l’information ou du matériel
Figure 3.1 – Les différents éléments d’un diagramme de Forrester
19
3.Présentation et état initial du projet de stage
3.2.3
Exemple
Figure 3.2 – Diagramme de Forrester représentant les équations de Lotka-Volterra
Le diagramme de Forrester suivant représente les équations de Lotka-Volterra qui constituent un modèle proiesprédateurs. Nous pouvons observer différents éléments dans ce diagramme : d’une part les compartiments qui
désignent les variables d’état (X pour les proies et Y pour les prédateurs) ; d’autre part les flux qui sont soit
en entrée des compartiments, ou bien en sortie ; les paramètres (a, b, c, d) ; et enfin les dépendances qui sont
représentées par les flèches pointillées entre les compartiments et les flux. Les équations correspondantes à ce
diagramme sont :
0
X (t) = aX(t) − bX(t)Y (t)
Y 0 (t) = −cY (t) + dX(t)Y (t)
On peut observer qu’un flux entrant sur le compartiment apporte de la « matière » à ce compartiment, ce
qui correspond à une valeur positive dans l’équation (aX(t) ou bien dX(t)Y(t)). À l’inverse un flux sortant d’un
compartiment enlèvera de la « matière » de celui ci, ce qui correspond à une valeur négative dans l’équation
(bX(t)Y(t) ou cY(t)).
Les flèches pointillées permettent de faire apparaître les ressources utilisées par les flux : les paramètres (a, b,
c, d) et les variables d’état X et Y.
3.3
Objectifs visés par le stage
Le but principal du projet était, avant tout, d’initier le développement du plugin afin que d’autres développeurs
puissent le poursuivre (la durée d’un stage n’étant pas suffisante). Les objectifs précis du projet furent fixés durant
les premières semaines du stage. Le travail a été subdivisé en taches permettant à chaque étape d’obtenir une
version fonctionnelle du plugin. Le but final du projet était d’obtenir une version du plugin permettant l’ajout et
la modification d’un modèle basé sur le formalisme de Forrester. Ce modèle devait être simulable et pouvoir varier
en fonction du temps (modèle non constant).
Afin de répondre à ces objectifs, les spécificités fonctionnelles et techniques suivantes devaient être réalisées :
– la gestion de la zone graphique : dessin des éléments, gestion des événements souris, rafraîchissement,
– la gestion de la persistance de la zone graphique (sauvegarde et rechargement des données graphiques, comme
par exemple la taille d’un compartiment ou sa position),
– la gestion des données du modèle (caractéristiques des compartiments et des flux, schéma d’intégration),
20
3.Présentation et état initial du projet de stage
– l’ajout, la suppression et la modification de compartiments et de flux,
– l’édition des « includes » personnalisés de l’utilisateur,
– la configuration du fichier vpz pour permettre la simulation.
Des objectifs secondaires ont également été formulés comme la nécessité d’utiliser un style particulier pour le
texte du code source du plugin (voir partie 4.2.3), ou bien le fait de documenter le code source avec des commandes
doxygen.
3.4
État initial du projet
Avant de débuter la conception et le développement du plugin, l’équipe de vle avait déjà implémenté quelques
fonctionnalités qui permirent de concentrer les efforts sur la partie graphique du plugin.
D’une part la classe générique « DifferentialEquation » héritant de « vle::devs::Dynamics » avait déjà été développée. Cette classe est utilisée comme classe parente des classes c++ générées par le plugin, et permet d’effectuer
les calculs nécessaires lors des simulations.
Par ailleurs, d’autres plugins utilisant une zone de dessin avaient été créés, notamment le plugin implémentant
les diagrammes d’état (statechart), ce qui permis de s’en servir de source d’inspiration au début du stage, et de
faciliter grandement la conception et le développement.
21
4 Réalisation du stage
Sommaire
4.1
4.2
Moyens à disposition . . . . . . . . . . . . . .
Moyens et méthodologies mis en œuvre . . .
4.2.1 Développement Agile . . . . . . . . . . . . . .
4.2.2 Git et le processus d’intégration . . . . . . .
4.2.3 Coding style . . . . . . . . . . . . . . . . . .
4.2.4 Documentation doxygen . . . . . . . . . . . .
4.3 Détail du travail effectué . . . . . . . . . . . .
4.3.1 Commit effectués . . . . . . . . . . . . . . . .
4.3.2 Code généré par le plugin . . . . . . . . . . .
4.1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
22
22
26
27
27
27
34
Moyens à disposition
Afin de nous aider dans la réalisation de ce stage, l’inra et l’unité bia a mis à notre disposition un certain
nombre d’outils matériels ou virtuels.
Tout d’abord, le poste de travail que nous avions à notre disposition était sous un système d’exploitation linux :
Ubuntu. La version de ce système utilisé à l’unité BIA était légèrement modifiée par rapport la version d’origine
car le compte utilisateur était stocké sur un serveur, à la manière du cloud computing, ce qui permettait de se
connecter à sa session à partir de n’importe quel ordinateur de l’unité. Le fait de travailler sous un système linux
a également grandement facilité le développement du projet, d’une part à cause des technologies utilisées par vle
comme gtkmm, cmake, boost qui sont facilement installable et utilisable sous ce système, et d’autre part car le
terminal (console) et les scripts shell permettent d’effectuer très rapidement des opérations répétitives comme la
compilation du projet, ou l’utilisation de git.
Par ailleurs, l’inra a mis à notre disposition une adresse email, que nous pouvions utiliser pour communiquer
avec les autres développeurs, ainsi qu’un intranet pour se tenir informer de la vie de l’unité, et de signaler les
éventuels retards ou empêchements. Enfin, nous avions accès à un chat irc nous permettant de poser nos éventuelles
questions aux autres développeurs de vle.
4.2
Moyens et méthodologies mis en œuvre
4.2.1
Développement Agile
Pour mener ce projet à bien, nous avons mis en place un cycle de développement s’inspirant des méthodes
AGILE. Nous effectuions des réunions régulières afin de définir les fonctionnalités à implémenter. En outre, nous
devions effectuer un développement itératif, chaque itération possédait ses objectifs et devait aboutir à une version
stable du plugin. Enfin, nous utilisions un site internet : mulcyber, qui permettait de spécifier un certain nombre
de taches qui correspondant chacune à une itération.
4.2.2
Git et le processus d’intégration
vle est un logiciel développé en mode collaboratif, associant plusieurs développeurs. Afin de garantir un processus de développement rigoureux et durable, une organisation a plusieurs niveaux d’intégration est en place.
le système de gestion de version GIT autorise de nombreux mode d’organisation. Dans ce chapitre nous allons
introduire GIT, ainsi que l’utilisation qui en fait dans le cadre de VLE
Généralités
git est un logiciel de gestion de version créé par Linus Torvalds 1 en 2005. Ce logiciel permet de conserver
l’historique des modifications apportées dans le développement d’un logiciel. Il est ainsi plus aisé de savoir quel
développeur a effectué une modification, quand il a effectué, et surtout en quoi consistait cette modification.
1. Créateur du noyau linux en 1991.
22
4.Réalisation du stage
git est plus particulièrement un logiciel de gestion de version décentralisé, cette caractéristique apporte de
nombreux avantages par rapport à d’autres systèmes de gestion de version. En effet git permet de :
– travailler de manière désynchronisée par rapport aux autres membres du projet ;
– travailler en mode hors-ligne ;
– donner aux développeurs une plus grande liberté, puisque leurs modifications ne peuvent affecter que leurs
dépôts
Fonctionnement
Afin de mieux expliquer comment git est utilisé dans le cadre du projet vle, il convient tout d’abord de définir
quelques concepts importants :
Un dépôt est un espace où sont conservées toutes les modifications apportées au code source du logiciel.
Un commit est une structure de donnée permettant de sauvegarder les informations concernant les changements
qui ont été apportés dans le code source. En outre, un commit contient d’autres informations importantes
comme le nom du développeur, la date, l’état du projet, ainsi qu’un message permettant d’éclaircir le but du
commit.
Une branche est une fonctionnalité permettant d’avoir plusieurs versions de travail dans un même dépôt, sans que
ces modifications entrent en conflits. Les branches permettent de séparer la version principale du programme,
des versions de travail, elles permettent également de travailler sur plusieurs fonctionnalités de manière
simultanée.
git est un logiciel fonctionnant en ligne de commandes, en voici quelques-unes qui sont couramment utilisées pour
récupérer ou enregistrer des modifications du code source.
git
git
git
git
git
clone adresse
branch nomdelabranche
checkout nomdelabranche
add fichier dossier
commit
git push
git fetch
git rebase
Effectue une copie locale d’un dépôt existant.
Créé une nouvelle branche dans le dépôt local.
Fait changer de branche.
Ajoute des fichiers ou dossiers pour le prochain commit.
Enregistre dans le système de gestion de version toutes les modifications ajoutées au projet. Un message de commit est créé, dans lequel il faut indiquer les
modifications apportées.
Envoi les commit sur un dépôt distant.
Met à jour le dépôt local avec une version d’un dépôt distant. Cette mise à
jour ne modifie pas l’état actuel du dépôt.
Permet de repositionner le dépôt dans un état différent, par exemple à un état
plus récent après un git fetch.
Figure 4.1 – Tableau des commandes principales de git
Dans le cadre du projet vle, et afin de rendre plus clair les messages de commit, ceux-ci doivent être écrit d’une
façon particulière (voir Figure 4.2). La première ligne du commit doit résumer les modifications apportées et ne
doit pas dépasser 50 caractères. Après une ligne blanche, le reste du message de commit permet de détailler les
modifications.
GFS2 : Allow caching of rindex glock
This patch allows caching of the rindex glock. We were previously setting the
GL_NOCACHE bit when the glock was released. That forced the rindex inode to
be invalidated, which caused us to reread rindex at the next access. However, it caused the
glock to be unnecessarily bounced around the cluster. This patch allows the glock to remain
cached, but it still causes the rindex to be reread once it has been written to by gfs2_grow.
Figure 4.2 – Exemple de message de commit
Utilisation dans le processus d’intégration
L’utilisation de git est omniprésente dans le développement de vle. Tout d’abord, le code source de la dernière
version stable est disponible grâce au dépôt public situé sur sourceforge 1 .
1. http ://sourceforge.net/projects/vle
23
4.Réalisation du stage
Au sein de l’vle, les développeurs disposent de dépôts privés accessibles sur le site internet de vle 1 , mais aussi
d’un dépôt local sur leur machine.
Il existe une hiérarchie pyramidale au sein des développeurs de vle qui permet de faciliter l’intégration des
nouvelles modifications au sein du projet (voir Figure 4.3). Patrick Chabrier est en charge de l’intégration des
modifications apportées à l’interface graphique GVLE. Gauthier Quesnel est le responsable scientifique et opérationnel de vle, il est chargé d’effectuer l’intégration des modifications apportées par les autres développeurs à la
version stable de vle.
Utilisation GIT durant le développement
Il existe 2 versions du logiciel vle : une version stable, et une version de développement. Durant ce stage,
le développement du plugin de modélisation s’est effectué sur une version en développement, car de nombreuses
modifications ont été apportées depuis la dernière version stable, et que la compatibilité du plugin entre ces 2
versions n’aurait pas été possible.
L’utilisation de git pendant le stage s’est déroulé en plusieurs étapes, et suit de près le processus d’intégration :
1. copie d’un dépôt d’une version de développement de vle sur le dépôt local : git clone ;
2. récupération des nouveautés de l’intégrateur : git fetch et git rebase ;
3. envoi des modifications sur le dépôt privé : git push ;
4. développement des nouvelles fonctionnalités ou corrections : git commit ;
5. envoi sur le dépôt privé des modifications : git push ;
6. contact par mail de l’intégrateur, afin qu’il teste les nouveautés ;
7. Refus ou acceptation des nouveautés par l’intégrateur, retour à l’étape 2.
1. http ://vle-project.org/git
24
4.Réalisation du stage
SourceForge
Dépot public
Version stable
Récupération des
modifications des
intégrateurs
Intégrateur :
Gauthier Quesnel
vle-project.org
Dépots publics
Versions de développement
Version intégration GVLE
Intégrateur :
Patrick Chabrier
Dépôt développeur
Dépot local
Mise à jour de la version
locale du developpeur
Version developpement
Developpeur
Développement
(modifications)
Figure 4.3 – Étapes du processus d’intégration
25
Publication des
modifications
4.Réalisation du stage
4.2.3
Coding style
Afin de garantir une homogénéité du code source du projet vle, certaines règles de formatage on été mises
en place pour le code source du projet : le coding style. Ces règles permettent une relecture aisée du code source,
et concernent par exemple les indentations, les espaces, ou bien le nommage des éléments. Durant ce stage, nous
avons du appliquer les règles suivantes :
Ordre des éléments d’une classe c++
1
2
#ifndef THENAMESPACE_CLASS_HPP
#define THENAMESPACE_CLASS_HPP 1
3
4
namespace thenamespace {
5
6
7
8
9
10
11
class Class : virtual, public, protected, private class1, class2
{
public:
typedefs ...
variables ... // Public attributes are rare.
functions ...
12
13
14
15
16
protected:
typedefs ...
variables ...
functions ...
17
18
19
20
21
22
private:
typedefs ...
variables ...
functions ...
};
23
24
25
} // namespace thenamespace
#endif
Figure 4.4 – Coding style pour une classe
Il existe un ordre spécifique afin de définir une classe. Les éléments de la classe doivent être placés selon leur
visibilité, de la manière suivante : tout d’abord les éléments publics, protégés, puis privés ; et dans ces domaines de
visibilité, les premiers éléments doivent être les « typedef », les variables puis les fonctions. Cet ordre permet de
voir rapidement les fonctionnalités de la classe.
Toutes les classes et les fonctions doivent être rattachées à un « nom d’espace » (namespace) afin d’éviter
d’encombrer le nom d’espace principal (std). En outre, un nom d’espace doit obligatoirement correspondre à un
dossier du projet.
Règles de nommage
Les noms d’espace doivent être écrits en minuscule, de même que les dossiers auxquels ils correspondent par
exemple :
1
2
3
namespace examples { namespace generator {
...
}}
Figure 4.5 – Coding style pour un nom d’espace
La première lettre d’une classe doit être une majuscule, et la première lettre d’une fonction doit être écrite en
minuscule. Enfin les attributs d’une classe doivent commencer par un « m » minuscule.
26
4.Réalisation du stage
Règles de mise en page
Afin d’obtenir un code source lisible, la largeur du document est fixée à 80 caractères. Pour les mêmes raisons,
une fonction ne peut dépasser les 50 lignes. Enfin l’indentation du texte est fixée à 4 caractères.
Règles pour les accolades
1
2
3
4
5
int fonction(int x)
{
if (x == y) {
...
}
6
do {
...
} while (condition);
7
8
9
10
if (x == y) {
...
} else if (x > y) {
...
} else {
...
}
11
12
13
14
15
16
17
18
switch (test.getX()) {
case 0:
...
break;
case 1:
{
...
}
default:
...
}
19
20
21
22
23
24
25
26
27
28
29
30
}
Figure 4.6 – Coding style pour les accolades
Les accolades doivent être placées selon la définition de Kernighan et Ritchie : une accolade se trouve sur l’instruction
de la ligne, sauf dans le cas d’une fonction et du case.
4.2.4
Documentation doxygen
Nous avons du mettre en œuvre durant ce stage une documentation doxygen. Cette documentation est placée
sous forme de commentaires dans le code source du plugin au niveau des classes, des méthodes et des attributs. Elle
permet de générer une documentation html contenant le détails de ces éléments, mais aussi des graphes d’appels
de fonctions et des outils de recherche permettant à un développeur étranger au projet de facilement trouver les
éléments qui l’intéresse.
4.3
Détail du travail effectué
4.3.1
Commit effectués
Afin de rendre compte de façon exhaustive du travail effectué, nous allons détailler et commenter le contenu de
chaque commit du projet de stage.
27
4.Réalisation du stage
Phase d’initialisation
commit b54d5f63ca1abb28e67929c832821d7efd66ffa8
Author : Remy Phelipot <Remy.Phelipot@toulouse.inra.fr>
Date : Thu Apr 19 13 :07 :06 2012 +0200
gvle/modeling : start the Forrester modeling plugin
To start the implementation of the first version of Forrester modeling
plugin, we have provided a minimal gui. This gui can generate a
buildable c++ class which implements a differential equation. The
include field is enabled and insert custom include lines in c++ code.
- A minimal Plugin class is added, with a basic template.
- A dialog class is added.
- An include button and a source dialog are added.
- A source code generator method is added.
- Parse methods are added, to reload an existing generated class.
- The Forrester.glade file is added.
- Doxygen documentation fields are added.
Signed-off-by : Patrick Chabrier <patrick.chabrier@toulouse.inra.fr>
Figure 4.7 – Commit de la phase d’initialisation
Ce premier commit a été effectué après la phase d’initialisation des premières semaines du stage, le 19 avril.
Il correspond à un niveau de fonctionnalité minimum, c’est à dire à la génération d’un modèle (génération du
code c++ et gestion de la persistance des informations du plugin). Afin d’accélérer le développement, une grande
partie du code source a été repris d’un plugin existant : fsa qui implémente des diagrammes d’état. Les éléments
implémentés par ce commit sont les suivants :
– une classe « plugin » permettant d’interfacer le plugin avec gvle, ainsi que de générer le code c++ du modèle
grâce à un template(voir annexe III),
– une fenêtre principale permettant de piloter le plugin (figure 4.10(a)),
– une fenêtre permettant d’éditer les includes de la classe générée (figure 4.10(b)).
(a) Fenêtre principale du plugin au commit du 19 avril
(b) Fenêtre de personnalisation des includes
Figure 4.8 – Boites de dialogue crées lors du premier commit
28
4.Réalisation du stage
Ajout de la zone de dessin et des classes de modèles
commit ef7935d2f62b19fe0988692a07b2be9f0350a4b5
Author : Remy Phelipot <Remy.Phelipot@toulouse.inra.fr>
Date : Thu Apr 26 09 :29 :59 2012 +0200
Add a Forrester drawing area and its management
To create Forrester diagrams, we add a drawing area and its management
in the project. To save all components of Forrester diagrams, we add a
model class : "Forrester". We also add several gui classes to get
informations about a Forrester compartment.
Complete list of changes :
- The drawing area in the Forrester dialog is added.
- A model class to store informations about a Forrester diagram is added.
- A model class to store informations about a Forrester compartment is added
- The Drawing area management in source file generator is added.
- A dialog to get the compartment name is added.
- "select", "add", and "delete" actions for compartments are added.
Signed-off-by : Patrick Chabrier <patrick.chabrier@toulouse.inra.fr>
Figure 4.9 – Commit d’ajout de la zone de dessin et des classes de modèles
Ce deuxième commit effectué le 29 avril a permis d’ajouter la zone de dessin, ainsi que l’implémentation des
compartiments des diagrammes de Forrester. Une fois encore, une partie du code source a été repris du plugin fsa
afin d’accélérer le développement. Les fonctionnalités suivantes ont été ajoutées au plugin lors du commit :
– une zone graphique de dessin a été ajoutée, pour permettre l’édition du diagramme ;
– des classes modèles ont été ajoutées afin de stocker les informations du diagramme et des compartiments ;
– la persistance de la zone graphique à été ajoutée, ce qui permet de recharger un diagramme en éditant le
modèle ;
– une fenêtre d’édition des compartiments a été ajoutée.
(a) Fenêtre principale du plugin au commit du 19 avril
(b) Fenêtre de saisie du nom d’un
compartiment
Figure 4.10 – Boites de dialogue crées ou modifiées lors du deuxième commit
29
4.Réalisation du stage
Ajout du choix des schémas d’intégration
commit 1921bdd29da36f8068fc37fd3903f1470fca0b7b
Author : Remy Phelipot <Remy.Phelipot@toulouse.inra.fr>
Date : Mon May 7 12 :55 :27 2012 +0200
Add the integration scheme management
Adding the support of Euler, RK4 and RSS2 integration method in
Forrester plugin. In the same time, we allow user to double click in
the drawing area, so it is now possible to edit the name (and the
timestep if the choosen integration method is RSS2) of a compartment.
Complete list of changes :
- Several windows to handle the name and the time step of a
compartment are added.
- The double click support in the drawing area is added.
- The treatment of the conditions (saving and reloading) is added.
- ’NewForresterDialog’ class is renamed ’NewCompartmentDialog’.
- The Forrester.glade file is cleaned.
- The Timestep field is added in the model of compartments.
- The CMakeLists file is updated.
Signed-off-by : Patrick Chabrier <patrick.chabrier@toulouse.inra.fr>
Figure 4.11 – Commit d’ajout des schémas d’intégration
Le troisième commit a été effectué le 7 mai. Les fonctionnalités implémentées permettent à l’utilisateur de choisir
son schéma d’intégration (méthode de calcul lors des simulations). En fonction du schéma d’intégration choisi,
l’utilisateur peut modifier grâce à une boite de dialogue un pas de temps global, ou bien un deltaQ propre à chaque
compartiment pour le mode d’intégration QSS2. Ce dernier choix a entraîné des modifications dans la fenêtre
d’édition des compartiments, pour permettre la saisie de ce deltaQ.
(a) Fenêtre principale du plugin au commit du 7 mai
(b) Fenêtre d’édition d’un (c) Fenêtre de saisie du pas de
compartiment
temps global
Figure 4.12 – Boites de dialogue crées ou modifiées lors du troisième commit
30
4.Réalisation du stage
Ajout de la gestion des conditions expérimentales
commit ea0edb72225fdb140e781a55dc34e894cfc3fb10
Author : Remy Phelipot <Remy.Phelipot@toulouse.inra.fr>
Date : Fri May 11 10 :39 :22 2012 +0200
Add experimental condition management
We add the management of experimental conditions, so it’s now possible
to initialize each variables of the Forrester diagram.
Complete list of changes :
- A spin button in the dialog of the compartment is added.
- The experimental conditions management (saving and reloading) is added.
- Some g++ debug flags to the CMakeList are added.
- Some constructors are fixed, the attributes were not initialized in
the right order.
- The settings of variables in the plugin template is added.
Signed-off-by : Patrick Chabrier <patrick.chabrier@toulouse.inra.fr>
Figure 4.13 – Commit d’ajout de la gestion des conditions expérimentales
Ce commit datant du 11 mai ajoute l’initialisation des compartiments avec une valeur initiale. Ces valeurs sont
sauvegardées dans le fichier vpz de vle. Une nouvelle fois, la fenêtre d’édition des compartiments a été modifiée
afin de permettre la saisie de cette valeur.
Ajout de la gestion des observations
commit f49100601bd386fd82881b04c4ad85bff40f3f23
Author : Remy Phelipot <Remy.Phelipot@toulouse.inra.fr>
Date : Mon May 14 15 :56 :54 2012 +0200
Add observable value support
The implementation of observable values to the Forrester plugin is
added. The generated classes can now be simulated (all variables have
a constant value).
Complete list of changes :
- The implementation of observable values is added.
- The name check of the compartment to test if the name is a numeric
or not is fixed.
Signed-off-by : Patrick Chabrier <patrick.chabrier@toulouse.inra.fr>
Figure 4.14 – Commit d’ajout de la gestion des observations
Les modifications incluent dans ce commit datant du 14 mai permirent, pour a première fois depuis le début
du projet, d’obtenir un modèle simulable avec vle. L’implémentation des observables(flux de sortie lors de la
simulation) était effectivement la dernière étape pour arriver à ce but. Par ailleurs, de légères modifications ont été
apportées à la vérification du nom d’un compartiment, afin que celui ci ne soit pas un chiffre, ce qui provoquait un
bug lors de la compilation du modèle généré.
31
4.Réalisation du stage
Mise à jour de la forme d’un compartiment
commit a68a751994c81edd1cee027dd8bd5f16ce7ac062
Author : Remy Phelipot <Remy.Phelipot@toulouse.inra.fr>
Date : Tue May 15 14 :25 :11 2012 +0200
Update the shape of the Forrester compartment
The Forrester compartment has now a rectangular form. We did also
improve the compartment focus, when we displace it or click on it.
Complete list of changes :
- The shape of compartments(background color have also changed) is
updated.
- The focus of the compartment is changed, selected compartment is now
always visible.
Signed-off-by : Patrick Chabrier <patrick.chabrier@toulouse.inra.fr>
Figure 4.15 – Commit de mise à jour de la forme d’un compartiment
Ce commit du 15 mai changea la forme des compartiments dans la zone graphique, qui était jusqu’à présent de la
même forme que les états du diagramme d’état (plugin fsa). En outre, lors de la sélection d’un compartiment, celui
ci passe au premier plan, ce qui a changé la manière de dessiner la zone graphique (le compartiment sélectionné
étant dessiné en dernier).
Changements dans la gestion de la zone graphique
commit e6d7edf56d8268d29bc56e9a4120f0e0a7086c31
Author : Remy Phelipot <Remy.Phelipot@toulouse.inra.fr>
Date : Wed May 23 17 :26 :05 2012 +0200
Add a graphical item abstract class and flows
To improve the creation of new graphical items, we add an abstract
class called "GraphicalItem", and several sub-classes : "Compartment",
"Flow", and "ForresterGI". The previous code has been adapted to this
new model. Finaly, the user can now add a flow to the forrester
diagram.
Complete list of changes :
- A new abstract class for graphical items is added.
- Several inherited classes of this new abstract class are added.
- The previous treatment of the drawing area to fit the new model is
modified.
- 2 new folders of the project (graphicalItems and dialogs) are added.
- A new graphical item, the Flow is available.
- A dialog and a class to modify the name of a Flow is available.
- A new button in the main window to add a flow is added.
Signed-off-by : Patrick Chabrier <patrick.chabrier@toulouse.inra.fr>
Figure 4.16 – Commit de changements dans la gestion de la zone graphique
Ce commit effectué le 23 mai apporte de nombreux changements dans la gestion de la zone graphique et des différents
traitements associés. La création d’une classe abstraite pour les éléments graphiques fut un élément central des
modifications, puisqu’il permit d’utiliser le polymorphisme afin de dessiner tous les éléments graphiques. En outre,
le traitement de la sauvegarde des éléments a été également modifié via l’utilisation du downcast (voir annexe VI),
afin de déterminer à quelle classe appartient un élément. Par ailleurs, ce commit ajoute un nouvel élément à la
zone de dessin : les flux qui permettent de faire varier le modèle dans le temps.
32
4.Réalisation du stage
Figure 4.17 – Fenêtre principale du plugin au commit du 23 mai
33
4.Réalisation du stage
4.3.2
1
2
3
4
5
6
7
8
Code généré par le plugin
/**
* @file dsqdsq.cpp
* @author ...
* ...
* @@tag Forrester@vle.extension.differentialEquation
@@namespace:test3;class:Test;400|400;c:c1,271,265,71,25|
;f:f1,35,306,72,20;@@end tag@@
*/
9
10
#include <vle/extension/differentialEquation/DifferentialEquation.hpp>
11
12
//@@begin:include@@
13
14
15
16
17
//@@end:include@@
namespace vd = vle::devs;
namespace ve = vle::extension::differentialEquation;
namespace vv = vle::value;
18
19
namespace test3 {
20
21
22
23
24
25
26
27
28
29
30
class Test : public ve::DifferentialEquation
{
public:
Test(
const vd::DynamicsInit& init,
const vd::InitEventList& evts)
: ve::DifferentialEquation(init, evts)
{
c1 = createVar("c1");
}
31
32
33
34
35
virtual void compute(const vd::Time&)
{
grad(c1) = 0;
}
36
37
38
virtual ~Test()
{ }
39
40
41
42
private:
Var c1;
};
43
44
} // namespace test3
45
46
DECLARE_DYNAMICS(test3::Test)
Figure 4.18 – Code généré par le plugin
Le code généré par le plugin Forrester peut être divisé en 2 parties : les tags (commentaires en en-têtes du
fichier) et la classe c++.
Les tags permettent de sauvegarder les informations importantes du plugin, et sont rechargées à l’édition d’un
modèle. On peut observer dans cet exemple : le nom de la classe générée « Test », le nom d’espace « test3 », la taille
de la zone graphique « 400|400 », la position et les dimensions des compartiments et des flux : « c :c1,271,265,71,25| »
et « f :f1,35,306,72,20 ».
Dans la classe c++, on retrouve les compartiments, définis par des attributs Var et initialisés dans le constructeur de la classe. La méthode compute est utilisée lors de la simulation, et contient les équations différentielles du
diagramme de Forrester. On peut remarquer que dans cet exemple, elles ne varient pas dans le temps (grad(c1) =
0), car les liens entre les flux et les compartiments n’ont, à l’heure actuelle, pas été implémentés (cet ajout sera
34
4.Réalisation du stage
présent avant la fin du stage).
La classe c++ est générée à partir d’un template (voir annexe III). Ce fichier contient des balises, par exemple
« for i in compartments » qui sont remplacées par des informations ciblées. À la fermeture du plugin, ce traitement
de remplacement des balises est effectué, ce qui permet d’obtenir une classe en langage c++, et qui est compilable
par vle.
35
5 État final du projet
Sommaire
5.1
5.2
5.3
5.1
Diagramme de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctionnalités effectivement implémentées . . . . . . . . . . . . . . . . . . . . . . . . .
Prolongements envisageables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
37
37
Diagramme de classe
Figure 5.1 – Diagramme de classes du projet en fin de stage
Ce diagramme de classe représente une partie du travail que j’ai pu effectuer lors de mon stage. Nous pouvons
y voir la classe abstraite graphicalItem, qui permet de définir des éléments graphiques comme les compartiments et
les flux. Cette classe regroupe un certain nombre de membres et de méthodes communs à tous ces éléments, citons
par exemple :
– les coordonnées et les dimensions de l’élément : membres x , y, width et height
– une méthode permettant de dessiner l’élément sur la zone graphique : méthode draw
– une méthode permettant de savoir si l’élément a été sélectionné par un clic de l’utilisateur : méthode select
La classe Forrester permet de sauvegarder l’état du plugin. Elle contient un vecteur d’élément graphique (de
type GraphicalItem), le schéma d’intégration choisi par l’utilisateur, et des méthodes permettant d’ajouter ou de
supprimer des éléments graphiques du vecteur.
36
5.État final du projet
La classe Plugin est la pièce centrale de l’architecture logicielle. Elle est instanciée par gvle, et permet de
recharger et sauvegarder les données, mais aussi de lancer l’interface graphique. Cette classe possède également un
template qui permet de générer le code c++ associé au diagramme. Le template est utilisé grâce à une bibliothèque
propre à gvle, et est constitué de balises qui sont remplacées par les informations nécessaires lors de la fermeture
du plugin. Après la génération, on obtient donc une classe c++ du modèle compilable.
Enfin, la classe ForresterDrawingArea est une classe purement graphique qui permet de gérer la zone de dessin.
Elle permet de dessiner tous les éléments constitutifs du diagramme, mais aussi de gérer les actions de l’utilisateur,
comme les différents clics souris.
En nous plaçant du point de vue du modèle MVC, nous pouvons dire que les classes modèles sont représentées
par les classes Forrester, ainsi que toutes les classes filles de GraphicalItem. Ces classes contiennent toutes les
données du diagramme, et sont utilisées lors du rechargement et de la sauvegarde, mais aussi lors de l’édition du
diagramme. Les classes « vues » sont représentées par la classe ForresterDrawingArea, mais aussi les classes gérant
les boites de dialogue comme CompartmentDialog et FlowDialog.
5.2
Fonctionnalités effectivement implémentées
Au terme de ce projet de stage, la majorité des objectifs explicités dans la partie 3.3 ont été remplis. Le plugin de
modélisation que j’ai développé permet la gestion d’une zone de dessin implémentant les diagrammes de Forrester,
la configuration de l’environnement vle/gvle (modification du fichier vpz), ainsi que la génération du code c++
du modèle associé au diagramme.
Voici la liste exhaustive des fonctionnalités de la dernière version stable du projet de stage :
– l’utilisateur a la possibilité de créer un diagramme de Forrester en ajoutant des compartiments et des flux à
la zone de dessin ;
– l’utilisateur peut choisir un schéma d’intégration pour son modèle : euler, Rk4 et Qss2. En fonction du schéma
d’intégration choisi, il a la possibilité de choisir un pas de temps pour l’intégration (méthode d’intégration
Euler et Rk4), ou bien un deltaQ pour la méthode d’intégration Qss2 ;
– l’utilisateur peut intégrer directement dans le plugin des includes particuliers, ce qui lui permettra d’utiliser
d’autres classes ou types dans son modèle.
– Le plugin génère le code c++ du modèle, et sauvegarde dans ce même fichier des informations lui permettant
de recharger le modèle ;
– Le plugin configure le simulateur gvle (fichier vpz), ce qui permet de lancer la simulation sans configuration
de l’utilisateur
La dernière version de développement du plugin (version instable), permet la connexion des compartiments et
des flux grâce à des flèches. Les diagrammes de cette version pourront donc générer des modèles non constants, ce
qui constituera une première version intéressante pour les utilisateurs de l’inra. Cette version sera finalisée d’ici la
fin du stage, le 29 juin 2012.
5.3
Prolongements envisageables
Comme nous avons pu le voir dans la partie présentant les diagrammes de Forrester, ces diagrammes possèdent
de nombreux éléments. À l’heure actuelle, seuls les compartiments et les flux sont implémentés dans le plugin, il
reste donc encore de nombreux autres éléments à ajouter pour que les modélisateurs puissent créer des diagrammes
de Forrester complets. D’autre part, des améliorations en terme d’ergonomie sont encore possibles, par exemple
en mettant en place un système de zoom afin d’adapter la zone graphique à la convenance de l’utilisateur, mais
aussi en facilitant la visualisation des caractéristiques d’un élément graphique grâce à une infobulle. Le stage ne
permettant que de lancer le développement du plugin, il reste encore beaucoup de travail à effectuer sur ce projet.
37
Conclusion
Le stage que j’ai effectué à l’inra de Toulouse m’a beaucoup apporté. D’une part il m’a fait découvrir le
domaine de la modélisation des systèmes dynamiques et le domaine de la recherche agronomique en général,
que je ne connaissais pas jusqu’à présent. D’autre part il m’a permis de m’améliorer dans le langage c++ que
j’avais déjà commencé à pratiquer à l’iut de Blagnac. Ce stage m’a également beaucoup apporté au niveau des
compétences en conception et développement d’interface graphique et de dessin vectoriel, et m’a permis de découvrir
les bibliothèques Gtkmm et cairo.
Travailler dans le monde du logiciel libre, de par les outils utilisés dans le développement (ubuntu et git par
exemple) et la nature même du projet vle/gvle, a été une expérience enrichissante et m’a motivé pour participer
à d’autre développement du monde libre. Par ailleurs, le domaine de la recherche que j’ai côtoyé durant ce stage
m’a également beaucoup intéressé, et m’a interpellé quant à la possibilité de travailler dans ce domaine dans le
futur. Ainsi je pense continuer à me tenir informé concernant les opportunités d’effectuer une thèse ou bien de
travailler dans ce domaine : la recherche fondamentale restant encore un domaine abstrait pour moi, je souhaiterai
participer aux développements d’applications en relation avec le monde de la recherche.
Enfin, le fait de passer d’un contexte scolaire à un contexte professionnel m’a permis de progresser, de par les
responsabilités j’ai pu prendre lors du stage, mais aussi grâce au travail en équipe et aux relations de travail que
j’ai pu établir.
En conclusion, ce stage de fin d’études de dut informatique a été très enrichissant, tant sur le plan personnel
que professionnel, et m’a conforté dans mon projet professionnel : devenir ingénieur en informatique, afin d’acquérir
les compétences scientifiques et techniques nécessaire à ce genre de projet.
38
Sources documentaires
Sites internet
• inra (en ligne). inra, 2009, mis à jour le 7 juin 2012 (consulté le 8 juin 2012).
Disponible sur : http://www.inra.fr
• vle (en ligne). vle, 2012, mis à jour le 21 mai 2012 (consulté le 8 juin 2012).
Disponible sur : http://www.vle-project.org/wiki/Main_Page
• record (en ligne). inra, 2012, mis à jour le 4 juin 2012 (consulté le 8 juin 2012).
Disponible sur : http://www4.inra.fr/record
• Site des développeurs Gnome (en ligne). The GNOME Project, 2005-2011 (consulté le 24 mai 2012).
Disponible sur : http://developer.gnome.org
• Site officiel de Cairo (en ligne)(consulté le 24 mai 2012).
Disponible sur : http://www.cairographics.org/
Articles encyclopédique
• Wikipédia, l’encyclopédie libre (en ligne). Fondation Wikimedia, 2003- (consulté le 8 juin 2012). Jay Wright
Forrester. Disponible sur : http://fr.wikipedia.org/wiki/Jay_Wright_Forrester
• Wikipédia, l’encyclopédie libre (en ligne). Fondation Wikimedia, 2003- (consulté le 31 mai 2012). DEVS.
Disponible sur : http://fr.wikipedia.org/wiki/Devs
39
Annexes
Tables des annexes
I
II
III
IV
V
VI
Organigramme de l’unité Bia en janvier 2012
Offre de stage . . . . . . . . . . . . . . . . . . . .
Exemple de template du projet . . . . . . . . .
Méthode create de la classe Plugin . . . . . . .
Méthode modify de la classe Plugin . . . . . .
Méthode generateSource de la classe Plugin .
40
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
42
43
44
45
46
I
Organigramme de l’unité Bia en janvier 2012
41
II
Offre de stage
Sujet de stage informatique 2012
Conception et réalisation d’une interface graphique pour l’implémentation de
modèles à compartiments dans la plateforme RECORD
Lieu : Unité de recherche INRA de Biométrie et Intelligence Artificielle (UR875 BIA)
Chemin de Borde-Rouge-Auzeville
BP 52627 - F-31326 Castanet-Tolosan cedex, France
Contacts :
– Patrick Chabrier patrick.chabrier@toulouse.inra.fr (INRA Toulouse, UR875 BIA, F-31325 Castanet-Tolosan, France)
– Olivier Martin Olivier.Martin@agroparistech.fr (INRA AgroParisTech, UMR791 MoSAR, F-75005 Paris, France)
– Hélène Raynal Helene.Raynal@toulouse.inra.fr (INRA Toulouse, UR875 BIA, F-31325 Castanet-Tolosan, France)
Contexte
Le travail proposé se situe dans le cadre du projet RECORD 1 dont l’objectif est de développer une plate-forme
informatique de modélisation et de simulation pour l’aide à la conception et à l’évaluation des systèmes de production.
Cette plate-forme vise à devenir un outil commun qui facilite le développement, le partage et la réutilisation des modèles
à l’INRA 2 . La plateforme RECORD est construite sur la base du logiciel libre VLE 3 qui constitue un environnement
informatique de multi-modélisation et de simulation reposant sur le formalisme de bas niveau DEVS 4 . Son utilisation se
fait à travers l’interface graphique GVLE. Dans l’optique d’ouvrir l’utilisation de la plateforme à une nouvelle communauté d’utilisateur, une voie d’amélioration concernant l’utilisation de la plateforme pour la construction de modèles de
systèmes dynamiques reposant sur des équations différentielles ou modèles dits à compartiments a été identifiée.
Objectif du stage
Développement d’une nouvelle extension de l’interface graphique GVLE permettant d’éditer un diagramme de type
Forrester 5 et de générer une classe C++ dérivant de celle des équations différentielles disponible au sein de VLE.
– Analyse et spécification des fonctionnalités de modélisation graphique en utilisant le logiciel ModelMaker 6 .
– Étude de l’existant et définition d’une stratégie de réutilisation.
– Conception et programmation de l’interface graphique.
Les développements seront effectués dans le cadre d’un processus de développement logiciel agile et OpenSource
préétabli, en utilisant à la fois des outils de génie logiciel (GIT, SourceForge) et des bibliothèques standards (Boost,
Glade, gtkmm).
Compétences demandées & profil
Langage de programmation C++, Modélisation conceptuelle, Méthodes du génie logiciel. Goût pour le développement
logiciel et en particulier des interfaces graphiques. Intérêt concernant le domaine de la modélisation et la simulation des
systèmes dynamiques. Le candidat devra justifier d’un niveau équivalent Master I en informatique.
Le travail donne droit à une indemnité de stage de 400e/mois.
1.
2.
3.
4.
5.
6.
Rénovation et CooRDination de la modélisation de cultures pour la gestion des agro écosystèmes,http ://www4.inra.fr/record
Institut national de la recherche agronomique, http ://www.inra.fr/
Virtual Laboratory Environment, http ://www.vle-project.org
Discrete EVent Specification, Zeigler, B.P., 1976. Theory of Modeling and Simulation. Wiley Interscience.
Forrester, J.W., 1977. Principles of Systems. MIT Press.
Citra, M. J. (1997). Modelmaker 3.0 for Windows. Journal of Chemical Information and Modeling, 37(6), 1198-1200.
42
III
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Exemple de template du projet
const std::string PluginForrester::TEMPLATE_DEFINITION =
"/**\n"
"␣␣*␣@file␣{{classname}}.cpp\n"
"␣␣*␣@author␣...\n"
"␣␣*␣...\n"
"␣␣*␣@@tag␣Forrester@vle.extension.differentialEquation␣"
"@@namespace:{{namespace}};"
"class:{{classname}};{{width}}|{{height}};"
"c:{{for␣i␣in␣compartments}}"
"{{compartments^i}}|"
"{{end␣for}};"
"f:{{for␣i␣in␣flows}}"
"{{flows^i}}|"
"{{end␣for}};"
"fa:{{for␣i␣in␣flowsArrows}}"
"{{flowsArrows^i}}|"
"{{end␣for}};"
"@@end␣tag@@\n"
"␣␣*/\n\n"
"#include␣<vle/extension/differentialEquation"
"/DifferentialEquation.hpp>\n\n"
"//@@begin:include@@\n"
"{{include}}\n"
"//@@end:include@@\n"
"namespace␣vd␣=␣vle::devs;\n"
"namespace␣ve␣=␣vle::extension::differentialEquation;\n"
"namespace␣vv␣=␣vle::value;\n\n"
"namespace␣{{namespace}}␣{\n\n"
"class␣{{classname}}␣:␣public␣ve::DifferentialEquation\n"
"{\n"
"public:\n"
"␣␣␣␣{{classname}}(\n"
"␣␣␣␣␣␣␣const␣vd::DynamicsInit&␣init,\n"
"␣␣␣␣␣␣␣const␣vd::InitEventList&␣evts)\n"
"␣␣␣␣:␣ve::DifferentialEquation(init,␣evts)\n"
"␣␣␣␣{\n"
"{{for␣i␣in␣createVar}}"
"␣␣␣␣␣␣␣␣{{createVar^i}}\n"
"{{end␣for}}"
"␣␣␣␣}\n\n"
"␣␣␣␣virtual␣void␣compute(const␣vd::Time&)\n"
"␣␣␣␣{\n"
"{{for␣i␣in␣equations}}␣"
"␣␣␣␣␣␣␣{{equations^i}}\n"
"{{end␣for}}"
"␣␣␣␣}\n\n"
"␣␣␣␣virtual␣~{{classname}}()\n"
"␣␣␣␣{␣}\n\n"
"private:\n"
"{{for␣i␣in␣definitionVar}}"
"␣␣␣␣{{definitionVar^i}}\n"
"{{end␣for}}"
"};\n\n"
"}␣//␣namespace␣{{namespace}}\n\n"
"DECLARE_DYNAMICS({{namespace}}::{{classname}})\n\n";
43
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
IV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Méthode create de la classe Plugin
bool PluginForrester::create(vpz::AtomicModel& model,
vpz::Dynamic& /*dynamic*/,
vpz::Conditions& conditions,
vpz::Observables& observables,
const std::string& classname,
const std::string& namespace_)
{
//Initialisation du plugin
std::string conditionName((fmt("cond_DTE_%1%") % model.getName()).str());
mForrester = new Forrester(classname);
mView->setForrester(mForrester);
//create conditions
vpz::Condition condition(conditionName);
mForrester->integrationScheme(Forrester::EULER);
15
//Lancement de l interface graphique
if (mDialog->run() == Gtk::RESPONSE_ACCEPT)
{
//Generation du code c++ du modele
generateSource(classname, namespace_);
generateCondition(conditions, model);
generateExperimentalConditions(conditions, model);
generateObservable(model,observables);
mDialog->hide();
destroy();
return true;
}
else
{
mDialog->hide();
destroy();
return false;
}
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
}
44
V
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Méthode modify de la classe Plugin
bool PluginForrester::modify(vpz::AtomicModel& model,
vpz::Dynamic& /*dynamic*/,
vpz::Conditions& conditions,
vpz::Observables& observables,
const std::string& conf,
const std::string& buffer)
{
//Recuperation des informations contenue dans
//la ligne des tags du fichier c++
std::string namespace_;
std::string classname;
strings_t lst;
//Class name & namespace
boost::split(lst, conf, boost::is_any_of(";"));
parseConf(lst, classname, namespace_);
mForrester = new Forrester(classname);
//Width & Heigth
strings_t wh;
boost::split(wh, lst[2], boost::is_any_of("|"));
mForrester->getForresterGI().setWidth(
boost::lexical_cast < unsigned int > (wh[0]));
mForrester->getForresterGI().setHeight(
boost::lexical_cast < unsigned int > (wh[1]));
loadConditions(lst[3]);
loadFlows(lst[4]);
loadFlowsArrow(lst[5]);
//Includes
mInclude.assign(parseFunction(buffer, "//@@begin:include@@",
"//@@end:include@@", "include"));
//Recuperation des informations de l environnement vle (vpz)
setIntegrationModeFromCondition(conditions, generateConditionName(model));
32
setIntegrationTimeStep(conditions, generateConditionName(model));
loadInitialValues(conditions, generateConditionName(model));
33
34
35
mView->setForrester(mForrester);
//Lancement de l interface graphique
if (mDialog->run() == Gtk::RESPONSE_ACCEPT)
{
//Generation du code c++ du modele/Configuration de l environnement
generateSource(classname, namespace_);
generateCondition(conditions, model);
generateExperimentalConditions(conditions, model);
generateObservable(model,observables);
mDialog->hide();
destroy();
return true;
}
else
{
mDialog->hide();
destroy();
return false;
}
return true;
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
}
45
VI
1
2
3
4
5
6
7
8
9
10
11
12
13
Méthode generateSource de la classe Plugin
void PluginForrester::generateSource(const std::string& classname,
const std::string& namespace_)
{
utils::Template tpl_(TEMPLATE_DEFINITION);
tpl_.stringSymbol().append("namespace", namespace_);
tpl_.stringSymbol().append("classname", classname);
tpl_.stringSymbol().append("width",
boost::lexical_cast < std::string > (
mForrester->getForresterGI().getWidth()));
tpl_.stringSymbol().append("height",
boost::lexical_cast < std::string > (
mForrester->getForresterGI().getHeight()));
tpl_.stringSymbol().append("include", mInclude);
14
15
16
17
18
19
20
21
tpl_.listSymbol().append("compartments");
for (graphical_items::const_iterator it = mForrester->getItems().begin();
it != mForrester->getItems().end(); ++it)
{
if (CompartmentGI* item = dynamic_cast<CompartmentGI*>(*it))
tpl_.listSymbol().append("compartments", item->toString());
}
22
23
24
25
26
27
28
29
30
tpl_.listSymbol().append("flows");
for (graphical_items::const_iterator it = mForrester->getItems().begin();
it != mForrester->getItems().end(); ++it)
{
//downcast
if (FlowGI* item = dynamic_cast<FlowGI*>(*it))
tpl_.listSymbol().append("flows", item->toString());
}
31
32
33
34
35
36
37
tpl_.listSymbol().append("flowsArrows");
for (std::list<FlowArrow*>::const_iterator it = mForrester->getFlowArrow().begin();
it != mForrester->getFlowArrow().end(); ++it)
{
tpl_.listSymbol().append("flowsArrows", (*it)->toString());
}
38
39
40
41
42
43
44
45
46
tpl_.listSymbol().append("createVar");
for (graphical_items::const_iterator it = mForrester->getItems().begin();
it != mForrester->getItems().end(); ++it)
{
if (CompartmentGI* item = dynamic_cast<CompartmentGI*>(*it))
tpl_.listSymbol().append("createVar", item->getName() + "␣=␣" +
"createVar(\"" + item->getName() + "\");");
}
47
48
49
50
51
52
53
54
55
tpl_.listSymbol().append("equations");
for (graphical_items::const_iterator it = mForrester->getItems().begin();
it != mForrester->getItems().end(); ++it)
{
if (CompartmentGI* item = dynamic_cast<CompartmentGI*>(*it))
tpl_.listSymbol().append("equations",
"grad(" + item->getName() + ")␣=␣0;");
}
56
57
58
59
60
tpl_.listSymbol().append("definitionVar");
for (graphical_items::const_iterator it = mForrester->getItems().begin();
it != mForrester->getItems().end(); ++it)
{
46
if (CompartmentGI* item = dynamic_cast<CompartmentGI*>(*it))
tpl_.listSymbol().append("definitionVar",
"Var␣" + item->getName() + ";");
61
62
63
}
64
65
std::ostringstream out;
tpl_.process(out);
mSource = out.str();
66
67
68
69
}
47
Abstract et résumé
Abstract
My professionnal training took place at the INRA, the French agronomic research institute, and more precisely
at the BIA unity (biology and artificial intelligence) of Toulouse Auzeville from the 10th April 2012 to the 29th
June 2012.
I was involved in the creation of a plugin to the existing software : GVLE. GVLE is a modeling and simulating development environment based on the discrete event formalism DEVS 1 , it is a base of the "RECORD"
platform and allows INRA researchers to model and simulate complex models.
To extend the audience of the platform, I had to implement into the plugin a new modeling formalism : the
Forrester 2 diagrams. These diagrams allow users to model differential equations in a graphical way.
To realize this project, I used c++ language, the gtkmm/cairo graphical libraries, and the model-view-controler
design pattern. My work consisted in designing and developing a drawing area which enable users to create and edit
Forrester diagrams. Furthermore, I had to configure the gvle environement with the model informations. Finaly, I
provided the c++ code generation of the associated model.
1. DEVS formalism was invented by Dr. Bernard P. Zeigler in 1976.
2. Jay Wright Forrester is a pioneer American computer engineer and a systems scientist.
48
Résumé
La plateforme record, initiée en 2006, a pour but de faciliter la mise au point et l’utilisation de modèles de
culture, ainsi que d’améliorer la qualité et l’efficacité des modélisations au sein de l’inra. Elle vise à permettre
l’utilisation de modèles hétérogènes, issus de milieux scientifiques différents, comme l’agronomie, la science du sol,
la bioclimatologie, la physiologie végétale, l’épidémiologie, les sciences de la gestion, les statistiques ou les mathématiques appliquées. Dans le cadre de cette plateforme, le logiciel vle, basé sur le formalisme mathématique devs 1 ,
a pour objectif de répondre aux attentes des chercheurs, des ingénieurs, et des modélisateurs, afin de proposer un
logiciel permettant la création, l’utilisation, et l’expérimentation virtuelle des modèles.
L’environnement de développement gvle propose une interface graphique pour vle afin d’aider et d’assister les
utilisateurs dans leur travail. Elle permet la création et l’édition graphique de modèles, un éditeur de code source,
la configuration et l’exécution des simulations. Dans le but de faciliter la modélisation, gvle peut être enrichi grâce
à des plugin, qui permettent d’ajouter la gestion de formalismes particuliers, comme par exemple les diagrammes
d’état.
Dans l’optique d’ouvrir la plateforme record à de nouveaux utilisateurs, l’ajout d’un plugin implémentant les
modèles à compartiments (aussi appelés diagrammes de Forrester 2 ) a été décidé. Les diagrammes de Forrester permettent de représenter graphiquement des modèles à base d’équations différentielles en faisant apparaître la façon
dont des éléments affectent des flux et par quelles relations ces éléments sont reliés. Les modèles à compartiments
sont couramment utilisés pour d’étudier le fonctionnement des écosystèmes.
L’objectif du stage consistait en la conception et la réalisation d’un plugin pour gvle permettant la création et
l’édition de diagramme de Forrester, ainsi que la génération de code C++ du modèle associé et la configuration de
l’environnement vle. Le travail de développement s’est articulé autour d’une zone de dessin permettant d’éditer
les diagrammes de façon simple, rapide et ergonomique.
1. Discrete EVent Specification, Zeigler, B.P., 1976. Theory of Modeling and Simulation. Wiley Interscience
2. Jay Wright Forrester, né en 1918, est un pionnier américain en informatique et un théoricien des systèmes.
49
50
Download