Entdecken Sie unsere Lehrmaterialien

Benötigtes Material :
- Mindestens 1 Roboter oder Simulation in der Software
- 1 Computer/Roboter
- Kleine Arena Minimum
â
Software-Konfiguration :
- Beispielkonfiguration: hÀngt von der Code-Situation ab
â
Dauer :
2 Stunden
Alter :
16 Jahre und Àlter
â
Die + dieser AktivitÀt :
- Kann mit dem Simulator durchgefĂŒhrt werden
â
Spielerische AktivitĂ€t fĂŒr eine Klasse mit mehreren Robotern: Die SchĂŒlerinnen und SchĂŒler trainieren die Roboter, auf einer Rennstrecke zu fahren, und anschlieĂend wird ein Rennen veranstaltet. Die SchĂŒlerinnen und SchĂŒler lernen durch Manipulation das Prinzip des ĂŒberwachten Lernens und die Bedeutung der QualitĂ€t der Trainingsdaten kennen.
[Videoinhalt folgt]
â
â
EinfĂŒhrung
Machine Learning ist ein Zweig der kĂŒnstlichen Intelligenz, der darauf abzielt, Computern die Möglichkeit zu geben, zu lernen. Ein Computer ist nicht intelligent, er fĂŒhrt lediglich Aufgaben aus. Ihm wird in Form von Programmen beschrieben, was er tun soll und wie er es tun soll. Das nennt man Programmierung.
Machine Learning befasst sich mit komplexen Themen, bei denen die herkömmliche Programmierung an ihre Grenzen stöĂt. Ein Programm zu bauen, das ein Auto fĂ€hrt, wĂ€re sehr komplex oder sogar unmöglich. Das liegt an den sehr vielen möglichen FĂ€llen, die es zu behandeln gilt... Machine Learning geht dieses Problem anders an. Anstatt zu beschreiben, was zu tun ist, lernt das Programm durch das "Beobachten" von Experimenten selbst, wie es fahren soll.
Machine Learning: Einem Programm die Möglichkeit geben, Aufgaben zu erlernen, die nicht programmiert wurden.
Anhand der Versuchsdaten, die der Lernalgorithmus als Eingabe nimmt, wird er selbststĂ€ndig eine Funktionshypothese ableiten. Diese wird er fĂŒr neue FĂ€lle verwenden und seine Erfahrungen im Laufe der Zeit verfeinern.
Es gibt drei Arten des Lernens beim Machine Learning:
- Beaufsichtigtes Lernen
- Lernen UnĂŒberwachtes Lernen
- VerstÀrktes Lernen
Das ĂŒberwachte Lernen ist der hĂ€ufigste Typ. Dabei wird den Lernalgorithmen ein Satz von Lerndaten (Training Set) in Form von Paaren (X, Y) zur VerfĂŒgung gestellt, wobei X die Vorhersagevariablen (oder Eingabedaten) und Y das Ergebnis der Beobachtung (oder Entscheidung) ist. Basierend auf dem Training Set wird der Algorithmus eine mathematische Funktion finden, die (am besten) X nach Y transformiert. Mit anderen Worten, der Algorithmus wird eine Funktion F finden, so dass YâF(X) .
So weiĂ er in einer Situation X, welche Entscheidung Y treffen muss.
Lernsituation und Trainingsset des Roboters AlphAI
Nun mĂŒssen die Situationen X und die erwarteten Entscheidungen Y angegeben werden.Â
Die vorgeschlagene Fallstudie ist die Bewegung des Roboters in einer roten Arena. Das Ziel ist, dass sich der Roboter selbststĂ€ndig bewegt, ohne die WĂ€nde zu berĂŒhren.
Dazu kann der Roboter folgende Entscheidungen treffen:
- Nach links abbiegenÂ
- Geradeaus gehenÂ
- Nach rechts abbiegenÂ
Um eine Entscheidung zu treffen, braucht man notwendigerweise ein Feedback, um ĂŒber Daten (data oder training set) zu verfĂŒgen.

Dies wird von den Sensoren gegeben. Die hier getroffene Wahl ist die Verwendung der Kamera. Aus dem Bildbereich der Kamera werden zwei Bereiche extrahiert, die als Superpixel bezeichnet werden (siehe gegenĂŒberliegende Seite). Der Rotanteil jedes Superpixels nimmt zu, wenn sich der Roboter aufgrund des Kontrasts zwischen der weiĂen Bahn und den roten WĂ€nden den WĂ€nden nĂ€hert.
â
â
AktivitÀt 1. Geben Sie in der folgenden Tabelle das Ergebnis an, das als Entscheidung erwartet wird, je nachdem, was in den Superpixeln gesichtet wird.

â
Die oben genannten, vereinfachten FĂ€lle, kommen nur sehr selten vor. Um in allen möglichen FĂ€llen eine Entscheidung treffen zu können, muss man den numerischen Wert des Rotpegels erhalten.Â
Das Bild aus der Kamera hat eine GröĂe von 48*64 Pixeln. Die Position und Geometrie der Superpixel ist in der folgenden Abbildung definiert:
â

â
AktivitĂ€t 2. Ăffnen Sie die Datei get_values.py. Geben Sie den Pfad zum Bild forward_0.jpg an und fĂŒhren Sie den folgenden Code aus, um das Bild in Python anzuzeigen.
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") #gibt den Pfad zum Bild an
plt.imshow(img1)
plt.show()
Sie sollen ein Bild der unten stehenden Form mit einer GröĂe von 48 Pixel mal 64 Pixel erhalten, das mit den drei RGB-Farben (Rot GrĂŒn Blau) codiert ist.

"img1" ist ein Pixelarray mit der GröĂe 48*64*3
In der Pixeltabelle findet man die drei Farbniveaus Rot GrĂŒn Blau, die zwischen 0 und 255 codiert sind.
Aus diesem Bild mĂŒssen wir die beiden zuvor definierten Superpixel extrahieren und eine Methode bestimmen, um den Rotwert fĂŒr jedes Pixel zu erhalten.
â
â
Wir werden verschiedene Techniken vergleichen, um den besten Kontrast zwischen Rot und WeiĂ jedes Superpixels zu erreichen:

- die durchschnittliche Graustufe jedes Superpixels
- der durchschnittliche Rotwert jedes Superpixels
- den durchschnittlichen GrĂŒnwert jedes Superpixels
â
In einem ersten Schritt wird das Bild mithilfe der Funktion rgb2gray wie folgt in Graustufen umgewandelt:
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" entspricht dem Graustufenbild. Es gibt also nur einen einzigen numerischen Wert zwischen 0 und 255 fĂŒr jedes Pixel. 0 steht fĂŒr ein weiĂes Pixel und 255 fĂŒr ein schwarzes Pixel. Da die Superpixel im "unteren" Bereich des Bildes liegen
â
â
AktivitĂ€t 3. Schreiben Sie eine Funktion moyenne(img,x,y,height,width), die als Argumente ein Array von Pixeln "img" mit einem Farbpegel, die Koordinaten "x" und "y" des Pixels in der linken oberen Ecke eines Superpixels, die Höhe " height " und die Breite " width " eines Superpixels annimmt und den Durchschnitt des Farbpegels des Superpixels zurĂŒckgibt.Â
â
So ist es möglich, zwei Werte mit den beiden zuvor definierten Superpixeln mithilfe des Codes :
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))
Der Farbpegel des linken Superpixels wird als value1, der Farbpegel des rechten Superpixels als value2 bezeichnet. So ist es möglich, einen Punkt mit den Koordinaten (value1, value2) zu definieren
â
â
AktivitĂ€t 4. FĂŒhren Sie den Code aus, um die Werte value1 und value2 aus dem zuvor erhaltenen Graustufenbild abzurufen.
Die in der AlphAI-Software getroffene Wahl ist die Verwendung der Python-Funktion mean, die den Mittelwert der Tabelle berechnen wird.
â

â
â
AktivitÀt 5. Wenden Sie die AlphAI-Software-Methode und die Methode mit Graustufen an und ergÀnzen Sie in beiden FÀllen die Werte value1 und value2.
Funktion mean
Graue Ebene
Forward_0
Forwad_1
Left_0
Left_1
Right_0
Right_1
Right_2
Test_0
Test_1
â
â
AktivitĂ€t 6. Setzen Sie die Punkte auf dem Diagramm und identifizieren Sie die Bereiche, die den verschiedenen Entscheidungen entsprechen (links abbiegen, geradeaus fahren, rechts abbiegen). Ziehen Sie eine Schlussfolgerung darĂŒber, welche Methode Sie fĂŒr die Unterscheidung der verschiedenen Entscheidungen fĂŒr am besten geeignet halten.
Superpixel-IntensitÀt rechts
IntensitÀt Superpixel links
â
An diesem Punkt wÀre es möglich, den Roboter anhand von bedingten Aktionen zu steuern, die sich auf diese Superpixelwerte beziehen. Im Folgenden wird der Ansatz anders sein. Wir werden eine Methode verwenden, die den Namen "Algorithmus der K nÀchsten Nachbarn" trÀgt.
â
â
Der Algorithmus der k nÀchsten Nachbarn, KNN
Wir werden uns einen sehr bekannten Algorithmus unter den Algorithmen des maschinellen Lernens genauer ansehen: den Algorithmus der K nĂ€chsten Nachbarn, oder KNN auf Englisch fĂŒr " K Nearest Neighbours ". Dieser Algorithmus hat den Vorteil, dass er sehr einfach ist und daher eine gute Grundlage fĂŒr das VerstĂ€ndnis des ĂŒberwachten Lernens bietet.
Die Idee ist, eine groĂe Anzahl von Daten zu verwenden, um der Maschine "beizubringen", wie sie eine bestimmte Art von Problemen lösen kann. Der Algorithmus ist besonders intuitiv, wenn die Daten als Punkte in einem zweidimensionalen Raum vorliegen, die somit auf dem Bildschirm angezeigt werden können. Wir werden daher eine Konfiguration mit nur 2 SensoreingĂ€ngen wĂ€hlen, nĂ€mlich 2 "Superpixel" der Kamera, damit der Roboter die WĂ€nde erkennen und sich in der Arena ohne Blockaden bewegen kann. Danach kann er sich jedoch selbststĂ€ndig fortbewegen, indem er aus den wĂ€hrend der Trainingsphase eingegebenen Daten die Mehrheitsaktion der K nĂ€chsten Nachbarn auswĂ€hlt.
Dieser ĂŒberwachte Lernalgorithmus klassifiziert Daten auf der Grundlage ihrer NĂ€he zu bestehenden Trainingsdaten. Die neuen Daten betrachten k Nachbarn, die k nĂ€chsten, um zu entscheiden, welche Klassifizierung angewendet werden soll. Bei diskreten Daten, z. B. Punkten in einer Ebene oder im Raum, werden die nĂ€chsten Nachbarn mithilfe der euklidischen Distanz ausgewĂ€hlt, aber auch andere Methoden können in anderen Situationen verwendet werden, z. B. die Manhattan-Distanz, wenn die Daten auf einem Raster oder einem Schachbrett angeordnet sind. Der Vorteil dieses Algorithmus liegt in der Wahl von k: Ist er zu klein, wird der Algorithmus zu anfĂ€llig fĂŒr Fehler oder fehlende Daten, ist er zu groĂ, werden Daten berĂŒcksichtigt, die nicht berĂŒcksichtigt werden sollten.
Man kann die Funktionsweise von k-NN schematisieren, indem man sie in folgendem Pseudocode schreibt:
Anfang Algorithmus
Eingabedaten :
- einen Datensatz D, der dem erarbeiteten Trainingsset entspricht
- eine Funktion zur Berechnung des Abstands zwischen den beiden betrachteten Punkten mit den Koordinaten [x1,y1] und [x2,y2]. d=x2-x12+y2-y12
- eine ganze Zahl k, die die Anzahl der zu berĂŒcksichtigenden Nachbarn darstellt
FĂŒr eine neue Beobachtung X, deren Entscheidung Y vorhergesagt werden soll Make :
- Berechnen Sie alle Entfernungen dieser Beobachtung X zu den anderen Beobachtungen im Datensatz D
- Halten Sie die K Beobachtungen aus dem Datensatz D fest, die X am nÀchsten sind, indem Sie die Funktion zur Berechnung der Distanz d
- Nehmen Sie die Y-Werte der k ausgewĂ€hlten Beobachtungen. FĂŒhren Sie eine Regression durch und berechnen Sie den Mittelwert (oder Median) von Y.Â
- Geben Sie den in Schritt 3 berechneten Wert als den Wert zurĂŒck, der von K-NN fĂŒr die Beobachtung X vorhergesagt wurde.
Ende Algorithmus
Man muss also den Abstand zwischen zwei Punkten berechnen können. In einem zweidimensionalen Diagramm, wie es in unserem Beispiel der Fall ist, entspricht dies einfach der Norm des Vektors zwischen den beiden Punkten.
AktivitĂ€t 1. Schreiben Sie die Funktion distance(point1, point2), die zwei Punkte (point1=[x1,y1], point2=[x2,y2]) als Argumente nimmt und den Abstand zwischen diesen beiden Punkten zurĂŒckgibt.
AktivitĂ€t 2. FĂŒllen Sie die folgende Tabelle aus, indem Sie den Abstand zwischen den Superpixeln der vorherigen Bilder (forward_0.jpg, forward_1.jpg,...) und der beiden Testbilder (test_0.jpg und test_1.jpg) bestimmen.

â
AktivitÀt 3. Wenden Sie die Schritte 3 und 4 des K-NN-Algorithmus mit K=1,2,3 und 4 an und leiten Sie daraus die Entscheidung ab, die getroffen werden muss (geradeaus gehen, nach links abbiegen, nach rechts abbiegen).
â
â
Roboterantrieb
Phase der Vorbereitung der Arbeitsumgebung
- WĂ€hlen Sie im MenĂŒ Einstellungen - > Beispielkonfigurationen laden die Beispielkonfiguration "Ăberwachtes Lernen - KNN Kamera" aus.Â

Achtung: FĂŒr dieses Szenario sollten Sie, um den bestmöglichen Kontrast zu erzielen, eine weiĂe FlĂ€che auf den Boden legen und darauf achten, dass die Arena gleichmĂ€Ăig beleuchtet ist.
â
Trainingsphase
AktivitÀt 1. Befolgen Sie das Protokoll, um die Trainingsphase zu absolvieren.
â
Sie sind nun mit dem Roboter verbunden und Ihr Bildschirm sollte wie im Bild unten aussehen. Sein Batteriestand sollte unten rechts angezeigt werden (vergewissern Sie sich, dass der Roboter aufgeladen ist).
- Solange der Roboter Platz hat, um sich vorwĂ€rts zu bewegen, drĂŒcken Sie auf geradeaus.Â
- Wenn sich der Roboter einer Wand nĂ€hert, drĂŒcken Sie auf Drehen auf der Stelle nach links oder rechts.Â
Bei jeder Anweisung, die an den Roboter gesendet wird, wird dem Diagramm ein neuer Punkt hinzugefĂŒgt. Die Abszisse dieses Punktes entspricht dem Wert des linken Superpixels und seine Ordinate dem Wert des rechten Superpixels. Die Farbe jedes Punktes entspricht der gewĂ€hlten Aktion: gelb fĂŒr geradeaus, grĂŒn fĂŒr rechts abbiegen und rot fĂŒr links abbiegen. Diese Punkte sind die Trainingsdaten. Diese Trainingsphase ist von entscheidender Bedeutung, damit die KI richtig lernen kann. Wenn die Trainingsdaten zu viele Fehler oder AnnĂ€herungen enthalten, kann es sein, dass das Verhalten der KI nicht zufriedenstellend ist.Â

Beachten Sie:
Die Pixel werden dunkler, wenn sich der Roboter den WĂ€nden nĂ€hert. Normalerweise sollte man, wenn der linke Pixel am dunkelsten ist, nach rechts abbiegen, und wenn der rechte Pixel am dunkelsten ist, nach links abbiegen. Nachdem Sie einige Punkte auf der Grafik hinzugefĂŒgt haben, können Sie auf der Registerkarte "Visualisierungseinstellungen" die Hintergrundfarbe aktivieren. Diese Option fĂ€rbt jedes Pixel im Diagramm in der Farbe des nĂ€chstgelegenen Datenpunkts.

Wenn Sie drei deutliche Regionen auf dem Graphen haben, beenden Sie die Trainingsphase und schalten Sie die Autonomie wieder ein, um mit der Testphase fortzufahren. Zögern Sie nicht, den Roboter von Hand zu bewegen, wenn ein Bereich des Graphen zu wenige Punkte enthÀlt.
â
â
Tests
Wenn der Roboter gut trainiert ist, kann er die Kanten selbststĂ€ndig vermeiden. Wenn er hingegen schlecht trainiert ist oder die Helligkeit in der Arena nicht gleichmĂ€Ăig ist, wird dies in den erstellten Regionen LĂ€rm erzeugen und der Roboter wird mehr unangemessene Aktionen ausfĂŒhren.
Beachten Sie:
Um das beste Verhalten des Roboters zu erreichen, mĂŒssen Sie mehrere Werte fĂŒr k testen. Um diesen Wert zu Ă€ndern, gehen Sie auf die Registerkarte "KI" und Ă€ndern Sie den Wert des Parameters "Anzahl der Nachbarn".
Ein guter Wert fĂŒr k verringert die Wirkung von Rauschen und ermöglicht es dem Roboter, besser mit unerforschten Gebieten umzugehen.
Wenn der Roboter gut trainiert ist und die Tests gut verlaufen, können Sie mit den AktivitÀten fortfahren.
â
AktivitĂ€t 1. Vergleiche das Verhalten des Roboters bei k=1, k=3, k=10 und k=30. Versuchen Sie dann, anhand Ihrer Beobachtungen den Wert fĂŒr k zu bestimmen, der den Effekt der Fehler minimiert und das beste Roboterverhalten ergibt, d. h. die gröĂte Distanz, die der Roboter zurĂŒcklegt, ohne gegen eine Wand zu stoĂen. Der richtige Wert wird von der Anzahl der Datenpunkte und der Anzahl der Fehler in diesen Daten abhĂ€ngen.
â
AktivitĂ€t 2. Nachdem Sie den Algorithmus nun verstanden haben, versuchen Sie, den Roboter mit so wenigen Daten wie möglich zu trainieren, die es ihm ermöglichen, sich zu drehen, ohne gegen die WĂ€nde zu schlagen.Â
â
Erstellen Sie zunĂ€chst eine theoretische Version, indem Sie die Bereiche zeichnen, die Sie auf Ihrem Diagramm haben möchten. Welche Punkte mĂŒssen Sie setzen, um sie zu erstellen? Testen Sie diese Punkte mit dem Roboter, nachdem Sie sie in die Software eingegeben haben. War Ihr theoretisches Modell in der RealitĂ€t anwendbar oder mussten Sie Ănderungen vornehmen? Welche EinschrĂ€nkungen hat diese Methode fĂŒr einen Roboter wie diesen?
Tipp: Sie können den Roboter mit der Hand bewegen, um die Punkte auszuwÀhlen, die Sie ihm beibringen möchten.
Hinweis: Wir haben es geschafft, dem Roboter mit nur 3 Punkten beizubringen, sich in der Arena zu bewegen, ohne gegen die WĂ€nde zu schlagen.
WeiterfĂŒhrende Informationen :
â
AktivitĂ€t 3. Wenn Sie noch Zeit haben und experimentieren möchten, wechseln Sie den Algorithmus und schauen Sie, welche Unterschiede der Roboter in seinem Verhalten im Vergleich zu KNN aufweist. Welcher andere Algorithmus schlĂ€gt ein schnelleres Lernen vor? Und welcher andere Algorithmus wĂŒrde Ihrer Meinung nach das Lernen komplexerer Aufgaben ermöglichen, z. B. das Kicken eines grĂŒnen Balls oder das Erkennen von Befehlen, die mit Handzeichen kommuniziert werden?
â
â
Programmieren des Algorithmus der K nÀchsten Nachbarn
1. Stoppen Sie den Roboter und aktivieren Sie wieder die Taste "Autonom".

2. WĂ€hlen Sie auf der Registerkarte AI die Option Algorithmus: SchĂŒlercode , woraufhin sich ein neues Fenster öffnet, in dem Sie aufgefordert werden, der Datei einen Namen zu geben.Â
3. Nachdem Sie ihr einen Namen gegeben haben, erscheint die Datei im Windows Explorer: Ăffnen Sie sie in Ihrem bevorzugten Code-Editor (z. B. Spyder).
Dieser Code stellt drei bereits vorhandene Funktionen vor: init, learn und take_decision. Diese Funktionen werden von der Hauptsoftware aufgerufen. Nur die Funktion take_decision ist fĂŒr dieses TP wichtig.
4. Beachten Sie, dass beim Trennen der Verbindung ein simulierter Mini-Roboter in der unteren rechten Ecke erscheint. Wenn Sie möchten, können Sie die Fragen unten mit diesem Mini-Roboter beantworten und am Ende der Ăbung zum echten Roboter zurĂŒckkehren; Sie können aber auch die gesamte Ăbung durchfĂŒhren, wĂ€hrend Sie mit dem echten Roboter verbunden bleiben: ganz wie es Ihnen gefĂ€llt!
â
â
DEN ROBOTER DIREKT PROGRAMMIEREN
Bevor wir eine kĂŒnstliche Intelligenz programmieren, sollten wir zunĂ€chst das Prinzip der Funktion take_decision verstehen. Sie werden diese Funktion Ă€ndern können, um das Verhalten des Roboters zu verĂ€ndern: Speichern Sie nach jeder Ănderung Ihren Code und klicken Sie auf die SchaltflĂ€che "KI zurĂŒcksetzen". Diesen Schritt sollten Sie bei jeder Ănderung des Codes wiederholen: Speichern und dann den Code neu laden.
Die Funktion hat den folgenden Prototypen:
take_decisionsensors:listint
Die Eingabe sensors ist der Zustand der Sensoren des Roboters, d. h. in unserem Fall eine Liste mit den beiden Werten sensors[0] und sensors[1], die die IntensitÀt dessen darstellen, was der Roboter links und rechts von sich sieht. Seine Ausgabe ist die Nummer der gewÀhlten Aktion.
- FĂŒgen Sie die Anweisung print(sensors) innerhalb der Funktion ein. Speichern Sie, klicken Sie in der Software auf "KI zurĂŒcksetzen" und starten Sie den Roboter. Der Wert von sensors wird nun in der Konsole angezeigt (klicken Sie in der Taskleiste auf das Symbol, um die Konsole anzuzeigen). Wie hoch ist der Wert von sensors ungefĂ€hr, wenn der Roboter vor einer Wand steht? wenn er nicht vor einer Wand steht? wenn sich links oder rechts von ihm eine Wand befindet?

â
- Zurzeit gibt die Funktion 0 zurĂŒck. Welchen Wert muss die Funktion zurĂŒckgeben, damit der Roboter geradeaus fĂ€hrt? (Machen Sie den Versuch)
â
- Verwenden Sie die Variable x, um ein konsistentes Verhalten des Roboters zu programmieren: "Wenn es keine Wand gibt, gehe ich geradeaus; wenn es eine Wand gibt, drehe ich mich um."
â
â
ALGORITHMUSPROGRAMMIERUNG
Berechnung der Entfernung
Falls Sie es nicht bereits in der vorherigen AktivitĂ€t getan haben, programmieren Sie eine neue Funktion distance, die als Argumente zwei Punkte a und b nimmt, die zwei Arrays aus zwei Elementen sind, die jeweils ihre Koordinaten enthalten, und die den euklidischen Abstand dieser beiden Punkte zurĂŒckgibt. Der Prototyp der Funktion lautet wie folgt:
distancea:list, b:listfloat
Mit a=x1, y1 und b=x2, y2
Zur Erinnerung: Der euklidische Abstand zwischen diesen beiden Punkten ist: d=x2-x12+y2-y12.
Die Quadratwurzel kann in Python verwendet werden, indem man die math (oder numpy) Bibliothek am Anfang der :
import math
und wird so geschrieben:
y = math.sqrt(x)
Der quadratische Operator kann folgendermaĂen hergestellt werden:
y = x**2
- Programmieren Sie die neue Funktion distance. Um sie dann zu testen, schreiben Sie unten in der Datei :
# compute distance
a = [0, 0]
b = [1, 2]
print("distance", distance(a, b))
Speichern Sie, laden Sie den Code mit "KI zurĂŒcksetzen" und notieren Sie unten das Ergebnis, das in der Konsole angezeigt wird :
â
Berechnung aller Entfernungen
Da Sie nun eine Methode zur Berechnung einer Entfernung haben, schreiben Sie eine neue Funktion all_distances, die alle Entfernungen von einem Punkt in Bezug auf die Variable train_sensors berechnet, die die Eingabedaten fĂŒr das Training sind. Diese Funktion nimmt als Argument einen neuen Punkt x, der wie zuvor eine Liste mit zwei Elementen ist, und gibt ein Array zurĂŒck, das alle diese Entfernungen enthĂ€lt. Ihr Prototyp ist :
all_distances(a:list[float], train_sensors:list[list[float]]])âlist[float]
Mit a=x0, y0 und train_sensors=x1, y1, x2, y2, ..., xn, yn Wobei das Array train_sensors die LĂ€nge n hat.
â
- Programmieren Sie all_distances und testen Sie mit dem folgenden Code am Ende der Datei :
# 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)
Laden Sie den Code neu und kopieren Sie Ihr Ergebnis :
â
Das kleinste Element eines Arrays finden
Erstellen Sie eine Funktion mit dem Namen find_minimum, die als einziges Argument ein Array verwendet und den Index des ersten kleinsten Elements zurĂŒckgibt. Ihr Prototyp ist :
find_minimum(dlist:listfloat)âint
- Programmieren und testen Sie find_minimum mit dem folgenden Code:
# minimum in a list
idx_min = find_minimum(distance_list)
print('index of minimum', idx_min)
Beachten Sie das Ergebnis :
â
Der nÀchste Nachbar
Da wir nun alle notwendigen Funktionen haben, können wir die Funktion nearest_neighbor_decision erstellen, die als Argument die Trainingsdaten und den aktuellen Kameraeingang nimmt und den Befehl zurĂŒckgibt, der an den Roboter gesendet werden soll. Ihr Prototyp ist :
nearest_neighbor_decision(train_sensors:list[listfloat],train_decisions:list[int],a:list[float])âint
Wie zuvor a=x0, y0 und train_sensors=x1, y1, x2, y2, ..., xn, yn und train_decisions = d1,...,dn, wobei jedes di die Entscheidung ist, die fĂŒr den Punkt xi, yi in der Tabelle train_sensors getroffen wurde .Â
Um die Funktion auszufĂŒhren, berechnen Sie die Entfernungen, finden Sie die kĂŒrzeste und geben Sie den zugehörigen Befehl mithilfe von train_decisions zurĂŒck.
â
- Programmieren und testen Sie nearest_neighbors_decision mit dem folgenden Code:
# 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)
Kopieren Sie das Ergebnis :
â
â
VERWENDUNG IHRES ALGORITHMUS MIT DEM ROBOTERÂ
Herzlichen GlĂŒckwunsch, Sie haben den Algorithmus der K nĂ€chsten Nachbarn im Fall K=1 selbst programmiert. Jetzt mĂŒssen Sie ihn nur noch im Programm verwenden, um den Roboter zu trainieren.
Kopieren Sie dazu die folgenden Zeilen, um die Funktion take_decision zu programmieren, um die richtigen Entscheidungen zu treffen, aber auch learn, um sich an die Trainingsdaten train_sensors und train_decisions zu erinnern, die nach und nach im Hauptprogramm erstellt werden:
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)
 Und jetzt können Sie Ihren Roboter trainieren!
- Code aufladen

- Deaktivieren Sie die Autonomie des Roboters, indem Sie auf das Symbol


- ,
- Lenken Sie den Roboter, indem Sie auf die Pfeile auf der rechten Seite des Bildschirms klicken. Drehen Sie sich, wenn sich der Roboter in der NĂ€he von WĂ€nden befindet, und gehen Sie ansonsten geradeaus.Â
Die Tabellen train_sensors und train_decisions werden jedes Mal, wenn Sie einen Pfeil anklicken, automatisch von der Software ausgefĂŒllt.
- Nach einer kurzen Lernphase reaktivieren Sie die Autonomie


- Der Roboter navigiert allein durch die Arena. Weicht er selbststÀndig den WÀnden aus?
â
â
WeiterfĂŒhrende Informationen
Der Algorithmus, den Sie geschrieben haben, verwendet den nĂ€chsten Nachbarn, um eine Entscheidung zu treffen. Ăndern Sie Ihren Code so, dass er die Mehrheit der Entscheidungen berĂŒcksichtigt, die zwischen einer Zahl k>1, kâN getroffen werden. Die Schwierigkeit besteht darin, die Funktion, die das Minimum findet, zu Ă€ndern. Sie muss nun k und nicht nur 1 finden.
â
â
Bilanz und Feedback
â
In der Programmierung wird die Liste der zugĂ€nglichen Funktionen eines Programms als API bezeichnet, was fĂŒr Application Programming Interface(Schnittstelle zur Anwendungsprogrammierung) steht. Sie wird von Programmierern verwendet, um herauszufinden, wie sie mit dem Programm interagieren können. Die API des Python-Moduls alphai finden Sie unter folgendem Link: https: //drive.google.com/file/d/1C4ovPW_eH5KFz5Y9JvSrzLhtmdOpcp6-/view