L’avenir de la programmation (4/6) : programmer la complexité

Par le 02/05/13 | Aucun commentaire | 2,703 lectures | Impression

Le vivant, les sociétés, la conscience, les écosystèmes semblent échapper à notre pensée linéaire, classique, issue des travaux de Newton. Ces domaines, dont la compréhension pourrait bien être fondamentale à notre survie, paraissent réfractaires à toute prévision et entrent dans le nouveau champ de la “complexité”. Cela veut-il dire qu’ils se jouent de toute tentative de codage ?

Qu’est-ce que la complexité ?

Si l’informatique “à la papa”, celle des bons vieux programmes COBOL qui automatisaient les fiches de paie, semble dominée par le paradigme du contrôle, de l’absence de créativité ou de l’ambiguïté, cela fait bien longtemps maintenant que les informaticiens ont compris que le caractère rigoureux de la programmation informatique n’interdit pas pour autant la surprise ! De fait, l’ordinateur est depuis bien longtemps l’outil favori des explorateurs de la complexité.

Mais d’abord, la complexité qu’est-ce que c’est ? Difficile à dire, car il en existe plusieurs définitions, chacune liée à une théorie particulière. Si par exemple vous référez au chaos, vous définirez la complexité comme la sensibilité extrême aux conditions initiales : autrement dit, pour employer la fameuse expression, c’est ce battement d’ailes de papillon à Melbourne qui finit par déclencher un ouragan à Montréal. D’autres – en s’inspirant des mathématiques fractales – vous diront que la complexité est produite au sein de systèmes autosimilaires (composés de versions d’eux-mêmes). Les adeptes de la théorie des réseaux vous parleront des petits mondes, de l’importance des liens “faibles”, de la connectivité d’un système, etc.

Mais la meilleure définition de la complexité, la plus simple, c’est peut-être de dire que le tout diffère de la somme des parties. Lorsque plusieurs éléments d’un système s’associent, des phénomènes imprévus se produisent : on parle alors d’”émergence”…

Il est difficile de prédire l’émergence, mais relativement aisé de la produire. La grande question du prochain siècle sera peut-être de savoir si générer “virtuellement” de l’émergence nous aide à mieux comprendre l’émergence dans le monde réel.

Il y a bien sûr des tas de moyens de chercher à “programmer la complexité” : on peut utiliser de complexes équations mathématiques, plonger dans les big data… Tout cela demande un haut niveau de formation, l’accès à de grosses machines et de puissantes banques de données. Mais l’une des principales manières de créer de l’émergence est à la portée de tous : il s’agit des systèmes multiagents.

Les systèmes multiagents : faire émerger des phénomènes non programmés

Ces programmes sont employés pour simuler des “collectifs décentralisés” comme le sont la plupart des systèmes complexes. Il s’agit de “mini-mondes formels” peuplés d’acteurs : les agents. Ceux-ci sont des petits programmes informatiques dotés d’un certain nombre de propriétés et capables d’actions très simples. On peut les comparer à des fourmis ou des termites. En gros, le programme intégré à un agent ne prend que quelques lignes. Chaque simulation multiagents comprend en général un grand nombre d’agents, et parfois des agents de plusieurs espèces (c’est-à-dire disposant de propriétés et d’actions différentes). Ces agents se déplacent dans un espace constitué par une grille composée de cases. Ces cases peuvent elles aussi posséder certaines propriétés, par exemple héberger des ressources, ou receler des dangers. Les agents peuvent donc interagir avec leur voisin ou avec le “terrain”. Tous les agents d’une même espèce ont le même programme et les mêmes propriétés ; en revanche, les paramètres sont variables. Par exemple, tous les membres d’une espèce pourront posséder une propriété “durée de vie”. Mais celle-ci variera entre 1 et plusieurs “tours”…. Ce paramètre pourra changer en fonction de l’environnement, des interactions avec les congénères, voire être déterminé par un nombre aléatoire.

Ceux qui travaillent sur les systèmes multiagents cherchent donc à comprendre comment se créent les systèmes complexes. Il ne s’agit pas ici de créer des simulations très élaborées. L’objectif est exactement inverse. Le but consiste à générer un système avec un minimum de règles et de données de base, et de voir ce qui, à partir de ces ensembles minimaux, est susceptible de produire de la complexité. Autrement dit, le “bon” programme multiagents est celui, qui, au départ, en fait le moins. L’intérêt consiste à découvrir le petit nombre de règles susceptible de faire émerger des phénomènes non programmés. Si ces aspects émergents existent dans le monde réel, on dispose alors peut-être d’une piste pour comprendre un phénomène.

Bien sûr, on peut programmer un tel système avec n’importe quel langage, mais c’est loin d’être à la portée du premier venu. En revanche, il existe des langages déjà adaptés à ce genre de travail, et d’une syntaxe assez simple. Ainsi, le Starlogo, créé dans les années 90 par Mitchel Resnick, du MIT. Sous sa forme originale, Starlogo n’est plus utilisé, mais il a donné naissance à deux “enfants” : Starlogo TNG et Netlogo.

La première ambition de Mitchel Resnick était éducative et épistémologique. C’est pourquoi il avait basé son langage sur le Logo, plutôt réservé aux enfants, et qu’il destinait Starlogo aux collégiens. En fait, selon lui, la compréhension même des fonctionnements des systèmes décentralisés nous est tellement étrangère qu’il nous est difficile de penser autrement qu’en termes de commandement et de hiérarchie. Resnick espérait qu’un langage comme Starlogo nous familiariserait dès notre plus jeune âge avec ce genre de phénomènes. Aujourd’hui, Starlogo TNG avec son langage visuel et son imagerie 3D incorpore des éléments de jeux vidéos et conserve le côté “langage pour djeuns” voulu par Resnick.

Netlogo a aussi des possibilités 3D, et certains éléments pouvant aider à créer des jeux vidéos. Mais soyons clairs, Netlogo, plutôt austère, s’adresse de préférence à des chercheurs ou des étudiants.

Un exemple de modèle Netlogo : la relation prédateur-proie

Jeter un coup d’oeil sur la bibliothèque de modèles de Netlogo suffit à convaincre de la large palette de phénomènes étudiés. Certains appartiennent au domaine de la physique, d’autres – peut-être les plus nombreux -, à celui de la biologie ou de l’écologie, d’autres encore aux sciences sociales ou à la psychologie. Vous n’êtes pas obligés de télécharger Netlogo pour jouer avec les modèles. Vous pouvez les visualiser dans votre navigateur.

Examinons par exemple une relation “prédateur-proie”, l’un des systèmes complexes les plus simples et les plus classiques (c’est une analogie avec le cycle prédateur-proie qui a poussé Turchin a émettre son hypothèse des cycles séculaires en histoire).

On crée deux espèces, les moutons et les loups qui se reproduisent et se nourrissent : les moutons mangent de l’herbe, les loups mangent les moutons. Les deux espèces possèdent une variable “énergie” qu’ils dépensent quand ils se déplacent et qu’ils gagnent lorsqu’ils s’alimentent. A intervalles réguliers, les animaux se reproduisent. A ce moment la quantité d’énergie du parent est divisée par deux, et une moitié est offerte au rejeton.

Tous les agents de la simulation possèdent ces points communs, mais il existe des différences entre les loups et les agneaux : on peut leur donner un taux de reproduction spécifique, chaque espèce peut gagner plus ou moins d’énergie. La simulation permet de changer ces valeurs à l’aide de différents boutons de l’interface… Le jeu consiste à faire varier les curseurs pour obtenir un système écologique stable. Les valeurs par défaut conduisent à une triste situation : les loups finissent par exterminer les agneaux, puis meurent de faim à leur tour. Cherchez les solutions optimales ! Lorsque vous aurez épuisé tous les modèles disponibles dans la librairie, vous pourrez alors construire vos propres modèles. Apprendre le code n’est vraiment pas la mer à boire.

Sugarscape : l’économie générative !

Sugarscape est le cas le plus connu d’application des systèmes multiagents aux sciences sociales. Les deux économistes qui en sont à l’origine, Robert Axtell et Joshua Epstein, ont imaginé un “minimonde” peuplé d’agents susceptibles d’accomplir des actes économiques simples. Dans la première version, les “habitants” de ce petit univers se contentaient de ramasser la ressource principale, le sucre, afin d’augmenter leur durée de vie. Puis Axtell et Epstein ont commencé à complexifier leur programme : ils ont ajouté une longévité maximale, des capacités de reproduction et enfin, une seconde ressource, l’épice. Les créatures de Sugarscape avaient besoin des deux aliments pour vivre et se reproduire, mais chaque agent disposait, en fonction de son “ADN”, de “préférences” : certains avaient besoin de plus de sucre, d’autres d’épice. Chaque agent pouvait alors troquer avec ses voisins. Axtell et Epstein ont aussi ajouté un mécanisme représentant la culture (les agents préfèrent marchander avec les voisins possédant la même culture, une simple variable numérique qu’ils possèdent en commun). Les résultats obtenus ont été étonnants. Par bien des côtés, ils ont reproduit certains des phénomènes de “l’économie réelle”: des riches s’enrichissent, tandis que les pauvres s’appauvrissent. Et les “prix” n’atteignent jamais l’équilibre, contrairement à ce qu’une vision traditionnelle de l’économie pourrait laisser croire. Comme le dit Eric Beinhocker dans son livre L’origine de la richesse : “Au sein de Sugarscape s’est développé spontanément un ordre complexe, une diversité, une structure incluant ce qui pourrait être interprété (avec un peu d’imagination) comme des tribus, des villes commerçantes, des routes marchandes et des marchés, rien de tout cela n’ayant été programmé.” Pour Axtell et Epstein, un programme comme Sugarscape nous ouvre sur une nouvelle conception de la méthode scientifique : la “science générative”. Pour comprendre un phénomène, expliquent-ils, “faites le pousser” !

Vous trouverez plusieurs versions de Sugarscape dans la bibliothèque de modèles de Netlogo, malheureusement limitées aux premières phases du programme (avec le sucre uniquement). Il existe aussi un modèle “non officiel” plus complet, qui utilise toutes les règles, sauf le combat.

Les automates cellulaires, une alternative

Un système multiagents tel qu’implémenté par Netlogo est donc quelque chose d’extrêmement formel. Il est pourtant possible de travailler de manière encore plus abstraite avec les automates cellulaires. Ici, il n’y a plus d’agents se déplaçant dans un espace, il ne reste plus que l’espace lui-même. Celui-ci est divisé en plusieurs “cellules” qui peuvent prendre un aspect ou un autre (en fait, changer de couleur) selon “l’état” de leur voisin. Contrairement aux agents, les “cellules” n’ont donc aucun programme, aucune variable interne, aucune “mémoire”. Pourtant, il est possible là aussi de voir émerger des structures très complexes.

Le plus connu des automates cellulaires est le jeu de la vie de John Conway. Les règles sont très simples : les cellules peuvent être mortes ou vivantes, c’est à dire éteintes ou allumées. Une cellule “nait” si elle possède trois voisines vivantes. Elle meurt si elle a plus de trois voisines “allumées” ou si elle en possède moins de deux.

Lorsqu’on lance le jeu de la vie, on “allume” aléatoirement certaines cellules de la grille, et on laisse tourner pour voir ce qui se passe.

Malgré la simplicité apparente de ce programme, une véritable ménagerie ne tarde pas à apparaître : par exemple des planeurs, structures qui se déplacent dans l’espace du jeu. Ou des “canons à planeurs” qui créent ces mêmes planeurs… Le jeu de la vie intéresse les mathématiciens depuis sa création en 1970. Il est la démonstration qu’un univers très complexe (et donc des phénomènes du monde réel comme la vie) peut-être généré à partir de règles très simples. Cette vidéo nous montre quelques exemples de la faune susceptible d’apparaître dans le jeu de la vie. Remercions au passage la Wikipédia qui nous signale l’existence dans Google d’un “oeuf de Pâques” qui apparaît lorsqu’on fait une recherche sur “Conway’s Game of Life” : un jeu de la vie s’affiche en arrière-plan sur la page du moteur de recherche !

Bien que Netlogo ne soit pas spécifiquement orienté vers les automates cellulaires, rien n’empêche de les programmer en ce langage. Vous en trouverez plusieurs exemples dans la bibliothèque de modèles.

Pour Stephen Wolfram, les automates cellulaires constituent une structure suffisante pour expliquer la plupart des systèmes complexes et même l’univers entier… Mais cela reste sans doute bien trop abstrait pour parler à la plupart d’entre nous.

Peut-on aller dans l’autre sens, et faire plus concret que Netlogo ? C’est le propos d’un logiciel comme Breve. Ici, le monde n’est plus constitué par une grille ; il est continu, et possède une physique, avec de la gravitation, des règles de collision, etc.

Breve est particulièrement conçue pour créer et faire évoluer des machines, des robots. On crée des structures en 3D dont on teste l’efficacité dans un monde virtuel. Ces “créatures” sont capables d’évoluer selon un processus darwinien, les plus efficaces étant sélectionnées pour donner une descendance qu’on espère encore plus efficace. Sera-t-il alors possible de réaliser les robots ainsi conçus dans le monde réel ? La démarche d’un Jordan Pollack, qui semble utiliser des programmes analogues à Breve, va dans ce sens.

Il est probable que les systèmes multiagents, ainsi que les automates cellulaires, joueront un rôle grandissant dans les domaines de la nanotechnologie, de la biologie synthétique, dans la robotique. On ignore pour l’instant s’ils nous aideront vraiment à comprendre les mécanismes du vivant et de la société. Mais ils sont loin d’être dénués de potentielles applications pratiques. Et ces systèmes sont accessibles gratuitement, souvent en open source, à la portée de n’importe quel amateur. A vous de jouer !

Rémi Sussan

Le dossier l’avenir de la programmation est une série au long court :

Les commentaires sont fermés.