NUMERIQUE ET SCIENCES INFORMATIQUES

Niveau : Terminale générale, enseignement de spécialité NSI

Première Accueil

D
É
C
O
N
N
E
C
T
É

Chapitre 2 : Intelligence Artificielle IA

1 - Introduction et historique

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).

Source : CNRS Images des Mathématiques
tic                    Menage

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

2 - Apprentissage du jeu de Nim

Sources : Marie Duflot-Kremer
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 :

nim

On retire les bâtonnets de la gauche vers la droite, donc lorsqu'il reste :

Questions :

3 - Réseau de neurones artificiels

Leur origine remonte à 1957 avec Franck Rosenblatt qui inventa le perceptron qui est un algorithme se basant sur le modèle de la structure de la cellule nerveuse.

reseau

Représentation du réseau de neurones du jeu de Nin

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

3 - Implantation du code en python

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

Apprentissage automatique et interface graphique

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

Animations

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.

Décalage des allumettes

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 :