Un peu plus de complexité

Les exemples que nous avons vus jusqu'ici traitent de problèmes très simples : rien qu'un humain ne puisse résoudre en quelques secondes. Pour faire fonctionner un être vivant, il faut apporter des solutions à des problèmes bien plus complexes. Les principes de la sélection naturelle peuvent-ils remplir ce rôle ?

Vérifions le avec un nouvel exemple. Le problème est le suivant : on cherche le profil optimal pour un récipient, avec les contraintes suivantes :
  • on veut un récipient qui contient beaucoup, tout en minimisant le coût en matières premières : le rapport entre la surface définie par le profil et la longueur de celui-ci doit être maximal.
  • Le profil doit être contenu dans un rectangle de 200 X 100
Le schéma suivant montre deux profils respectant la deuxième contrainte : 
En ce qui concerne la première, ces deux profils sont à égalité : le rapport entre la surface hachurée et la longueur de la courbe rouge est 50 dans les deux cas.

Pouvez vous faire mieux ? Notre applet utilisant un algorithme génétique y arrive.
(le résultat optimum apparait au bout d'environ 3000 générations – n'hésitez pas à utiliser le bouton "100 pas").

Encore plus ?

Vous n'êtes toujours pas convaincus ? Quittons donc le monde des applets JAVA pour parler d'une expérience réalisée par un scientifique britannique, Adrian Thompson. Le docteur Thompson pensait que les algorithmes génétiques pouvaient permettre de concevoir des circuits électroniques, et il tenait à les mettre en œuvre sur de vrais composants électroniques, et non sur des simulations informatiques.

Il décida donc d'utiliser un composant de type FGPA : ces composants sont un réseaux de portes logiques reliées entre elle, chacune de ces portes pouvant être programmée indépendamment des autres pour remplir une fonction donnée, parmi plusieurs centaines de milliers.

La configuration d'un tel composant peut être représentée sous la forme d'un génome : à chaque porte correspond un gène, chaque gène pouvant prendre autant de formes (allèles) qu'il y a de fonctions possibles. Au final, Adrian Thompson se contenta d'étudier un tableau de 10 X 10 portes, ce qui représente tout de même un génome de 1800 bits, soit un nombre de combinaison possible à 541 chiffres.

Le but était  de faire la distinction entre deux signaux de fréquences différentes présentés en entrée : un signal de 1000 hertz, et un signal de 10 000 hertz. Le circuit devait renvoyer une tension de 5 volt en sortie dans un cas, et 0 volts dans l'autre.

Une telle tâche peut être réalisé par des montages électroniques très simple, mais nécessite un composant fournissant une base de temps afin de mesurer la fréquence. Dans les fonctions possibles pour les portes, celle-ci n'était pas disponible. Sans cette base de temps, la tâche semblait  être très ardue, peut être même impossible.

Et pourtant, en quelque 300 générations, l'algorithme évolutif a trouvé une solution. Et une solution remarquable à plusieurs titres :
  • il est très difficile de comprendre comment cela fonctionne
  • elle n'utilise que 32 des 100 portes disponibles
  • 5 de ces portes ne sont pas connectées directement à la sortie, et ne devraient donc théoriquement pas avoir d'impact sur le fonctionnement du circuit. Elles influencent le résultat par des moyens qui ne sont pas prévus par les spécifications du circuit, sans doute en créant des interférences.
  • En recopiant la solution sur une puce différente, le résultat obtenu est moins bon : la solution utilise donc des imperfections propres à chaque puce, imperfections dont personne ne connait la nature.
Au final, l'expérience d'Adrian Thompson montre non seulement que l'évolution peut résoudre des problèmes complexes, mais qu'elle peut peut les résoudre d'une manière que nous avons bien du mal à comprendre, et en utilisant des informations que nous ne connaissons pas. Les algorithmes génétiques nous permette de construire des machines dont nous ne comprenons pas le fonctionnement !


Dernière mise à jour : samedi 25 mai 2013