Machine à deviner

GW-Basic, utilisé par PC-Basic

Programme avec Texte Seulement

PC-BASIC

La genèse de nombreuses technologies que nous tenons pour acquises aujourd'hui est venue de Bell Telephone Laboratories. Foyer d'innovation, le premier transistor y a été inventé ainsi que le langage informatique C. En effet, Bell Labs a été le berceau du futur.

L'un des résidents les plus célèbres de Bell Labs était Claude Shannon. Shannon était mathématicien et cryptographe de métier et est considéré par beaucoup comme le père de la théorie de l'information.

Au début des années 1950, il a construit une "machine à deviner" électronique simplifiée mais puissante en réponse à la version plus complexe de son collègue David Hagelbarger. Hagelbarger a construit la première machine à deviner, qui jouait à une version du jeu appelée pièces de monnaie assorties ou « cotes et pairs ».

En fait, pas de manière aléatoire mais pseudo-aléatoire, en utilisant un algorithme générateur de nombres pseudo-aléatoires linéaire-congruentiel.

La machine de Hagelbarger a commencé comme le germe d'une idée pour lire dans les pensées, inspirée par un numéro du magazine Astounding Science Fiction, et a finalement évolué pour devenir l'une des premières IA électroniques fonctionnelles qui apprennent des êtres humains.

Les centimes correspondants impliquent que deux joueurs placent secrètement une pièce de monnaie, face ou pile basse, sur leurs paumes, puis ferment leurs paumes avec un poing. Les deux joueurs ouvrent ensuite leurs paumes simultanément pour la grande révélation. Si les pièces correspondent (face ou pile), l'un des joueurs gagne; s'ils ne correspondent pas, l'autre joueur gagne.

L'idée de base de la machine est la suivante : vous choisissez l'un des deux nombres (ou options), tels que 0 ou 1, ou + ou -.

La machine, discrètement et en secret, fait une prédiction. Si la machine devine votre choix correctement, vous perdez la manche; sinon, vous gagnez la manche.

Au début, les chances que la machine devine correctement ne sont pas meilleures qu'un tirage au sort. Mais, après un certain nombre de tours, la machine détecte des modèles - peu importe à quel point vous essayez de mélanger vos choix au hasard - et devient ainsi assez apte à prédire votre prochain mouvement.

La machine de Hagelbarger gardait une trace d'un certain nombre de variables différentes, tandis que celle de Shannon considérait moins de possibilités.

Le programme GUESS.BAS, détaillé ci-dessous, vous permet de jouer au jeu de devinettes contre GW-BASIC, quoique dans une version simplifiée.

Après avoir initialisé certaines variables au début, les instructions pour le jeu de devinettes sont affichées à l'écran (sur les lignes 10 à 70); le programme commence à rechercher l'entrée du joueur - soit 0 soit 1 - à partir de la ligne 100. Plus précisément, la variable INKEY$ est utilisée pour solliciter l'entrée sur la ligne 210, avec une fonction CHR$ pour interpréter le coup de poing.

Une fois qu'un 0 ou un 1 est pressé, GUESS.BAS bifurque vers l'un des trois sous-programmes :

• S'il s'agit du tout premier coup de l'utilisateur dans le jeu, passez à la ligne 500. Il n'y a pas de données préalables sur lesquelles l'algorithme peut baser une prédiction, donc l'ordinateur fait une supposition en utilisant la fonction RND pour lancer une pièce virtuelle.

• S'il s'agit du deuxième coup de l'utilisateur, passez à ligne 600. Il n'y a qu'un seul point de données que l'algorithme peut utiliser pour prédire le coup suivant : le premier coup de poing de l'utilisateur, 0 ou 1. Cette valeur est automatiquement définie comme étant la prédiction pour le coup de l'utilisateur, le deuxième mouvement.

• En commençant par le troisième coup de l'utilisateur, passez à la ligne 700. À ce stade, un 0 ou un 1 aléatoire est généré par l'algorithme comme prédiction, mais, comme une pièce pondérée, qu'un 0 ou un 1 soit tiré au hasard n'est pas nécessairement équiprobable, mais dépendant des mouvements antérieurs de l'utilisateur. Si l'utilisateur a choisi 0 de manière disproportionnée, alors 0 est plus susceptible d'être prédit que 1, et vice-versa.

Le premier joueur qui atteint vingt points remporte la partie.

Notez que les nombres sont générés aléatoirement dans le programme en utilisant la fonction RND.

L'algorithme pourrait faire un meilleur travail pour prédire le prochain mouvement. Peut-être que l'enregistrement de la probabilité des deux mouvements précédents - 00, 01, 10 et 11 - pourrait finalement conduire à de meilleures prédictions.

Cette approche est similaire à la façon dont Shannon a résolu le problème. Dans un court article qu'il a écrit en 1953, Shannon expose son approche d'une "machine à lire dans l'esprit" (ses mots) qui "recherche certains types de modèles dans le comportement de son adversaire humain". Il énumère huit situations possibles :

1. Le joueur gagne, joue la même chose et gagne à nouveau.
2. Le joueur gagne, joue la même chose et perd.
3. Le joueur gagne, joue différemment et gagne à nouveau.
4. Le joueur gagne, joue différemment et perd.
5. Le joueur perd, joue la même chose et gagne.
6. Le joueur perd, rejoue et perd à nouveau.
7. Le joueur perd, joue différemment et gagne.
8. Le joueur perd, joue différemment et perd à nouveau.

"Les types de modèles dont on se souvient", a écrit Shannon, "impliquent le résultat de deux jeux successifs (c'est-à-dire si le joueur a gagné ou non sur ces jeux) et s'il a changé son choix entre eux et après eux." Il était donc préoccupé par la façon dont le joueur réagissait aux victoires et aux défaites - comment cela affectait-il la stratégie du joueur ?

Il a poursuivi: "La machine supposera, si cette situation se reproduit, qu'il s'agit d'un modèle défini dans le comportement du joueur et jouera en conséquence."

Écrire un programme GW-BASIC modélisant la machine de Shannon n'est pas une mince affaire, mais c'est un défi qui vaut bien votre temps.

Mais il y avait plus dans la machine à deviner que juste l'IA. Comme le note William Poundstone, qui a écrit sur le jeu de devinettes dans son livre Rock Breaks Scissors, "[Hagelbarger] a découvert que les gens pensaient que le jeu de la machine d'origine était ennuyeux jusqu'à ce qu'il ajoute deux rangées de 25 lumières sur le dessus.

Ils fonctionnaient comme des flippers: chaque fois que la machine gagnait, une lumière rouge s'allumait. Chaque fois que l'humain gagnait, une lumière verte s'allumait. Le but était d'allumer une rangée entière de lumières avant l'autre." L'ajout d'un type d'affichage graphique similaire à GUESS.BAS aidera à piquer davantage l'intérêt des gens.

GUESS.BAS

 

 

 

 

 

 

 

Recherche personnalisée