Les limites à la croissance – une exploration en langage Python
Article original de Charles Vanwynsberghe | Traduit et mis à jour par Charles Vanwynsberghe.
En raison de ses prévisions alarmantes sur le caractère non durable de l’évolution actuelle du monde, le livre The Limits to Growth écrit par Meadows et al a eu un succès planétaire lors de sa parution en 1972. Cependant le succès a été éphémère à cette époque, suite aux nombreuses critiques reprochant aux auteurs d’en arriver à les conclusions trop pessimistes et effondristes. Une autre raison compréhensible est que la totalité du raisonnement scientifique s’appuie sur des simulations issues d’un modèle unique nommé World3, alors que ce modèle reste particulièrement complexe pour le lecteur lambda. Concrètement, comprendre l’approche systémique dans le modèle World3 requiert beaucoup de temps et un minimum de bagage scientifique.
Pour autant, le livre Limits to Growth suscite de nouveau l’intérêt de conférenciers et scientifiques, notamment car différents signaux tangibles remettent en question la durabilité du monde dans lequel nous vivons aujourd’hui. Cela peut concerner la pandémie de Covid-19 et toutes ses conséquences sur les flux économiques et physiques, les anomalies climatiques, ou encore l’évolution de différents indicateurs anthropocènes, pour n’en citer que quelques-uns. Aujourd’hui, même l’Agence Européenne de l’Environnement (EEA) est formelle, et affirme que la voie vers une « croissance sans croissance économique » est nécessaire maintenant – si ce n’est pas plus tard sous contraintes physique et systémique. De nombreuses études montrent que les trajectoires observées des flux physiques planétaires restent sensiblement proches de celles provenant des simulations de World3 menant à un scénario de type overshoot and collapse (dépassement de la biocapacité limite puis effondrement). En particulier, cela concerne les simulations :
- sous le scénario Business as usual, dans lequel aucune mesure radicale n’est prise pour faire évoluer les flux ;
- sous le scénario technologique dans lequel l’objectif de croissance économique est maintenu, mais un développement technologique intensif permet de réduire tous les effets indésirables de la croissance. Il s’agit à proprement parler du scénario de type croissance verte.
Etant donnés ces faits, il semble plus important que jamais que ce modèle de Dynamique des Systèmes devienne facile d’accès et intelligible au plus grand nombre.
Description et historique du modèle World3
Il existe différentes versions et implémentations existantes de World3, parmi lesquelles on peut facilement se perdre. Premièrement, 4 versions du modèle existent, avec différent choix de paramètres et de structure. A chaque nouvelle parution de livre de Meadows et al, de nouvelles données décrivant les flux et stocks mondiaux sont obtenues, et les simulations sont légèrement ajustées en conséquence. Deuxièmement, différentes implémentations logicielles peuvent être trouvées sur le web. Les implémentations bien connues de World3-03 (la dernière version à ce jour de 2004) fonctionnent sur des outils avec interface graphique :
- l’implémentation officielle sur Stella (fournie sur le CD du livre de 2004 Limits to Growth: The 30-year Update, qui semble maintenant être en rupture de stock) ;
- des implémentations non officielles sur Vensim et Modelica.
Notez que la toute première version de World3, détaillée dans le livre technique Dynamic of Growth in a Finite World, a été programmée directement dans un code source en langage DYNAMO. Cependant, en raison de sa forte spécificité à la Dynamique des Systèmes et au matériel informatique de l’époque, DYNAMO est rapidement devenu obsolète.
Ma contribution : une librairie open-source de World3 en Python
Malgré la grande popularité du modèle, il reste étonnamment peu d’implémentations de World3 sous la forme d’un code source dans un langage de programmation standard. J’ai trouvé les suivants :
- en Javascript, écrit par Brian Haynes;
- ce même code Javascript a été wrappé en Python, mais avec des fonctionnalités spécifiques dédiées à l’apprentissage par renforcement (une approche particulière du Machine Learning) ;
- une version Python de l’INRIA, issue d’une traduction automatique du modèle Vensim officiel avec PySD.
La dernière des 3 options semble intéressante à des fins de recherche, mais le code source reste compliqué à lire et comprendre, du fait de la traduction automatisée. C’est pourquoi j’ai préféré repartir sur une nouvelle implémentation de World3 :
- basé sur une traduction directe du script DYNAMO original donné dans le rapport technique Dynamics of Growth in a Finite World,
- permettant de configurer différents scénarios,
- dans un langage de programmation fortement utilisé,
- dans un souci pédagogique, aussi clair et limpide que possible !
J’ai finalement opté pour un code en Python 3 avec le minimum de dépendances. Il appelle des fonctions des librairies scientifiques Numpy & Scipy, afin de gérer facilement les opérations de tableau et les fonctions d’interpolation. Le code est disponible sur GitHub.
Utilisation de PyWorld3 ou PyWorld2
L’installation de PyWorld3 est décrite sur la page de GitHub. Le code est structuré en 5 parties, correspondantes au 5 secteurs du modèle de monde : la population, le capital, l’agriculture, la pollution et les ressources non-renouvelables. Toutes les variables par défaut permettent d’exécuter le scénario Business as usual. Comme le montre la figure ci-dessous, la simulation produit les mêmes trajectoires que dans le livre original. Cette figure indique l’évolution en fonction du temps de différents « stocks » : la population, la pollution, l’alimentation, la production industrielle et les ressources non renouvelables restantes.
On peut reconfigurer la simulation à souhait en modifiant les valeurs de variables. Par exemple, prenons l’un des premiers résultats de Meadows et al, montrant que doubler le stock initial de ressources non renouvelables ne fait qu’accentuer la crise de la pollution qui s’en suit. On trouve ce résultat dans tous leurs livres parus, car il illustre bien à quel point le comportement du monde (tel qu’il est modélisé) est contre-intuitif, et qu’un raisonnement systémique est nécessaire pour éviter de tomber dans une démarche solutionniste trop hâtive.
Le résultat peut être reproduit en changeant simplement la constante « nonrenewable resource initial » nri. La figure ci-dessous montre qu’en augmentant progressivement ce stock initial de ressource (de 1e12 à 3e12), le pic de pollution augmente rapidement en conséquence. On remarque également que la population a une phase de déclin plus rapide que la phase de croissance qui lui précède. Ugo Bardi appelle ce type d’évolution l’effet Sénèque, en clin d’œil à la célèbre citation de Sénèque : « La richesse est lente, la ruine est rapide ». Notons par ailleurs que l’effet Sénèque apparaît aussi dans l’évolution des stocks de nourriture et de production industrielle par habitant.
Avec PyWorld3, tous les autres scénarios des livres de Meadows sont techniquement réalisables. Par ailleurs, il est possible de s’atteler à l’étude de la Dynamique des Systèmes avec un modèle plus simple. Pour cela je suggère aux lecteurs de voir PyWorld2, mon précédent projet sur l’implémentation Python du modèle World2 de Forrester. Comme indiqué dans la figure ci-dessous, les courbes révèlent une évolution similaire de type overshoot and collapse. En revanche World2 est nettement moins complexe que son successeur. Plus de détails historiques et techniques sur World2 sont donnés dans l’excellent article de blog d’Arnaud Mignan.
Quelques remarques finales
La raison pour laquelle j’ai décidé de coder PyWorld3 (et PyWorld2) est d’avoir un code le plus limpide possible, à des fins pédagogiques ou de recherche. Cela répondra probablement à vos besoins. Et si vous avez en vue de faire du Machine Learning ou de l’analyse statistique, une implémentation sous forme de code source semble être une bonne option, car les appels de fonctions sont rapides, sans le besoin de wrapper les fonctions d’un logiciel tiers.
Cependant, si vous souhaitez réaliser votre propre modèle en partant de zéro, je ne recommanderais pas l’écriture sous forme de code source, qui serait bien fastidieuse… En Dynamique des Systèmes, un modèle est défini par une série d’équations, généralement en grand nombre et intriquées entre elles. Coder cela en programmation séquentielle est laborieux, et c’est la raison pour laquelle les outils par interface graphique (Vensim, Stella, etc.) existent.
Si vous voulez avoir le meilleur des deux mondes (aisance de conception et efficacité du code), la conception avec Vensim suivie d’un port automatisé vers Python avec PySD semble être une solution à explorer.
Références
- Meadows, Donella H., et al. The Limits to Growth,1972.
- Meadows, Dennis L., et al. Dynamics of Growth in a Finite World,1974.
- Bardi, Ugo. The Seneca effect, 2017.
- Brian Hayes. Computation and human conditions (vidéo + diapositives), 2012.
- Arnaud Mignan. Modèle World2, de DYNAMO à R, 2020.
Laisser un commentaire