Niveau : Terminale générale, enseignement de spécialité NSI
Donald Michie (1923-2007) est un chercheur britannique en intelligence artificielle reconnu pour avoir travaillé au déchiffrage des messages codés allemands pendant la seconde guerre mondiale. Tout comme Alan Turing, avec qui il a travaillé à Bletchley Park, Michie s’intéresse à théoriser les mécanismes du jeu d’Échecs ; les deux hommes entretiennent régulièrement des discussions, sur la possibilité de construire des programmes informatiques qui pourraient faire preuve d’intelligence et capables d’apprendre par eux-mêmes. Ils mettent respectivement au point les programmes Turochamp (d’Alan Turing et David Champernowne) et Machiavelli (de Donald Michie et Shaun Wylie) vers la fin des années 1940, alors qu’il n’existe pas encore de machine pour exécuter les instructions. Turochamp et Machiavelli ont joué quelques parties par correspondance, mais les calculs fastidieux ont rapidement découragé les concepteurs... Ces réflexions sur la possibilité de créer des machines « qui apprennent » amènent Donald Michie à développer en 1961 une machine destinée à jouer, et surtout à apprendre à jouer, au Tic-Tac-Toe. Il la nomme MENACE (Matchbox Educable Noughts And Crosses Engine).
Elle est composée de 304 boîtes d’allumettes vides et de perles de couleur. L’objectif de Michie n’est pas d’élaborer une machine qui jouerait parfaitement dès le début, mais de construire un dispositif qui ne dispose d’aucune information préalable - à part les règles du jeu - et qui devient un joueur expert avec de la pratique.
Vu la complexité de cette machine, on va s'appuyer sur les règles du jeu de Nim
Au départ on dispose au-dessus de chaque bâtonnet 9 verres contenant
des jetons numérotés de 1 à 3, représentants le nombre d'allumettes que
peut prendre l'ordinateur à chaque coup :
Questions :
En disposant de très grands jeux de données et d’une forte puissance de calcul, les machines peuvent désormais reconnaître des objets, traduire des discours, s’auto-entraîner à identifier des motifs complexes, apprendre à définir une stratégie et gérer des imprévus en temps réel
Revoir l'exemple de machine learning de première : le KNN
Structure des données :
verres=[[],[1],[1,2],[1,2,3],[1,2,3],...]
Afin que le verre 1 corresponde bien à son indice on peut commencer par un élément de rang 0 vide, cela évitera de retrancher 1 au rang.
Algorithme :Début du programme verres ← [[],[1],[1,2],[1,2,3],[1,2,3],...] Répéter 50 fois nbr_bat ← nombre de bâtonnets total Tant que le nbre de bâtonnets est supérieur à 0 alors si des jetons sont présents dans le verre alors jeton ← prendre au hasard un jeton parmi ceux qui restent dans le verre (librairie random) der_jeton ← jeton # on mémorise le dernier jeton pris der_verre ← numéro du verre (nbr_bat) # on mémorise le dernier verre utilisé nbr_bat ← retrancher au nombre de bâtonnets le jeton tiré si le nombre de bâtonnets restants = 0 alors afficher que l'ordinateur gagne. on sort la boucle tant que (l'instruction break) fin si fin si sinon # le verre est vide jeton ← prendre au hasard 1, 2 ou 3 bâtonnets nbr_bat ← retrancher au nombre de bâtonnets le jeton tiré fin sinon on affiche le nombre de bâtonnets pris par l'ordinateur de bâtonnets restants bat_adversaire ← demander à l'adversaire d'entrer le nombre de bâtonnets qu'il veut prendre (input) tant qu'il n'a pas choisi un nombre compris entre 1 et 3 ou qu'il dépasse le nombre de bâtonnets restants bat_adversaire ← on redemande à l'adversaire d'entrer le nombre de bâtonnets qu'il veut prendre fin tant que nbr_bat ← retrancher son choix au nombre de bâtonnets restants s'il ne reste plus de bâtonnets alors on affiche que l'humain gagne on retire le dernier jeton mémorisé du dernier verre mémorisé (Variable.remove(nombre)) on sort de la boucle tant que fin si fin tant que afficher le nouveau contenu des verres fin répéter Fin du programme
Collez puis enregistrez votre code python ci-dessous
Téléchargez le fichier suivant : graph.zip
Décompressez ces fichiers dans vos documents, dans le même répertoire contenant votre programme précédent
Ajoutez au début de votre programme les lignes suivantes :
Remplacer la partie du code où on demandait à l'utilisateur de choisir le nombre de bâtonnets :
On pourrait faire jouer l'adversaire de l'IA de manière complètement aléatoire. Pour gagner en vitesse d'apprentissage de l'IA, l'adversaire va faire un choix menant à la victoire lorsque c'est possible.
Expliquez les lignes 21 à 23 et indiquez comment l'adversaire arrive à gagner au début des parties
Supprimez la ligne qui définit la variable verres, elle existe déjà dans la librairie ANim importée.
Enfin ajoutez une pause d'une seconde à la fin du programme
Si vos variables correspondent à celles de l'algorithme et que vous avez scrupuleusement suivi les indications ci-dessus, les verres devraient se vider de leurs jetons.
Si le programme ne s'arrête plus avec stop ni la croix de l'interface graphique, sélectionner la fenêtre Edupython et appuyer sur ctrlF2
En observant les lignes de codes de la fonction afficher_IA ci-dessous, ajoutez au programme les variables tour et gagne suivies d'une pause
La liste tirage comprend les listes des tirages effectués [nbr_bat,jeton] de chaque tour
Une fois le nombre de jetons choisi par l'IA, ajouter à tirage [nbr_bat,jeton] suivi d'une pause
A la fin de la partie, pensez à remettre certaines variables à leur état initial.
Lorsque l'IA a choisi le jeton on peut aussi l'affecter la variable decale suivi d'une pause
Lorsque l'adversaire à choisi le nombre de bat_adversaire on peut aussi l'affecter à la variable decale suivi d'une pause
Collez puis enregistrez votre code python ci-dessous
Fond : Texte : Tables :
Contenu
sous licence CC BY-NC-SA 3.0
Pascal Hassenforder 17/08/2021
MAJ le 28/09/2021
Marie Duflot-Kremer