[Next] [Previous] [Up] [Top]

chapitre 6 Le décideur, son organisation et son environnement

6-2.2 Un langage de simulation pour la simulation discrète des systèmes dynamiques


Etant donné que nous désirons intégrer les modèles de simulation mathématique à des modèles de simulation orientée objets et à des techniques de modélisation d'intelligence artificielle, nous avons opté pour le modèle initial de Forrester (73) qui possède une grande souplesse et qui est très facile à implémenter. Le cadre théorique développé dans "Industrial Dynamics" possède encore aujourd'hui un attrait conceptuel auprès de beaucoup d'analystes de système qui font des recherches appliquées
*1. En effet, ses notions de niveau et de flux sont assimilables très rapidement et l'on voit plus facilement le rapport entre un modèle de simulation et l'objet modélisé qu'avec d'autres techniques. Pour nos propres besoins, nous avons un écrit un interpréteur en Scheme qui permet d'exécuter un modèle de simulation (ayant les équations déjà résolues). Il possède une grande souplesse. L'interaction avec d'autres programmes et la modification du modèle (même totale) en cours de route ne pose pas de grands problèmes. Examinons les objets que l'on utilise et qui ressemblent à peu près à ceux que l'on retrouve dans un modèle "dynamo":

Ces éléments ont plus une signification conceptuelle qu'une signification technique. Sur ce dernier plan, seul l'ordre dans lequel on calcule leur valeur varie. Nous avons également copié la stratégie du premier interpréteur dynamo. On calcule dans l'ordre: (1) les variables auxiliaires, (2) les flux, (3) les niveaux (4) les observations. Voici la syntaxe pour définir un objet de simulation*2:

Syntaxe:   (def-<type> ?<nom> 
				sbs ( <base de simulation> ... ) 
				ini ( <initialisation-val> ... )
				eq <équation> 

Exemple:   (def-flow ?guerilla 
				sbs (afgh-model) 
				ini (155000) 
				eq  (+ ?guerilla ?guerilla-gains ?guerilla-losses)) 
Il faut donc donner un nom à chaque objet. Ce symbole doit être précédé par un "?". (ex: ?guerilla) Ensuite chaque objet doit faire partie d'au moins une base de simulation (ex: afgh-model). Une valeur d'initialisation est nécessaire si on utilise cette variable pour en calculer d'autres (ex: 155000). Si l'on a besoin d'entrer une série de nombres, c'est également possible. L'équation, précédée par le mot clé "eq" est une simple expression "Scheme"*3 qui doit nécessairement retourner une valeur numérique lorsqu'elle est exécutée. Dans le cas le plus simple, il s'agit d'une expression mathématique qui fait référence à d'autres objets de simulation. Toutefois, il est possible de faire n'importe quoi avant de retourner une valeur, comme d'appeler par exemple un système de simulation orientée objets. Voici un exemple d'une équation un peu plus sophistiquée:

  ;; create a temporary variable guerilla-count   
  (let ((guerilla-count (+ ?guerilla ?guerilla-gains ?guerilla-losses)) 
    (if ;; if the guerilla count is very low 
        (< guerilla-count 100)  
        ;; then print a message and return zero 
        (begin 
           (writeln "?Guerilla too low, set to 0!!) 
           0) 
        ;; else return this value (which will be set to ?guerilla) 
        guerilla-count) 
Dans cette expression, on fait un petit calcul intermédiaire pour voir si un niveau tombe au-delà d'une limite. Si c'est le cas, on imprime un message et on met ce niveau à zéro. Au lieu de simplement jouer sur des valeurs numériques, on peut très bien utiliser ces expressions pour changer le comportement du modèle, par exemple modifier le paramètre qui règle le flux de "?guerilla-gains", l'augmentation des effectifs de la guérilla.

Cet petit exemple met en évidence la puissance conceptuelle d'une simulation discrète. Il devient très facile de changer le comportement du modèle en cours de route sans le recompiler. A noter également que tout changement de paramètres a un effet clair et immédiat sur le système dans le cycle suivant. Dans des modèles continus, les effets de lissage rendent très difficile ce genre d'opération. Afin de montrer qu'on ne perd pas énormément de précision avec un modèle discret par rapport à un modèle continu simple, voici un test:


THESE présentée par Daniel Schneider - 19 OCT 94

Generated with WebMaker