Un programme pour faire le singe
Il y a quelques mois [1] je vous présentais plusieurs exemples de programmes capables de concevoir des circuits électroniques à l'aide d'algorithmes génétiques. Aujourd'hui j'aimerais vous présenter le travail d'un amateur qui a poussé le concept encore plus loin en développant un programme capable de produire des programmes.
Sur le papier c'est très simple, on indique à l'ordinateur le résultat désiré puis on le laisse chercher tout seul, aléatoirement, un programme capable de donner la solution. Avec suffisamment de temps, même un singe peut y arriver [5]. En pratique, il est très difficile de produire aléatoirement ne serait-ce qu'un programme syntaxiquement correct. C'est pour contourner ce problème que Kory a utilisé un langage de programmation très simple : Brainfuck.
À l'origine conçu comme une blague, ce langage ne connait que huit instructions simples. On a donc beaucoup plus de chance de tomber aléatoirement sur une séquence correcte. Il ne lui restait qu'à ajouter à son générateur de programmes la capacité de décider si un programme produit un résultat meilleur qu'un autre. Comme il ne cherchait qu'à obtenir des programmes capables d'afficher un texte donné, il lui a suffi d'apprendre à l'ordinateur à déterminer la proximité de deux chaînes de caractères. Ensuite, il n'y a plus qu'à laisser mouliner le tout...
Il a fallu deux heures et 580.900 itérations à son programme pour accoucher d'un programme capable d'afficher hello world. À ce rythme là, programmeur restera encore pour un temps un métier pour les humains mais chapeau quand même !