[Next] [Previous] [Up] [Top] [Contents] [Index]

A-1 Test du langage de simulation


Pour tester le langage de simulation pour la simulation discrète des systèmes dynamiques (voir la section 6-2.2 "Un langage de simulation pour la simulation discrète des systèmes dynamiques" [p. 244]) nous avons repris un modèle tiré de Allan et Stahel (1983). Il représente un modèle "a priori" sur la guerre en Afghanistan avec une attention spéciale portée à la question de savoir si (et sous quelles conditions) la guérilla peut survivre. Etant donné qu'il n'existait que très peu de données sur ce conflit en 1981-82, les paramètres sont des estimations fondées sur des données empiriques que l'on possède sur d'autres conflits estimés comparables. Pour estimer la problématique "la guérilla peut-elle survivre", le modèle doit a priori estimer les chances de la guérilla de façon pessimiste. La structure de base du modèle est reproduite dans la figure ci-dessous qui montre les niveaux les plus importants du système. Les flux entre eux sont représentés à l'aide des flèches.

Dans notre langage de simulation numérique discrète d'événements, les niveaux doivent être bien différenciés des flux à cause de l'algorithme de calcul. Le modèle ci-dessus présente ce type de structure. Par contre, la manière de définir les objets de simulation (en termes traditionnels: les équations et les paramètres) reste très souple. C'est le modéliseur qui décide s'il préfère un modèle très compact ou très désagrégé avec beaucoup de variables. Ici, nous avons choisi de travailler avec relativement beaucoup d'objets par rapport au modèle d'origine. L'idée derrière ce choix est qu'il sera plus simple de les manipuler avec d'autres mécanismes, par exemple des systèmes d'inférence ou des simulations orientées objets. Voici les "équations" qui définissent le modèle:

  ; --- guerilla 
  (def-level ?guerilla sbs (*gen*) ini (155000) 
             eq (+ ?guerilla ?guer-gains (- ?guer-losses))) 
  (def-flow ?guer-gains sbs (*gen*) ini (0) 
            eq (* ?guer-gain-r ?guer-pot)) 
  (def-parm ?guer-gain-r sbs (*gen*) ini (0.01)) 
  (def-flow ?guer-losses sbs (*gen*) ini (0) 
            eq (* ?guer-loss-r ?guerilla (+ ?ussr ?afgh))) 
  (def-parm ?guer-loss-r sbs (*gen*) ini (0.00000035)) 
  ; -- potential guerilla 
  (def-level ?guer-pot sbs (*gen*) ini (1470000) 
             eq (- ?guer-pot ?guer-gains)) 
  ; -- rest of population 
  (def-level ?rest-pop sbs (*gen*) ini (10850000) 
             eq (- ?rest-pop ?army-recruits ?genocide ?refugees)) 
  (def-parm ?army-recruits sbs (*gen*) ini (1500)) 
  (def-flow ?genocide sbs (*gen*) ini (0) 
            eq (* 0.0011 ?rest-pop)) 
  (def-flow ?refugees sbs (*gen*) ini (0) 
            eq (+ 120803)) 
  ; -- ussr army 
  (def-level ?ussr sbs (*gen*) ini (0) 
             eq (+ ?ussr ?ussr-flow (- ?ussr-losses))) 
  (def-flow ?ussr-flow sbs (*gen*) ini (0) 
            eq (- ?ussr-objective ?ussr)) 
  (def-parm ?ussr-objective sbs (*gen*) ini (85000)) 
  (def-flow ?ussr-losses sbs (*gen*) ini (0) 
            eq (* 0.003 ?guerilla)) 
  ; -- afghanistan 
  (def-level ?afgh sbs (*gen*) ini (35000) 
             eq (+ ?afgh ?army-recruits (- ?afgh-losses))) 
  (def-flow ?afgh-losses sbs (*gen*) ini (0) 
            eq (* 0.006 ?guerilla)) 
  ; -- observations 
  (def-obs ?guer-tot-losses sbs (*gen*) ini (0) 
           eq (+ ?guer-tot-losses ?guer-losses)) 
  (def-obs ?ussr-tot-losses sbs (*gen*) ini (0) 
           eq (+ ?ussr-tot-losses ?ussr-losses)) 
  (def-obs ?afgh-tot-losses sbs (*gen*) ini (0) 
           eq (+ ?afgh-tot-losses ?afgh-losses)) 

Voici les résultats d'une simulation:

==> (sim-plot *gen* 72) 
a = ?GUERILLA        min: 167801.25                max: 252302.585649685 
b = ?GUER-POT        min: 712937.31430302          max: 1455300. 
c = ?REST-POP        min: 1552781.45434478         max: 1.0715762e7 
d = ?USSR            min: 84243.092243051          max: 84535. 
e = ?AFGH            min: 35570.                   max: 43998.9650902446 
f = ?GUER-GAINS      min: 7201.38701316182         max: 14700. 
g = ?GUER-LOSSES     min: 1898.75                  max: 10938.1432205581 
h = ?GENOCIDE        min: 1844.62198396161         max: 11935. 
i = ?REFUGEES        min: 120803                   max: 120803 
j = ?USSR-FLOW       min: 465.                     max: 85000 
k = ?USSR-LOSSES     min: 465.                     max: 756.907756949056 
l = ?AFGH-LOSSES     min: 930.                     max: 1513.81551389811 
m = ?GUER-TOT-LOSSES min: 1898.75                  max: 712241.155119586 
n = ?USSR-TOT-LOSSES min: 465.                     max: 49500.5174548777 
o = ?AFGH-TOT-LOSSES min: 930.                     max: 99001.0349097554 

STEP   1: ** ea  *                     g             d     * 
STEP   2: **    e  a*                   g         d       ** 
STEP   3: * *     e   a *                 g   d          **  
STEP   4: * *       e     a*               dg           **   
STEP   5: *  *        e      a *       d     g         **    
STEP   6: *  *          e        *   d         g      * *    
STEP   7: *   *          e        da*           g    * *     
STEP   8: *    *           e   d      a*          g * *      
[ ................ ]
STEP  66: * **                 d  a    *           ge    *   
STEP  67: * **                  da    *            g  e  *   
STEP  68: ***                   ad   *             g   e  *  
STEP  69: **                   a  d *             g      e * 
STEP  70: **                  a    *              g       e* 
STEP  71: *                  a    * d             g         * 

Le résultat de ce modèle était que la guérilla survivra (lettre a ci-dessus). Cela a été confirmé par l'histoire. Voici quelques valeurs de deux variables importantes d'observation, les pertes totales de la guérilla et des soviétiques.

==> (list-sim *gen* ?guer-tot-losses ?ussr-tot-losses) 
SIM-I> LIST OF SIMULATION BASE *GEN* OBJECTS 
         ?GUER-TOT-*?USSR-TOT-* 
MAX     : 712241.155  49500.517 
MIN     :   1898.750    465.000 
STEP   0:   1898.750    465.000 
STEP   1:   8952.569    968.404 
STEP   2:  16349.533   1494.305 
STEP   3:  24069.475   2041.238 
STEP   4:  32091.955   2607.801 
STEP   5:  40397.181   3192.659 
......... 
STEP  61: 619066.486  43208.591 
STEP  62: 628657.773  43861.449 
STEP  63: 638188.840  44509.182 
STEP  64: 647659.400  45151.735 
STEP  65: 657069.196  45789.055 
STEP  66: 666418.003  46421.093 
STEP  67: 675705.623  47047.802 
STEP  68: 684931.887  47669.138 
STEP  69: 694096.644  48285.061 
STEP  70: 703199.769  48895.533 
STEP  71: 712241.155  49500.517 

Comparons ces résultats avec les résultats obtenus dans la simulation continue originale de Allan et Stahel. Avec leur méthode de calcul, ils arrivent après 72 cycles à 712'000 pertes pour la guérilla et à 49'000 pertes pour les Soviétiques. Notre modèle arrive à ces chiffres un cycle plus tôt, ce qui est un résultat excellent.