Programmierung eines Linienfolgeroboters mit Verstärkungslernen


15

Ich denke darüber nach, einen Roboter mit Linienverfolgung unter Verwendung von Algorithmen zum Lernen der Verstärkung zu programmieren. Die Frage, über die ich nachdenke, ist, wie ich den Algorithmus dazu bringen kann, das Navigieren durch einen beliebigen Pfad zu lernen.

Nachdem ich das Sutton & Barto-Buch zum Erlernen von Übungen befolgt hatte, löste ich ein Übungsproblem, das eine Rennstrecke betraf, auf der der Agent lernte, nicht von der Strecke abzukommen und die Geschwindigkeit zu regulieren. Dieses Übungsproblem brachte den Agenten jedoch dazu, zu lernen, wie man auf der Strecke navigiert, auf der er trainiert hat.

Liegt es im Bereich des Bestärkungslernens, einen Roboter zum Navigieren auf beliebigen Pfaden zu bewegen? Muss der Agent unbedingt eine Karte der Rennstrecke oder des Rennwegs haben? Welche Parameter könnte ich möglicherweise für meinen Zustandsraum verwenden?


1
Ich weiß nicht wie, aber ich bin sicher, dass es möglich ist, ihm beizubringen, sich auf einem Pfad zu halten, unabhängig von seiner Form. Das Ziel des Lehrens in diesem Fall sollte sein, welche lokale Entscheidung der Roboter basierend auf seinen unmittelbaren Eingaben (oder vielleicht einer Geschichte) trifft. Auf diese Weise spielt es keine Rolle, wie der Pfad geformt ist, da alle Entscheidungen lokal sind.
Shahbaz

@ Shahbaz - Was würdest du mir für den State Space vorschlagen?
Lord Loh.

Ich bin mir eigentlich nicht sicher. Obwohl ich AI in der Universität studiert habe, war das nie mein Arbeits- / Forschungsgebiet. Die von Ihnen akzeptierte Antwort erscheint vernünftig!
Shahbaz

Verwenden Sie eine Antwort, um Markdown zu testen? Sie können einfach schreiben, was Sie wollen, und das sofortige Rendering darunter sehen, und es dann nicht veröffentlichen .
Shahbaz

Antworten:


8

Eine der wichtigsten Maßnahmen bei jedem Algorithmus für maschinelles Lernen ist die Fähigkeit zur Verallgemeinerung (dh die Anwendung des Erlernten auf zuvor unsichtbare Szenarien). Reinforcement Learners (RL) können gut verallgemeinern, aber diese Fähigkeit ist nach meiner Erfahrung teilweise eine Funktion der State-Space-Formulierung. Dies bedeutet, dass der RL-Lerner keine Karte der Rennstrecke benötigt, wenn Sie das richtige Setup finden.

Es bleibt die Frage, welche Parameter verwendet werden sollen. Ohne mehr über die an Ihrem Roboter verfügbaren Sensoren zu wissen, kann ich nur spekulieren. Meine erste Neigung ist, zu versuchen, die relative Ausrichtung der Linie und des Roboters zu codieren (dh neigt der Roboter nach rechts, links oder bewegt sich einfach parallel zur Linie). Dies würde zu einem schönen kleinen Zustandsraum führen. Dies ist zwar nicht unbedingt erforderlich, würde jedoch eine schnelle und einfache Implementierung ermöglichen. Wenn sich der Roboter nicht mit einer konstanten Geschwindigkeit bewegt, kann es außerdem hilfreich sein, die Geschwindigkeit des Roboters zu codieren, da der Roboter schneller reagieren muss, wenn er sich mit höheren Geschwindigkeiten bewegt.


Ohne die Karte ist der Zustandsraum genau das, was der Roboter von seiner unmittelbaren Position aus wahrnehmen kann. Die Karte ist also bis zu einem gewissen Grad nur ein Weg, um "nach vorne zu schauen". Das erlernte Verhalten im kartenlosen Szenario lautet im Wesentlichen "Mach das Gleiche wie zuvor, aber geh langsamer, weil wir diesmal nicht wissen, wo die Kurven sind". (Vermutlich können Sie feststellen, wo sich die Ränder der Strecke befinden.)
Ian

Eine Richtlinie gibt an, welche Steuerung bei einem bestimmten Status angewendet werden soll. Wenn der Zustandsraum für den RL-Agenten gut formuliert ist, sehen möglicherweise deutlich unterschiedliche Szenarien im Zustandsraum gleich aus und führen zu demselben Verhalten. Dies nennt man Verallgemeinerung und ist wünschenswert, wenn es richtig gemacht wird. Der Roboter hat eine maximale Geschwindigkeit, die von der Geschwindigkeit seines Regelkreises abhängt. Das erlernte Verhalten wird nicht unbedingt zu verlangsamen sein. Wenn sich die Belohnung umgekehrt auf die Dauer des Laufs bezieht, ist der Agent geneigt, seine Geschwindigkeit in Bezug auf die Geschwindigkeit seines Regelkreises zu maximieren.
DaemonMaker

0

Ich bin mir nicht sicher, welchen Robotertyp du hast, aber ich mache jetzt seit ein paar Jahren Robocup-Rettungsleinen. Mir ist klar geworden, dass die Verwendung von PID eine gute Option ist, wenn Sie einer Linie gut folgen möchten. Lassen Sie mich darauf näher eingehen. Wenn Sie sich zwei Lichtsensoren auf beiden Seiten der Linie vorstellen, möchten Sie, dass sie den gleichen Wert haben, sodass sich die Linie in der Mitte befindet. Sie können dann die Differenz zwischen den Werten der beiden Sensoren verwenden, um den Drehungsprozentsatz des Roboters zu ändern. Mit dieser Technik ist es möglich, einen Roboter dazu zu bringen, einer Linie mit außergewöhnlichen Geschwindigkeiten zu folgen. Ich mag, dass Sie darüber nachgedacht haben, den Roboter dazu zu bringen, seine Fähigkeiten zur Linienverfolgung zu verbessern. Was ich mir ausgedacht habe, ist, mit Ihren anfänglichen PID-Werten zu beginnen, die höher sind, als Sie möchten, und einen Kreiselsensor zu verwenden, um die Schwingungsfrequenz des Roboters zu messen, wenn dieser die Linie verfolgt. Sie können von dort aus Ihre eigene Funktion erstellen, um zu bestimmen, um wie viel Ihre Werte gesenkt werden müssen, um ein stabiles System zu erhalten. Dies ist keine künstliche Intelligenz, sondern ein automatisierter Optimierungsalgorithmus Internet. Ich hoffe das hilft. Wenn Sie Fragen haben, senden Sie mir eine E-Mail, dies ist nicht meine Haupt-E-Mail-Adresse, daher überprüfe ich sie nicht regelmäßig. 69darkeagle@sigaint.org

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.