Découvrez nos
ressources

Matériel nécessaire :
- 1 robot minimum ou simulation dans le logiciel
- 1 ordinateur/robot
- Petite arĂšne minimum
â
Configuration logiciel :
- configuration d'exemple : dépend de la mise en situation du code
â
Durée :
2 heures
Age :
16 ans et +
â
Les + de cette activité :
- Peut ĂȘtre rĂ©alisĂ©e avec le simulateur
â
Activité ludique pour classe avec plusieurs robots : les élÚves entraßnent les robots à rouler dans un circuit puis une course est organisée. Les élÚves apprennent par la manipulation le principe de l'apprentissage supervisé et l'importance de la qualité des données d'entraßnement.
[Contenu vidéo à venir]
â
â
Introduction
Le Machine Learning est une branche de lâintelligence artificielle qui a pour but de donner la possibilitĂ© aux ordinateurs dâapprendre. Un ordinateur nâest pas intelligent, il ne fait quâexĂ©cuter des tĂąches. On lui dĂ©crit sous forme de programmes quoi faire et comment le faire. Câest ce quâon appelle la programmation.
Le Machine Learning traite des sujets complexes oĂč la programmation traditionnelle trouve ses limites. Construire un programme qui conduit une voiture serait trĂšs complexe voire impossible. Cela Ă©tant dĂ» aux trĂšs nombreux cas possibles Ă traiter⊠Le Machine Learning traite cette problĂ©matique diffĂ©remment. Au lieu de dĂ©crire quoi faire, le programme apprendra par lui-mĂȘme comment conduire en âobservantâ des expĂ©rimentations.
Machine Learning : Donner la possibilitĂ© Ă un programme dâapprendre des tĂąches qui nâont pas Ă©tĂ© programmĂ©es.
En fonction des donnĂ©es dâexpĂ©rimentations que prendra lâalgorithme dâapprentissage en entrĂ©e, il dĂ©duira par lui-mĂȘme une hypothĂšse de fonctionnement. Il utilisera cette derniĂšre pour de nouveaux cas, et affinera son expĂ©rience au fil du temps.
Il existe trois types dâapprentissages en Machine Learning :
- Apprentissage Supervisé
- Apprentissage Non supervisé
- Apprentissage par Renforcement
Lâapprentissage supervisĂ© est le type le plus courant. Il sâagit de fournir aux algorithmes dâapprentissages un jeu de donnĂ©es dâapprentissage (Training Set) sous forme de couples (X, Y) avec X les variables prĂ©dictives (ou donnĂ©es dâentrĂ©e), et Y le rĂ©sultat de lâobservation (ou dĂ©cision). En se basant sur le Training Set, lâalgorithme va trouver une fonction mathĂ©matique qui permet de transformer (au mieux) X vers Y. En dâautres termes lâalgorithme va trouver une fonction F tel que YâF(X) .
Ainsi, dans une situation X, il saura quelle décision Y doit prendre.
Situation d'étude et training set du robot AlphAI
Il convient dĂ©sormais de prĂ©ciser les situations X et les dĂ©cisions Y attendues.Â
Le cas dâĂ©tude proposĂ© est le dĂ©placement du robot dans une arĂšne rouge. Lâobjectif est que le robot se dĂ©place tout seul sans jamais toucher les murs.
Pour cela le robot pourra prendre les décisions suivantes :
- Tourner Ă gaucheÂ
- Aller tout droitÂ
- Tourner Ă droiteÂ
Afin de prendre la dĂ©cision il faut nĂ©cessairement un retour dâinformation afin de disposer de donnĂ©es (data ou training set).

Cela est donnĂ© par les capteurs. Le choix effectuĂ© ici est dâutiliser la camĂ©ra. De la zone dâimage de la camĂ©ra il est extrait deux zones qui seront appelĂ©es super pixels (voir ci-contre). La quantitĂ© de rouge de chaque super-pixel augmente lorsque le robot sâapproche des murs en raison du contraste entre la piste blanche et les murs rouges.
â
â
Activité 1. Indiquer dans le tableau ci-dessous le résultat attendu comme décision en fonction de ce qui est repéré dans les superpixels.

â
Les cas simplifiĂ©s ci-dessus, ne se produisent que trĂšs rarement. Pour pouvoir prendre la dĂ©cision dans tous les cas possibles, il faut obtenir la valeur numĂ©rique du niveau de rouge.Â
Lâimage issue de la camĂ©ra est de taille 48*64 pixels. La position et la gĂ©omĂ©trie des super-pixels est dĂ©finie par la figure suivante :
â

â
ActivitĂ© 2. Ouvrir le fichier get_values.py. Indiquer le chemin dâaccĂšs de lâimage forward_0.jpg et exĂ©cuter le code ci-dessous permettant dâafficher lâimage dans python.
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
def read_image(name):
    return np.array(Image.open(name, "r"))
img1=read_image("forward_0.jpg") #indiquer le chemin d'accĂšs de l'image
plt.imshow(img1)
plt.show()
Vous devez obtenir une image de la forme ci-dessous dâune taille de 48 pixels par 64 pixels, codĂ©e avec les trois couleurs RVB (Rouge Vert Bleu).

« img1 » est un tableau de pixels de taille 48*64*3
Dans le tableau de pixel on retrouve les 3 niveaux de couleurs Rouge Vert Bleu codés entre 0 et 255.
A partir de cette image, il va falloir extraire les deux super-pixels dĂ©finis prĂ©cĂ©demment et dĂ©terminer une mĂ©thode permettant dâobtenir le niveau de rouge pour chacun.
â
â
Nous allons comparer différentes techniques pour obtenir le meilleur contraste entre le rouge et le blanc de chaque super-pixel :

- le niveau de gris moyen de chaque super-pixel
- le niveau de rouge moyen de chaque super-pixel
- le niveau de vert moyen de chaque super-pixel
â
Dans un premier temps, lâimage est transformĂ©e en niveau de gris Ă lâaide de la fonction rgb2gray de la façon suivante :
def rgb2gray(rgb):
    return np.dot(rgb[...,:3], [0.299, 0.587, 0.144])
img2=rgb2gray(img1)
plt.imshow(img2, cmap="gray")
plt.show()
« img2 » correspond Ă lâimage en niveau de gris. Ainsi il nây a quâune seule valeur numĂ©rique entre 0 et 255 pour chaque pixel. 0 correspond Ă un pixel blanc et 255 un pixel noir. Les super pixels Ă©tant dans la zone « basse » de lâimage
â
â
ActivitĂ© 3. Ecrire une fonction moyenne(img,x,y,height,width)  qui va prendre en argument un tableau de pixels « img » Ă un niveau de couleur, les coordonnĂ©es « x » et « y » du pixel en haut Ă gauche dâun super-pixel, la hauteur « height » et la largeur « width » dâun super-pixel et qui renvoie la moyenne du niveau de couleur du super-pixel.Â
â
Il est ainsi possible de rĂ©cupĂ©rer deux valeurs avec les deux super-pixels dĂ©finis prĂ©cĂ©demment Ă lâaide du code :
def get_two_values(img, x1=10, y1=28, x2=42, y2=28, height=16, width=13):
    value1 = moyenne(img, x1, y1, height, width)
    value2 = moyenne(img, x2, y2, height, width)
    return np.array((value1, value2))
Le niveau de couleur du super-pixel gauche est noté value1, le niveau de couleur du super-pixel droit est noté value2. Il est ainsi possible de définir un point de coordonnées (value1, value2)
â
â
ActivitĂ© 4. Executer le code pour rĂ©cupĂ©rer les valeurs value1 et value2 de lâimage en niveau de gris obtenue prĂ©cĂ©demment.
Le choix effectuĂ© dans le logiciel AlphAI est dâutiliser la fonction de python mean qui va calculer la valeur moyenne du tableau.
â

â
â
Activité 5. Appliquer la méthode du logiciel AlphAI et celle avec le niveau de gris et compléter avec les valeurs value1 et value2 dans les deux cas.
Fonction mean
Niveau Gris
Forward_0
Forwad_1
Left_0
Left_1
Right_0
Right_1
Right_2
Test_0
Test_1
â
â
Activité 6. Placer les points sur le graphique et identifier les zones correspondant aux différentes décisions (tourner à gauche, aller tout droit, tourner à droite). Conclure sur la méthode qui vous semble la plus appropriée pour distinguer les différentes décisions.
Intensité super-pixel droit
Intensité super-pixel gauche
â
Ă ce stade, il serait possible de piloter le robot Ă partir dâactions conditionnelles portant sur ces valeurs de super-pixels. Lâapproche va ĂȘtre diffĂ©rente dans la suite. Nous allons utiliser une mĂ©thode portant le nom dâalgorithme des K plus proches voisins.
â
â
Lâalgorithme des k plus proches voisins, KNN
Nous allons Ă©tudier de prĂšs un algorithme trĂšs connu parmi les algorithmes de machine learning : lâalgorithme des K plus proches voisins, ou KNN en anglais pour « K Nearest Neighbours ». Cet algorithme a lâavantage dâĂȘtre trĂšs simple, et donc de fournir une bonne base pour comprendre lâapprentissage supervisĂ©.
L'idĂ©e est d'utiliser un grand nombre de donnĂ©es afin "d'apprendre Ă la machine" Ă rĂ©soudre un certain type de problĂšmes. Lâalgorithme est particuliĂšrement intuitif quand les donnĂ©es se prĂ©sentent comme des points dans un espace de dimension 2, qui pourront donc ĂȘtre affichĂ©s Ă lâĂ©cran. Nous allons donc choisir une configuration avec seulement 2 entrĂ©es capteurs, Ă savoir 2 « super-pixels » de la camĂ©ra afin de permettre au robot de repĂ©rer les murs et de circuler dans lâarĂšne sans blocage. Dans un premier temps ce sera Ă nous dâindiquer au robot lâaction associĂ©e pour chaque nouvelle donnĂ©e (2 « super-pixels »), mais ensuite il sera capable de circuler par lui-mĂȘme en choisissant lâaction majoritaire prise par les K plus proches voisins parmi les donnĂ©es entrĂ©es pendant la phase dâentraĂźnement.
Cet algorithme dâapprentissage supervisĂ© permet de classifier des donnĂ©es en fonction de leur proximitĂ© avec celles existantes constituant les donnĂ©es dâentraĂźnement. Les nouvelles donnĂ©es considĂšrent k voisins, les k plus proches, pour choisir quelle classification appliquer. Avec des donnĂ©es discrĂštes, comme des points dans un plan ou dans lâespace, les plus proches voisins sont sĂ©lectionnĂ©s en utilisant la distance euclidienne, mais dâautres mĂ©thodes peuvent ĂȘtre utilisĂ©es dans dâautres situations, comme la distance Manhattan si les donnĂ©es se placent sur un quadrillage ou un Ă©chiquier. LâintĂ©rĂȘt de cet algorithme rĂ©side dans le choix de k : trop petit et lâalgorithme devient trop sensible aux erreurs ou aux donnĂ©es manquantes, trop grand et il considĂšre des donnĂ©es qui ne devraient pas ĂȘtre considĂ©rĂ©es.
On peut schĂ©matiser le fonctionnement de k-NN en lâĂ©crivant en pseudo-code suivant :
Début Algorithme
Données en entrée :
- un jeu de données D, correspondant au training set élaboré
- une fonction de calcul de distance entre les deux points considérés de coordonnées [x1,y1] et [x2,y2]. d=x2-x12+y2-y12
- Un nombre entier k, représentant le nombre de voisins à prendre en compte
Pour une nouvelle observation X dont on veut prédire sa décision Y Faire :
- Calculer toutes les distances de cette observation X avec les autres observations du jeu de données D
- Retenir les K observations du jeu de données D les plus proches de X en utilisation la fonction de calcul de distance d
- Prendre les valeurs de Y des k observations retenues. Effectuer une rĂ©gression et calculer la moyenne (ou la mĂ©diane) de Y retenuesÂ
- Retourner la valeur calculĂ©e dans lâĂ©tape 3 comme Ă©tant la valeur qui a Ă©tĂ© prĂ©dite par K-NN pour lâobservation X.
Fin Algorithme
Il faut donc pouvoir calculer la distance entre deux points. Dans un graphique en deux dimensions comme câest le cas dans notre exemple, cela correspond simplement Ă la norme du vecteur entre les deux points.
Activité 1. Ecrire la fonction distance(point1, point2)  qui prend en argument deux points (point1=[x1,y1], point2=[x2,y2]) et qui renvoie la distance entre ces deux points.
ActivitĂ© 2. ComplĂ©ter le tableau ci-aprĂšs en dĂ©terminant la distance entre les super-pixels des images prĂ©cĂ©dentes (forward_0.jpg, forward_1.jpg,âŠ) et des deux images tests (test_0.jpg et test_1.jpg).

â
ActivitĂ© 3. Appliquer les Ă©tapes 3 et 4 de lâalgorithme K-NN en en prenant K=1,2,3 et 4 et en dĂ©duire la dĂ©cision qui doit ĂȘtre prise (aller tout droit, tourner Ă gauche, tourner Ă droite).
â
â
Entrainement du robot
Phase de prĂ©paration de lâenvironnement de travail
- Dans le menu ParamĂštres - > Charger des configurations d'exemples, sĂ©lectionner la configuration exemple « apprentissage supervisĂ© - KNN CamĂ©ra».Â

Attention : Pour ce scĂ©nario, afin dâobtenir le meilleur contraste possible, mettez une surface blanche au sol, et Assurez-vous dâavoir un Ă©clairage uniforme sur la surface de lâarĂšne.
â
Phase dâentraĂźnement
Activité 1. Suivre le protocole afin de réaliser la phase d'entraßnement
â
Vous ĂȘtes maintenant connectĂ© au robot, et votre Ă©cran doit ressembler Ă lâimage ci-dessous. Le niveau de sa batterie doit sâafficher en bas Ă droite (vĂ©rifiez que le robot est bien chargĂ©).
- Tant que le robot a de la place pour avancer, appuyez sur aller tout droit.Â
- Si le robot sâapproche dâun mur, appuyez sur virage sur place Ă gauche ou Ă droite.Â
Ă chaque instruction envoyĂ©e au robot, un nouveau point est ajoutĂ© au graphique. Lâabscisse de ce point correspond Ă la valeur du super-pixel de gauche et son ordonnĂ©e correspond Ă la valeur du super-pixel de droite. La couleur de chaque point correspond Ă lâaction choisie : jaune pour aller tout droit, vert pour tourner Ă droite et rouge pour tourner Ă gauche. Ces points sont les donnĂ©es dâentraĂźnement. Cette phase dâentraĂźnement est primordiale pour que lâIA puisse apprendre correctement. Si les donnĂ©es dâentraĂźnement contiennent trop dâerreurs ou dâapproximations, le comportement de lâIA risque de ne pas ĂȘtre satisfaisant.Â

Notez bien :
Les pixels deviennent plus sombres lorsque le robot sâapproche des murs. Normalement si le pixel de gauche est le plus sombre, il faut tourner Ă droite, et si le pixel de droite est le plus sombre, il faut tourner Ă gauche. AprĂšs avoir ajoutĂ© quelques points sur le graphique, vous pouvez activer la couleur dâarriĂšre-plan dans lâonglet des paramĂštres de visualisation. Cette option colore chaque pixel du graphique de la couleur du point de donnĂ©e le plus proche.

Lorsque vous aurez trois rĂ©gions bien claires sur le graphique, arrĂȘtez la phase dâentraĂźnement et rĂ©activez lâautonomie pour passer Ă la phase de test. Ne pas hĂ©siter Ă bouger le robot Ă la main, lorsquâune zone du graphique contient trop peu de points.
â
â
Tests
Si le robot est bien entraĂźnĂ©, il saura Ă©viter les bords par lui-mĂȘme. Si au contraire il est mal entraĂźnĂ© ou la luminositĂ© dans lâarĂšne nâest pas homogĂšne, cela va produire du bruit dans les rĂ©gions créées et le robot fera plus dâactions inappropriĂ©es.
Notez bien :
Afin dâobtenir le meilleur comportement du robot, il faut tester plusieurs valeurs de k. Pour changer cette valeur, allez dans lâonglet « IA » et changer la valeur du paramĂštre « nombre de voisins ».
Une bonne valeur de k rĂ©duit lâeffet du bruit et permet au robot de mieux gĂ©rer les rĂ©gions inexplorĂ©es.
Une fois que le robot est bien entraßné et que les tests se déroulent bien, vous pouvez passer aux activités.
â
ActivitĂ© 1. Comparez le comportement du robot avec k=1, k=3, k=10 et k=30. Ensuite, dâaprĂšs ce que vous constatez, essayer de dĂ©terminer la valeur de k qui minimise lâeffet des erreurs et donne le meilleur comportement du robot, câest-Ă -dire la plus grande distance parcourue sans heurter un mur. La bonne valeur va dĂ©pendre du nombre de points de donnĂ©es, et du nombre dâerreurs dans ces donnĂ©es.
â
ActivitĂ© 2. Maintenant que vous avez bien compris lâalgorithme, essayez dâentrainer le robot avec le minimum de donnĂ©es possibles qui lui permettent de tourner sans taper contre les murs.Â
â
Commencez par faire une version théorique en dessinant les zones que vous voudriez obtenir sur votre graphique. Quels points sont à placer pour la réaliser ? Testez ces points avec le robot aprÚs les avoir rentrés dans le logiciel. Votre modÚle théorique a-t-il été applicable à la réalité, ou avez-vous dû y faire des modifications ? Quelles sont les limitations de cette méthode pour un robot tel que celui-là ?
Astuce : Vous pouvez déplacer le robot à la main pour choisir les points que vous voulez lui apprendre.
Remarque : Nous avons rĂ©ussi Ă apprendre au robot Ă circuler dans lâarĂšne sans taper les murs avec 3 points seulement.
Pour aller plus loin :
â
ActivitĂ© 3. Sâil vous reste du temps et que vous voulez expĂ©rimenter, changez dâalgorithme et regardez quelles diffĂ©rences le robot a dans son comportement par rapport Ă KNN. Quel autre algorithme proposĂ© Ă un apprentissage plus rapide ? Et quel autre algorithme permettrait, selon vous, lâapprentissage de tĂąches plus complexes, comme taper dans un ballon vert ou reconnaĂźtre des ordres communiquĂ©s avec des signes de la main ?
â
â
Programmer lâalgorithme des K plus proches voisins
1. Stoppez le robot et réactivez le bouton « Autonome ».

2. Dans lâonglet IA, sĂ©lectionnez Algorithme : code Ă©lĂšve , cela ouvrira une nouvelle fenĂȘtre vous demandant de nommer le fichier.Â
3. AprĂšs lui avoir donnĂ© un nom, le fichier apparaĂźt dans lâexplorateur Windows : ouvrez-le dans votre Ă©diteur de code prĂ©fĂ©rĂ© (Spyder, par exemple).
Ce code présente 3 fonctions déjà existantes : init, learn et take_decision. Ces fonctions seront appelées par le logiciel principal. Seule la fonction take_decision est importante pour ce TP.
4. Remarquez que quand vous vous déconnectez, un mini-robot simulé apparaßt en bas à droite. Si vous le voulez, vous pouvez faire les questions ci-dessous avec ce mini-robot et revenir au vrai robot à la fin du TP ; mais vous pouvez aussi faire tout le TP en restant connecté au vrai robot : comme vous préférez !
â
â
PROGRAMMER LE ROBOT DIRECTEMENT
Avant de programmer une intelligence artificielle, commençons par comprendre le principe de la fonction take_decision. Vous allez pouvoir modifier cette fonction pour changer le comportement du robot : aprĂšs chaque modification, sauvegardez votre code et cliquez sur le bouton « RĂ©initialiser lâIA ». Cette Ă©tape est Ă rĂ©pĂ©ter pour chaque modification du code : sauver puis recharger le code.
La fonction a le prototype suivant :
take_decisionsensors:listint
LâentrĂ©e sensors est lâĂ©tat des capteurs du robot, câest-Ă -dire dans notre cas une liste de deux valeurs sensors[0] et sensors[1] qui sont lâintensitĂ© de ce que voit le robot Ă sa gauche et Ă sa droite. Sa sortie est le numĂ©ro de lâaction choisie.
- Ajoutez lâinstruction print(sensors) Ă lâintĂ©rieur de la fonction. Sauvegardez, cliquez « RĂ©initialiser lâIA » dans le logiciel, et dĂ©marrez le robot. La valeur de sensors sâaffiche maintenant dans la console (cliquer dans la barre des tĂąches sur lâicĂŽne pour afficher la console). Quelle est Ă peu prĂšs la valeur de sensors quand le robot est face Ă un mur ? quand il nâest pas face Ă un mur ? quand il y a un mur Ă sa gauche ou Ă sa droite ?

â
- Pour lâinstant la fonction renvoie 0. Quelle valeur faut-il renvoyer pour que le robot aille tout droit ? (Faites lâessai)
â
- Utilisez la variable x pour programmer un comportement cohĂ©rent du robot : « sâil nây a pas de mur, je vais tout droit ; sâil y a un mur, je me tourne. »
â
â
PROGRAMMATION DE LâALGORITHME
Calcul de distance
Si vous ne lâavez pas dĂ©jĂ fait lors de lâactivitĂ© prĂ©cĂ©dente, programmez une nouvelle fonction distance qui prend comme arguments deux points a et b qui sont deux tableaux de deux Ă©lĂ©ments chacun contenant leurs coordonnĂ©es et qui renvoie la distance euclidienne de ces deux points. Le prototype de la fonction est le suivant :
distancea:list, b:listfloat
Avec a=x1, y1 et b=x2, y2
Pour rappel, la distance euclidienne entre ces deux points est : d=x2-x12+y2-y12.
La racine carrĂ©e peut ĂȘtre utilisĂ©e en Python en important la bibliothĂšque math (ou numpy) en haut du fichier :
import math
et sâĂ©crit ainsi :
y = math.sqrt(x)
LâopĂ©rateur carrĂ© peut ĂȘtre fait de la façon suivante :
y = x**2
- Programmez la nouvelle fonction distance. Puis pour la tester, écrivez en bas du fichier :
# compute distance
a = [0, 0]
b = [1, 2]
print("distance", distance(a, b))
Sauvez, chargez le code avec « RĂ©initialiser lâIA » et notez ci-dessous le rĂ©sultat qui sâaffiche dans la console :
â
Calcul de toutes les distances
Maintenant que vous avez une mĂ©thode pour calculer une distance, Ă©crivez une nouvelle fonction all_distances qui calcule toutes les distances dâun point par rapport Ă la variable train_sensors qui sont les donnĂ©es dâentrĂ©e dâentrainement. Cette fonction prendra comme argument un nouveau point x qui est une liste de deux Ă©lĂ©ments comme prĂ©cĂ©demment, et renverra un tableau contenant toutes ces distances. Son prototype est :
all_distances(a:list[float], train_sensors:list[list[float]])âlist[float]
Avec a=x0, y0 et train_sensors=x1, y1, x2, y2, âŠ, xn, yn Le tableau train_sensors Ă©tant de longueur n.
â
- Programmez all_distances, puis testez avec le code suivant en bas du fichier :
# compute all distances
a = [0.4, 0.6]
train_sensors = [[0, 0], [0, 1], [1, 0]]
distance_list = all_distances(a, train_sensors)
print('distances to data', distance_list)
Rechargez le code et recopiez votre résultat :
â
Trouver le plus petit element dâun tableau
CrĂ©ez une fonction sâappelant find_minimum prenant comme unique argument un tableau et renvoyant lâindice du premier plus petit Ă©lĂ©ment. Son prototype est :
find_minimum(dlist:listfloat)âint
- Programmez et testez find_minimum avec le code suivant :
# minimum in a list
idx_min = find_minimum(distance_list)
print('index of minimum', idx_min)
Notez le résultat :
â
Le plus proche voisin
Maintenant que nous avons toutes les fonctions nĂ©cessaires, nous allons pouvoir crĂ©er la fonction nearest_neighbor_decision qui prend comme argument les donnĂ©es dâentrainement et lâentrĂ©e de la camĂ©ra actuelle, et qui renvoie la commande Ă envoyer au robot. Son prototype est :
nearest_neighbor_decision(train_sensors:list[listfloat],train_decisions:list[int],a:list[float])âint
Comme prĂ©cĂ©demment, a=x0, y0 et train_sensors=x1, y1, x2, y2, âŠ, xn, yn et train_decisions = d1,âŠ,dn oĂč chaque di est la dĂ©cision prise pour le point xi, yi dans le tableau train_sensors.Â
Pour réaliser la fonction, calculez les distances, trouvez la plus courte et renvoyez la commande associée en utilisant train_decisions.
â
- Programmez et testez nearest_neighbors_decision avec le code suivant :
# KNN
a = [0.4, 0.6]
train_sensors = [[0, 0], [0, 1], [1, 0]]
train_decisions = [1, 2, 0]
decision = nearest_neighbor_decision(train_sensors, train_decisions, a)
print('KNN', decision)
Recopiez le résultat :
â
â
UTILISATION DE VOTRE ALGORITHME AVEC LE ROBOTÂ
FĂ©licitations, vous avez programmĂ© vous-mĂȘmes lâalgorithme des K plus proches voisins dans le cas K=1. Il ne vous reste plus quâĂ lâutiliser dans le programme pour entraĂźner le robot.
Pour cela, recopiez les lignes ci-dessous pour programmer la fonction take_decision pour prendre les bonnes dĂ©cisions, mais Ă©galement learn pour se rappeler des donnĂ©es dâentraĂźnement train_sensors et train_decisions qui seront créées au fur et Ă mesure dans le programme principal :
train_sensors = train_decisions = None
def learn(X_train, y_train):
  global train_sensors, train_decisions
  train_sensors, train_decisions = X_train, y_train
  loss = 0
  return loss
def take_decision(sensors):
  if train_sensors is None:
    return 0
  return nearest_neigbor_decision(train_sensors, train_decisions, sensors)
 Et à présent, vous pouvez entraßner votre robot !
- Rechargez votre code

- DĂ©sactivez lâautonomie du robot en cliquant sur lâicĂŽne


- ,
- Dirigez le robot en cliquant sur les flĂšches Ă droite de lâĂ©cran. Tournez quand le robot est proche des murs et allez tout droit sinon.Â
Les tableaux train_sensors et train_decisions sont remplis automatiquement par le logiciel Ă chaque fois que vous cliquez une flĂšche.
- AprĂšs un court apprentissage, rĂ©activez lâautonomie


- Le robot navigue seul dans lâarĂšne. Ăvite-t-il les murs par lui-mĂȘme ?
â
â
Pour aller plus loin
Lâalgorithme que vous avez Ă©crit utilise le plus proche voisin pour prendre sa dĂ©cision. Modifiez votre code pour quâil prenne en compte la majoritĂ© des dĂ©cisions prises entre un nombre k>1, kâN. La difficultĂ© rĂ©side dans la modification de la fonction trouvant le minimum. Il faut maintenant quâelle en trouve k et non juste 1.
â
â
Bilan et retours d'expérience
â
En programmation, la liste des fonctions accessibles dâun programme sâappelle API, pour Application Programming Interface, Interface de Programmation dâApplication. Elle est utilisĂ©e par les programmeurs pour savoir comment interagir avec le programme. Vous trouverez lâAPI du module python alphai en suivant ce lien : https://drive.google.com/file/d/1C4ovPW_eH5KFz5Y9JvSrzLhtmdOpcp6-/view