Les problèmes commencent

13/06/2018

Une implémentation en Python

Les premières valeurs de variables générées par Python !
Les premières valeurs de variables générées par Python !

J’ai enfin (ou déjà) pu aujourd’hui avoir un visuel relativement potable de l’évolution des variables du modèle tournant grâce à Python. La traduction a pu se dérouler sans trop d’encombres grâce à PySD (il a quand même fallu un peu modifier son code source et corriger la sortie).

Déjà des écarts

ERRATUM : Problèmes résolus

Il reste à comparer la sortie du modèle Python avec celles produites par Vensim et OpenModelica. C’est là que les choses commencent à se gâter.

On remarque que les trois modèles, pour le scénario 1, donnent des valeurs différentes en ce qui concerne la population. Je pourrais comprendre que la version d’Open Modelica peut se trouver très différente des autres implémentations, cependant, bien que très similaires sur les 4 premières variables, la population varie avec un écart atteignant environ 30 % entre la version Python3 et Vensim (alors que la première découle de la 2ème !) Le pic change à la fois en ordonnée et en abscisse (peut-être un peu plus réaliste, mais pour le coup c’est un peu hasardeux)…

Quelques pistes

Une des explications possibles est la précision apportée par Python3 (double, jusqu’à 17 chiffres significatifs), beaucoup plus élevée que celle de Vensim (single, 6 chiffres significatifs). Une autre explication est que des paramètres ont pu varier (ce que je ne souhaite pas, car il faudrait vérifier chacune des 315 variables), ou que le scénario choisi n’est pas exactement celui attendu pour les trois modèles. On remarque en effet pour la population que la courbe de Vensim et de Python3 sont superposées jusqu’à 1960 : peut-être qu’une boucle de rétro-action a été codée en dur dans le modèle de Vensim et n’a pas été portée automatiquement en Python ?

Voici les fichiers sur lesquels je travaille, pour les plus curieux d’entre vous (c’est un peu le bazarre) : https://gitlab.inria.fr/arasoldi/world3-03_python. Le modèle en Python se trouve dans le fichier world3.py.