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
Tout d'abord il faut que l'ordinateur connaisse les règles du jeu :
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 :
On retire les bâtonnets de la gauche vers la droite, donc lorsqu'il reste :
Questions :
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 à l'indice.
Programme de test
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
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 : Thème du langage:
Contenu
sous licence CC BY-NC-SA 3.0
Pascal Hassenforder 17/08/2021
MAJ le 28/09/2021
Marie Duflot-Kremer