Toutes les époques sont influencées par des modes incontournables engendrant l’usage de certaines phrases à outrance quel que soit le sujet abordé. En 2024 c’est l’intelligence artificielle qui occupe le devant de la scène et on nous la fourgue à toutes les sauces. Aussi, actuellement, que ce soit en informatique, dans les applications téléphonique, en robotique, en électroménager, bref partout, on nous gave avec ce concept sans jamais le justifier comme si c’était une vérité biblique.
– Alors c’est quoi l’intelligence ?
L’intelligence naturelle, c’est l’aptitude à faire face à une situation ou un problème inattendu et non prévu. J’exclue de cette définition la fuite face à un danger qui survient, car n’importe quel animal va se sauver ou se défendre, sans pour autant que l’on puisse caractériser cette réaction comme étant intelligente. C’est un simple réflexe de survie imprimé dans l’ADN.
Hors, un programme quel qu’il soit ne sera jamais capable de traiter un incident qui n’a pas été prévu par le programmeur. Face à une telle situation soit il va purement et simplement se bloquer, soit faire strictement n’importe quoi. (On nomme pudiquement « bug » un tel comportement.)
Par ailleurs, il ne peut pas y avoir intelligence sans avoir conscience réelle de ce que l’on fait. Hors un ordinateur n’a aucune conscience, il n’a même aucune idée de ce qu’il fait. Par exemple les programmes de la police nationale de reconnaissance d’empreintes ne savent même pas ce qu’est un doigt et encore moins un humain. Il en est de même pour tous ces trésors dits d’intelligence artificielle tels que les rédacteurs automatiques de romans policiers ou les logiciels de créations artistiques. C’est de l’escroquerie d’utiliser le terme créations car ils n’ont aucune âme et de ce fait ne peuvent innover. Ils ne font que brasser des octets qui composent des données de tailles gigantesques en appliquant des transformations (Certes très astucieuses.) prévues par un informaticien. Il n’y aucune originalité dans ces programmes qui ne font globalement que copier et déplacer. Du reste, un dirigeant au sommet de l’organigramme d’IBM disait à juste titre :
– Le plus puissant de nos ordinateurs a moins d’intelligence qu’un vert de terre !
Ne pas aborder ce thème dans la Bible du C++ aurait été un peu comme « la Joconde sans ses lunettes », aussi je vais vous proposer quatre démonstrateurs élémentaires pour illustrer ce propos.
Experience_152 : Le jeu du « c’est plus, c’est moins ».
Manipuler un petit programme qui applique une stratégie bien agencée nous influence naturellement et nous conduit à penser qu’il est intelligent. Avec Expions car ils n’ont aucune âme et de ce fait ne peuvent innover. Ils ne font que brasser des octets qui composent des données de tailles gigantesques en appliquant des transformations (Certes très astucieuses.) prévues par un informaticien. Il n’y aucune originalité dans ces programmes qui ne font globalement que copier et déplacer. Du reste, un dirigeant au sommet de l’organigramme d’IBM disait à juste titre :
– Le plus puissant de nos ordinateurs a moins d’intelligence qu’un vert de terre !
Ne pas aborder ce thème dans la Bible du C++ aurait été un peu comme « la Joconde sans ses lunettes », aussi je vais vous proposer quatre démonstrateurs élémentaires pour illustrer ce propos.
Experience_152 : Le jeu du « c’est plus, c’est moins ».
Manipuler un petit programme qui applique une stratégie bien agencée nous influence naturellement et nous conduit à penser qu’il est intelligent. Avec Experience_152.ino je vous propose un petit logiciel amusant construit sur un algorithme basé sur la dichotomie. Commencer par vous divertir avec, puis ensuite on le commentera. La règle du jeu est la suivante :
LA STRATÉGIE UTILISÉE :
Pour ne pas que l’humain, c’est à dire vous, ne remarque que la première proposition est toujours la moitié de l’intervalle, c’est la raison pour laquelle les bornes sont recalculées à chaque fois pour changer à chaque partie. Pour simplifier le programme, dans Experience_152.ino les nombres ne sont que pseudo-aléatoires. (Voir à ce sujet le démonstrateur P035.)
La dichotomie c’est les grains de blé sur l’échiquier, mais à l’envers. Si chaque fois qu’un nombre double, il devient rapidement gigantesque, réciproquement, chaque fois qu’on divise un nombre par deux, aussi grand soit-il il devient rapidement petit. C’est la stratégie que nous allons pratiquer.
Réaliser une dichotomie consiste à diviser en deux sous-ensembles un domaine initial. Par exemple Pair/Impair, ce qui est à gauche et ce qui est à droite, Grands/Petits, lourds/Légers, les bons et les méchants etc. Dans notre exemple on divise l’ensemble qui nous reste en deux à chaque fois. Par exemple, lorsque l’on repasse un drap, on en divise à chaque pliage sa surface par deux pour que rapidement il soit facile à ranger dans l’armoire. Et bien on pratique la dichotomie sans le savoir ! Dans notre démonstrateur sur RESET le déroulement se fait comme le montre la Fig.298 qui est une copie d’écran « compactée ». Pour son compte la Fig.299 met en évidence le fait qu’à chaque tentative l’ordinateur divise la taille du domaine à explorer par deux. On arrive forcément rapidement au résultat.
CONCLUSION : Lors du déroulement d’un logiciel, on peut être séduit, très séduit. Par exemple je suis époustouflé du GPS ou de la géo-localisation sur le téléphone. Les programmeurs et les électroniciens ont fait un travail absolument fantastique. Pour autant, ce merveilleux programme qui « tourne » dans le silicium n’a aucune conscience de ce qu’il fait. Il n’a donc aucune intelligence. C’est juste de la combinatoire logique de BITs à « 0 » ou à « 1 » brassée à une cadence vertigineuse par un microcontrôleur sans âme.
Experience_153 : L’ordinateur lit dans votre pensée !
Avec ce démonstrateur je vous propose un petit jeu amusant. Vous allez enchaîner des petits calculs à partir d’un nombre que vous aurez choisi librement et inconnu de l’ordinateur. Pour que ce voit vraiment du loisir vous avez parfaitement le droit d’utiliser une calculette. C’est d’autant plus important qu’il ne faut pas vous tromper en effectuant les calculs qui sont un peu rébarbatifs. Surtout lors d’une partie, ne pas oublier le nombre que vous avez choisi comme base de départ.
– Alors, maintenant que vous avez utilisé le programme, s’agit-il d’intelligence artificielle, de magie, de télépathie, de prestidigitation ???
Avouez que si l’on utilise cet amusement sans se poser de question, c’est assez troublant !
Démonstrateur Marienbad_A.
Rendue célèbre par le film d’Alain Resnais et d’Alain Robbe-Grillet en 1961 le jeu de Marienbad a été popularisé au point d’en prendre le nom. Appartenant à la famille des jeux de Nim il est très ancien et peut se jouer avec des petits cailloux, des osselets, puis plus récemment avec des jetons, des billes, des dominos, des cartes etc. Dans le film il y a quatre rangées d’allumettes, avec 1, 3, 5, 7 unités et celle ou celui qui prend la dernière allumette a perdu. À chaque tour, le joueur prend autant d’allumettes qu’il désire, au moins une et dans une même rangée. Dans le film, celui ou celle qui prend la dernière allumette à PERDU. Bien que l’on puisse prendre l’option contraire, dans notre démonstrateur on utilisera cette convention.
Le nombre d’éléments par rangée sera égal au maximum à huit, au minimum à trois et changera à chaque partie. Le nombre de rangée sera égal à six.
L’ordinateur connait les règles du jeu, mais sa sagacité sera fonction de la difficulté que vous choisissez au début de chaque partie. C’est aussi vous qui décidez qui commence à jouer. Il aurait été possible d’utiliser la stratégie gagnante imparable utilisant la représentation binaire par colonne. (Voir sur Internet en https://fr.wikipedia.org/wiki/Jeu_de_Marienbad par exemple.) Dans un premier temps j’ai émulé cette méthode. Mais ne jamais gagner était trop frustrant. Aussi il est appliqué une stratégie nettement moins astucieuse, avec l’avantage de pouvoir gagner assez souvent. Dans un premier temps je vous conseille de ne pas aller voir l’algorithme dans le listage des deux croquis pour ne pas dévoiler la magie et quand l’ordinateur gagne nous laisser l’impression que ce programme est « intelligent ». Ensuite, lorsque vous vous serez bien amusé, alors dans le listage la stratégie utilisée par la machine est entièrement commentée.
Deux versions logicielles sont disponibles, Marienbad_A.ino et Marienbad_B.ino dans lesquelles le démonstrateur fait appel à strictement la même stratégie. La version A est celle économique, c’est à dire qu’elle n’impose strictement aucun investissement. L’interface de dialogue Homme/Machine est entièrement réalisé avec le Moniteur de l’IDE. C’est naturellement la moins conviviale du point de vue pratique. Comme ces deux démonstrateurs sont relativement évolués, ils sont préservés dans le dossier séparé réservé aux <! Petits PROJETS>.
La Fig.300 présente un montage de ce qui s’affiche sur l’écran vidéo. Sur RESET le logiciel se présente en 1. Puis en 2 il propose à l’humain de choisir le niveau de difficulté qu’il désire. Ensuite en 3 l’opérateur précise qui va commencer la partie. Le programme résume en 4 les conditions initiales. Ensuite, on va alterner entre les actions 6/7 et 9 des deux protagonistes jusqu’à ce que l’un deux en 10 termine la partie en cours. L’ordinateur enchaîne alors une nouvelle partie en reprenant en 2 la saisie des désirs de l’humain. Quand la ligne à modifier a été désignée par l’opérateur, il indique en 6 la position à partir de laquelle tous les pions qui sont à droite sont enlevés, y compris celui de la position indiquée. En 5 et en 8 sont encadrées les zones qui changent. Noter que pour faciliter le repérage de la ligne qui a été modifiée, le symbole ‘>‘ précède la ligne des ‘*‘ qui symbolise les pions. Au passage vous trouverez en ligne 64 l’instruction Chiffre_saisi = byte(CARACTERE) – 48; qui remplace la fonction atoi pour transformer un char en un nombre décimal. Quand ce nombre est compris entre 0 et 9 cette technique est bien plus économe en octets. (12 octets de moins.)
Démonstrateur Marienbad_B. (Version de luxe.)
Logiciel relativement sophistiquée, cette version constitue une application à part entière entièrement autonome qui pourrait parfaitement être intégrée dans un petit coffret, avec son clavier et son écran graphique. Du reste, chronologiquement, elle a été entièrement développée en premier, puis la version A en a été déduite. Elle nous sert au passage de révision pour l’utilisation du clavier de la Fig.109 et l’usage de l’écran OLED de 0,96 pouces de diagonale. C’est ici une version monochrome qui est mise à contribution pour ne pas avoir la zone non graphique entre les mosaïques jaunes et les mosaïques bleues. Sur RESET le programme affiche l’écran de la Fig.301 en « double taille » et attend que l’on clique sur l’une des touches du clavier pour passer à la suite. Il aurait été possible de mettre un delay(), mais il fallait obligatoirement une touche pour initialiser le générateur de nombres aléatoires. Le démonstrateur commence en Fig.302 par nous faire choisir le niveau de difficulté du jeu. Les protocoles sont précisés dans le listage en tête de programme. Puis en Fig.303 on choisit qui va commencer à jouer. Quand c’est à l’humain de jouer, OLED affiche un écran tel que celui de la Fig.304 où les symboles 3 correspondent à des lignes vides. En 2 le cercle « creux » représente la position à partir de laquelle seront supprimés les pions. Quand la fenêtre s’affiche, le programme place l’index tout à gauche et cherche verticalement la première ligne non vide en partant du haut vers le bas. Ici ce serait en 1, mais L’opérateur à cliqué une fois sur le BP bleu et le logiciel a sauté la ligne vide n°2. Puis la Fig.305 présente l’écran lorsque l’index à été déplacé deux fois à droite avec la touche jaune du clavier. Dans une autre partie Fig.306 où c’est encore à l’opérateur à jouer, ce dernier a cliqué quatre fois vers le bas et deux fois vers la droite. Quand il va valider avec la touche noire, l’index étant en position repérée par le carré jaune, tous les pions contenus dans le rectangle rouge vont être enlevés de la ligne. Il ne vous reste plus qu’à vous amuser, et éventuellement tenter de découvrir la stratégie du démonstrateur sans aller au préalable la lire dans le listage. Le jeu peut se jouer totalement isolé de tout ordinateur, il est 100% autonome. Toutefois, comme c’était le cas
pour le petit démonstrateur P51R si vous passez à la valeur true l’argument de la déclaration de la constante #define Aff_BP false située en tête de listage, le programme listera les données issues de la numérisation des touches (Valeurs numérisées et touches détectées.) pour éventuellement peaufiner les bornes de décision en fonction des valeurs obtenues sur votre prototype. À votre tour de trouver une stratégie gagnante à ce célèbre jeu de Marienbad …
Démonstrateur : Le JEU DE LA VIE.
À l’instar des deux Marienbad.ino, ce démonstrateur étant relativement évolué, il est rangé dans le dossier séparé réservé aux <! Petits PROJETS>. Incontestablement, s’il est un domaine où des logiciels très sophistiqués sont les bienvenus, c’est particulièrement celui de la recherche en biologie pour laquelle les chercheurs développent des programmes de simulation de plus en plus « vertigineux ». Pour en terminer avec notre exploration du chapitre consacré à l’intelligence artificielle, je vous propose ici un petit modèle bien dérisoire, qui malgré tout illustre assez bien un processus de simulation biologique : Le JEU DE LA VIE. Ce n’est pas un JEU à proprement parler, car la machine joue seule et sans adversaire. Intrinsèquement c’est un « automate cellulaire » devenu un jeu de simulation mathématique imaginé par John Horton Conway en 1970. Malgré des règles très simples, il est morphologiquement Turing-complet. (Ce qui du reste ici n’a pas vraiment grande importance.) C’est un automatisme aveugle où chaque évolution conduit à l’état suivant conformément aux règles « biologiques » suivantes :
Lorsque j’ai envisagé d’ajouter ce programme dans le chapitre relatif à l’intelligence artificielle, je n’avais qu’une vague idée de l’existence « du JEU de la VIE ». Séduit par sa description sur Internet, j’ai alors décidé de développer entièrement cette petite application. Vu que la formule de calcul donnée dans l’encadré jaune est assez élémentaire, je n’imaginais pas du tout la complexité logicielle à laquelle j’allais être confronté. Dès les premières heures de développement je me suis heurté à un problème de Collision de PILE, phénomène vicieux dont il est question dans le dernier chapitre de ce didacticiel. En outre, c’est un programme dans lequel on utilise à outrance des boucles imbriquées à trois niveaux ce qui n’est pas si fréquent, c’est donc un croquis qui mérite analyse si votre but est d’acquérir un savoir faire dans la pratique du C++. Émoustillé par le développement de ce démonstrateur qui n’a rien d’élémentaire, ce projet a été dès le début envisagé comme une application autonome pouvant donner lieu à un petit module ludique indépendant enfermé dans un petit coffret spécifique. C’est la raison pour laquelle cette application est sauvegardée dans le dossier dédié <! Petits PROJETS>. Conçu dès le départ comme un projet à part entière, j’ai respecté l’un des conseils prodigués dans la Fiche n°8 qui consiste à passer en EEPROM les textes du dialogue Homme/Machine pour gagner beaucoup
de place en espace de programme et surtout entre la PILE et le TAS. Comme il s’agit d’un exemple relativement complexe, la façon dont on se servira du programme et tous les détails techniques ainsi que les exercices de début sont réunis dans un document à part nommé Le JEU DE LA VIE.pdf rangé dans le dossier <Documents / FASCICULE>. Comme on doit loger les textes en EEPROM, les procédures qui permettent de les afficher ne sont plus faciles à repérer. Pour respecter le conseil de programmation proposés en Fiche n°7 dans l’encadré jaune, chaque appel à la routine qui va chercher les chaînes de caractère en EEPROM est suivie d’une remarque qui en précise le contenu du texte. Cette approche impose un protocole incontournable :
1) Commencer par téléverser EEPROM_pour_le_JEU_DE_LA_VIE.ino et utiliser le Moniteur de l’IDE avec « sa puce dédiée » pour exécuter cet outil informatique. L’écriture des données en EEPROM est suivie d’un listage complet qui en résulte en mémoire non volatile.
2) Ce n’est que lorsque les textes et les modèles de STRUCTURES disponibles sont présents en mémoire non volatile que l’on peut téléverser Le_JEU_DE_LA_VIE.ino qui aura alors un comportement correct.
Compilant Le_JEU_DE_LA_VIE.ino vous allez constater que le programme ne consomme finalement que 49% de l’espace mémoire réservé au programme et à peine 30% de la zone des données dynamiques. Par ailleurs, PILE –TAS nous laisse 391 octets de disponibles ce qui est bien plus que confortable. Ces résultats correspondent au bénéfice collatéral à avoir optimisé à outrance le code source. Du coup il serait possible d’ajouter encore une foultitude d’autres possibilités. Il se trouve que je ne sais plus quoi ajouter pour améliorer la qualité opérationnelle de ce petit logiciel. Pour vous appâter, en Fig.307 on a une photographie de l’affichage graphique d’une STRUCTURE avant évolutions. En Fig.308 et en Fig.309 sont représentés deux exemples du dialogue Homme/Machine. Ce démonstrateur achève notre cheminement dans le domaine tant galvaudé « de l’intelligence artificielle.
CONCLUSION : L’ordinateur n’est qu’une machine à brasser des « 0 » et des « 1 » sous contrôle d’un programme. Il n’a strictement aucune sensibilité et ignore somptueusement que le monde existe. Aussi, ce que l’on nomme « intelligence artificielle » à tout va n’a pas à faire peur aux créateurs, que ce soit aussi bien dans le monde de l’art que dans l’édition de romans policiers. Ces applications ne font que puiser les idées dans des banques de données colossales et de combiner ces dernières. Elles ne créent strictement rien de nouveau, même si une présentation très astucieuse des résultats peut créer l’illusion. Il ne faut pas pour autant « cracher dans la soupe », car de fabuleuses applications logicielles vont révolutionner la médecine, les sciences et les techniques un peu dans tous les domaines, et nous en serons les premiers bénéficiaires. Reste que ces logiciels sont comme l’internet. On y rencontre le pire et le meilleur, et il ne faut pas douter du fait que le « coté obscur de la force » aussi va se les approprier. Enfin, je vous propose pour clore ce sujet, une application d’intelligence artificielle magistrale qui se vente d’enrichir la biodiversité en créant « de toute pièce » des animaux vivants. L’une de ses premières réussites est incontestablement l’ÉPHANTCARPE de la Fig.310 qui a révolutionné la biologie. Cet animal a une trompe d’éléphant pour se nourrir. Il ne peut que pomper sa pitance dans des fluides en espérant y trouver ses nutriments. Il repose sur une patte d’araignée adaptée à sa taille, une aile d’aigle sur son flanc droit et une queue de carpe. Son équilibre reste précaire, il ne peut pas voler la portance n’étant que d’un coté, et dans l’eau il tourne en rond car l’aile le freine trop à sa droite … mais il est vivant et il fonctionne !
La suite est ici.